Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 17 Apr 2020 10:28:05 +0000
From:      bugzilla-noreply@freebsd.org
To:        bugs@FreeBSD.org
Subject:   [Bug 245689] Chmod performs unnecessary access calls (FUSE fs)
Message-ID:  <bug-245689-227@https.bugs.freebsd.org/bugzilla/>

next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D245689

            Bug ID: 245689
           Summary: Chmod performs unnecessary access calls (FUSE fs)
           Product: Base System
           Version: 12.1-RELEASE
          Hardware: amd64
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: kern
          Assignee: bugs@FreeBSD.org
          Reporter: freebsd@moosefs.pro

FreeBSD 12.1-p2, MooseFS mounted via FUSE ver 3.

We perform the following operations:

$ touch test.txt ; chmod u-w test.txt ; chmod u+w test.txt
chmod: test.txt: Permission denied

What happens on the fs side:

# touch test.txt
04.08 09:58:05.000715: uid:1001 gid:0 pid:48262 cmd:access (504599,0x1): OK
04.08 09:58:05.001324: uid:1001 gid:0 pid:48262 cmd:lookup (504599,test.txt=
):
ENOENT (No such file or directory)
04.08 09:58:05.001731: uid:1001 gid:0 pid:48262 cmd:access (504599,0x1): OK
04.08 09:58:05.002157: uid:1001 gid:0 pid:48262 cmd:lookup (504599,test.txt=
):
ENOENT (No such file or directory)
04.08 09:58:05.002546: uid:1001 gid:0 pid:48262 cmd:access (504599,0x2): OK
04.08 09:58:05.002946: uid:1001 gid:0 pid:48262 cmd:create
(504599,test.txt,-rw-r--r--:0100644): OK
(0.0,1238695,1.0,[-rw-r--r--:0100644,1,1001,0,1586332685,1586332685,1586332=
685,0])
(direct_io:0,keep_cache:0) [handle:03000001]
04.08 09:58:05.003013: uid:1001 gid:0 pid:48262 cmd:flush (1238695)
[handle:03000001,uselocks:0,lock_owner:000000000000BC86]: OK
04.08 09:58:05.003249: uid:1001 gid:0 pid:48262 cmd:release (1238695)
[handle:03000001,uselocks:0,lock_owner:000000000000BC86]: OK
# chmod u-w test.txt
04.08 09:58:05.005207: uid:1001 gid:0 pid:48263 cmd:access (504599,0x1): OK
04.08 09:58:05.005668: uid:1001 gid:0 pid:48263 cmd:lookup (504599,test.txt=
):
OK
(0.0,1238695,1.0,[-rw-r--r--:0100644,1,1001,0,1586332685,1586332685,1586332=
685,0])
04.08 09:58:05.006095: uid:1001 gid:0 pid:48263 cmd:access (504599,0x1): OK
04.08 09:58:05.006490: uid:1001 gid:0 pid:48263 cmd:lookup (504599,test.txt=
):
OK
(0.0,1238695,1.0,[-rw-r--r--:0100644,1,1001,0,1586332685,1586332685,1586332=
685,0])
04.08 09:58:05.006888: uid:1001 gid:0 pid:48263 cmd:access (504599,0x1): OK
04.08 09:58:05.007260: uid:1001 gid:0 pid:48263 cmd:lookup (504599,test.txt=
):
OK
(0.0,1238695,1.0,[-rw-r--r--:0100644,1,1001,0,1586332685,1586332685,1586332=
685,0])
04.08 09:58:05.007292: uid:1001 gid:0 pid:48263 cmd:access (1238695,0x2): OK
04.08 09:58:05.007903: uid:1001 gid:0 pid:48263 cmd:setattr
(1238695,0x1,[mode=3Dr--r--r--:00444]) [no handle]: OK
(1.0,[-r--r--r--:0100444,1,1001,0,1586332685,1586332685,1586332685,0])
# chmod u+w test.txt
04.08 09:58:05.009607: uid:1001 gid:0 pid:48264 cmd:access (504599,0x1): OK
04.08 09:58:05.009944: uid:1001 gid:0 pid:48264 cmd:lookup (504599,test.txt=
):
OK
(0.0,1238695,1.0,[-r--r--r--:0100444,1,1001,0,1586332685,1586332685,1586332=
685,0])
04.08 09:58:05.010879: uid:1001 gid:0 pid:48264 cmd:access (504599,0x1): OK
04.08 09:58:05.011309: uid:1001 gid:0 pid:48264 cmd:lookup (504599,test.txt=
):
OK
(0.0,1238695,1.0,[-r--r--r--:0100444,1,1001,0,1586332685,1586332685,1586332=
685,0])
04.08 09:58:05.011680: uid:1001 gid:0 pid:48264 cmd:access (504599,0x1): OK
04.08 09:58:05.012068: uid:1001 gid:0 pid:48264 cmd:lookup (504599,test.txt=
):
OK
(0.0,1238695,1.0,[-r--r--r--:0100444,1,1001,0,1586332685,1586332685,1586332=
685,0])
04.08 09:58:05.012102: uid:1001 gid:0 pid:48264 cmd:access (1238695,0x2):
EACCES (Permission denied)
04.08 09:58:05.596937: uid:0 gid:0 pid:48228 cmd:getattr (504599) [no handl=
e]:
OK (1.0,[drwxr-xr-x:0040755,3,1001,0,1586332657,1586332685,1586332685,10022=
46])

