Skip to content

Commit

Permalink
GFS2: Fix sgid propagation when using ACLs
Browse files Browse the repository at this point in the history
This cleans up the mode setting code when creating inodes. The
SGID bit was being reset by setattr_copy() when the user creating a
subdirectory was not in the owning group. When ACLs are in use this
SGID bit should have been propagated if the ACL allows creation of
a subdirectory. GFS2's behaviour now matches that of the other ACL
supporting filesystems in this regard.

Signed-off-by: Steven Whitehouse <[email protected]>
  • Loading branch information
swhiteho committed May 4, 2012
1 parent c0752aa commit f9425ad
Showing 1 changed file with 3 additions and 9 deletions.
12 changes: 3 additions & 9 deletions fs/gfs2/acl.c
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,8 @@ static int gfs2_set_mode(struct inode *inode, umode_t mode)
int error = 0;

if (mode != inode->i_mode) {
struct iattr iattr;

iattr.ia_valid = ATTR_MODE;
iattr.ia_mode = mode;

error = gfs2_setattr_simple(inode, &iattr);
inode->i_mode = mode;
mark_inode_dirty(inode);
}

return error;
Expand Down Expand Up @@ -126,9 +122,7 @@ int gfs2_acl_create(struct gfs2_inode *dip, struct inode *inode)
return PTR_ERR(acl);
if (!acl) {
mode &= ~current_umask();
if (mode != inode->i_mode)
error = gfs2_set_mode(inode, mode);
return error;
return gfs2_set_mode(inode, mode);
}

if (S_ISDIR(inode->i_mode)) {
Expand Down

0 comments on commit f9425ad

Please sign in to comment.