We are seeing a new problem (not sure how long it has been around) with setgid permission bits on directories. This happens with 2.6 kernels:

/home/pcarns> mkdir /mnt/pvfs2/dir1
/home/pcarns> chmod g+s /mnt/pvfs2/dir1
/home/pcarns> mkdir /mnt/pvfs2/dir1/dir2
/home/pcarns> ls -alh /mnt/pvfs2/dir1/
total 12K
drwxr-sr-x  1 pcarns users 4.0K Sep 19 23:02 .
drwxrwxrwt  1 root   root  4.0K Sep 19 23:02 ..
drwxr-xr-x  1 pcarns users 4.0K Sep 19 23:02 dir2

The problem is that dir2 did not inherit the setgid as it should have.

Digging a little further, I can see this protocol exchange during the "mkdir /mnt/pvfs2/dir1/dir2" command:

- mkdir (with setgid bit appropriately set)
- crdirent
- getattr (with response showing setgid bit set)
- setattr (which clears the setgid bit)

A snippet of the kernel logs with all of the debugging masks turned on is listed below. The getattr is definitely seeing an i_mode of 42755, but then a pvfs2_flush_inode() call is made which sets it to 40755.

Any idea why pvfs2_flush_inode() is being triggered after the subdirectory is created, and why it has the wrong permission bits?

thanks,
-Phil



Alloced OP (c3e483e0: 173 OP_MKDIR)
pvfs2: service_operation: pvfs2_create_dir c3e483e0
client-core: reading op tag 173 OP_MKDIR
(get) Alloced OP (c3e483e0:173)
pvfs2: service_operation pvfs2_create_dir returning: 0 for c3e483e0.
Mkdir Got PVFS2 handle 1048567 on fsid 1451462841
pvfs2_get_custom_inode: called
  (sb is c0f81600 | MAJOR(dev)=0 | MINOR(dev)=0)
pvfs2_alloc_inode: allocated c9aa64b8
pvfs2_read_inode: c9aa64b8 (inode = 1048567 | ct = 1)
pvfs2_inode_getattr: called on inode 1048567
Alloced OP (c58bc420: 174 OP_GETATTR)
pvfs2: service_operation: pvfs2_inode_getattr c58bc420
client-core: reading op tag 174 OP_GETATTR
(get) Alloced OP (c58bc420:174)
pvfs2: service_operation pvfs2_inode_getattr returning: 0 for c58bc420.
attrs->mask = 510007f (1048576, objtype = 4), size = 0
pvfs2: copy_attributes_to_inode: setting inode->i_mode to 42755 from 0
Getattr on handle 1048567, fsid 1451462841
  (inode ct = 1) returned 0
Releasing OP (c58bc420: 174)
pvfs2_get_custom_inode: inode c9aa64e4 allocated
  (pvfs2_inode is c9aa64b8 | sb is c0f81600)
Initializing ACL's for inode 1048567
inode->i_mode before 40755 and after 40755
pvfs2_flush_inode (1048567) writing mode 40755
*********** pvfs2_flush_inode: 1048567 (ia_valid 1)
Alloced OP (c58bc420: 175 OP_SETATTR)
mode is 16877 | translated perms is 493
pvfs2: service_operation: pvfs2_inode_setattr c58bc420
client-core: reading op tag 175 OP_SETATTR
(get) Alloced OP (c58bc420:175)
pvfs2: service_operation pvfs2_inode_setattr returning: 0 for c58bc420.
pvfs2_inode_setattr: returning 0
Releasing OP (c58bc420: 175)
Assigned dir inode new number of 1048567
pvfs2_create_dir: Instantiating
  *negative* dentry c52cf118 for test4
Inode (Directory) 1048567 -> test4
Releasing OP (c3e483e0: 173)
pvfs2_dirty_inode: 1048574
_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to