So, we have an "access" call to a file that has no "w" permission for the u=
ser
calling, so we get an EACCES...

There are 2 problems here:
1) It is not necessary to have "w" permission to a file to change its metad=
ata
- this only requires the uid doing the changes to be either 0 or owner of t=
he
file.
2) MooseFS does NOT send "default_permissions" when initializing FUSE, so t=
he
whole checking of permissions should happen on the filesystem side. Yet,
practically all the calls are preceded with access calls.

Here is how the above chmod operations look on Linux:

# chmod u-w test.txt
04.08 10:10:26.794571: uid:1000 gid:1000 pid:30550 cmd:lookup
(164872,test.txt): OK
(0.0,210456,1.0,[-rw-r--r--:0100644,1,1000,1000,1586326757,1586326757,15863=
26769,0])
04.08 10:10:26.794717: uid:1000 gid:1000 pid:30550 cmd:lookup
(164872,test.txt): OK
(0.0,210456,1.0,[-rw-r--r--:0100644,1,1000,1000,1586326757,1586326757,15863=
26769,0])
04.08 10:10:26.802672: uid:1000 gid:1000 pid:30550 cmd:setattr
(210456,0x1,[mode=3Dr--r--r--:00444]) [no handle]: OK
(1.0,[-r--r--r--:0100444,1,1000,1000,1586326757,1586326757,1586333426,0])
# chmod u+w test.txt
04.08 10:10:26.803478: uid:1000 gid:1000 pid:30551 cmd:lookup
(164872,test.txt): OK
(0.0,210456,1.0,[-r--r--r--:0100444,1,1000,1000,1586326757,1586326757,15863=
33426,0])
04.08 10:10:26.803608: uid:1000 gid:1000 pid:30551 cmd:lookup
(164872,test.txt): OK
(0.0,210456,1.0,[-r--r--r--:0100444,1,1000,1000,1586326757,1586326757,15863=
33426,0])
04.08 10:10:26.803790: uid:1000 gid:1000 pid:30551 cmd:setattr
(210456,0x1,[mode=3Drw-r--r--:00644]) [no handle]: OK
(1.0,[-rw-r--r--:0100644,1,1000,1000,1586326757,1586326757,1586333426,0])

There are no "access" calls at all.

While problem 1) is a simple bug, problem 2) is a serious performance issue.
MooseFS is a network filesystem and performance is very important in this c=
ase
- it has to receive and handle twice as many calls sent via network.

--=20
You are receiving this mail because:
You are the assignee for the bug.=



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-245689-227>