mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 02:49:32 +03:00
Don't perform ACL-to-mode translation on empty ACL
In zfs_acl_chown_setattr(), the zfs_mode_comput() function is used to create a traditional mode value based on an ACL. If no ACL exists, this processing shouldn't be done. Problems caused by this were most evident on version 4 filesystems which not only don't have system attributes, and also frequently have empty ACLs. On such filesystems, performing a chown() operation could have the effect of dirtying the mode bits in memory but not on the file system as follows: # create a file with typical mode of 664 echo test > test chown anyuser test ls -l test and the mode will show up as all zeroes. Unmounting/mounting and/or exporting/importing the filesystem will reveal the proper mode again. Signed-off-by: Tim Chase <tim@chase2k.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #1264
This commit is contained in:
parent
62bdd5eb7a
commit
356d9ed4c8
@ -1162,7 +1162,8 @@ zfs_acl_chown_setattr(znode_t *zp)
|
|||||||
ASSERT(MUTEX_HELD(&zp->z_lock));
|
ASSERT(MUTEX_HELD(&zp->z_lock));
|
||||||
ASSERT(MUTEX_HELD(&zp->z_acl_lock));
|
ASSERT(MUTEX_HELD(&zp->z_acl_lock));
|
||||||
|
|
||||||
if ((error = zfs_acl_node_read(zp, B_TRUE, &aclp, B_FALSE)) == 0)
|
error = zfs_acl_node_read(zp, B_TRUE, &aclp, B_FALSE);
|
||||||
|
if (error == 0 && aclp->z_acl_count > 0)
|
||||||
zp->z_mode = zfs_mode_compute(zp->z_mode, aclp,
|
zp->z_mode = zfs_mode_compute(zp->z_mode, aclp,
|
||||||
&zp->z_pflags, zp->z_uid, zp->z_gid);
|
&zp->z_pflags, zp->z_uid, zp->z_gid);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user