Message ID | 20200107165442.262020-4-hch@lst.de (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Series | [1/4] xfs: clear kernel only flags in XFS_IOC_ATTRMULTI_BY_HANDLE | expand |
On Tue, Jan 07, 2020 at 05:54:41PM +0100, Christoph Hellwig wrote: > We should not just invalidate the ACL when setting the underlying > attribute, but also when removing it. The ioctl interface gets that > right, but the normal xattr inteface skipped the xfs_forget_acl due > to an early return. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Looks ok, Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> --D > --- > fs/xfs/xfs_xattr.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c > index 383f0203d103..2288f20ae282 100644 > --- a/fs/xfs/xfs_xattr.c > +++ b/fs/xfs/xfs_xattr.c > @@ -74,10 +74,11 @@ xfs_xattr_set(const struct xattr_handler *handler, struct dentry *unused, > if (flags & XATTR_REPLACE) > xflags |= ATTR_REPLACE; > > - if (!value) > - return xfs_attr_remove(ip, (unsigned char *)name, xflags); > - error = xfs_attr_set(ip, (unsigned char *)name, > + if (value) > + error = xfs_attr_set(ip, (unsigned char *)name, > (void *)value, size, xflags); > + else > + error = xfs_attr_remove(ip, (unsigned char *)name, xflags); > if (!error) > xfs_forget_acl(inode, name, xflags); > > -- > 2.24.1 >
diff --git a/fs/xfs/xfs_xattr.c b/fs/xfs/xfs_xattr.c index 383f0203d103..2288f20ae282 100644 --- a/fs/xfs/xfs_xattr.c +++ b/fs/xfs/xfs_xattr.c @@ -74,10 +74,11 @@ xfs_xattr_set(const struct xattr_handler *handler, struct dentry *unused, if (flags & XATTR_REPLACE) xflags |= ATTR_REPLACE; - if (!value) - return xfs_attr_remove(ip, (unsigned char *)name, xflags); - error = xfs_attr_set(ip, (unsigned char *)name, + if (value) + error = xfs_attr_set(ip, (unsigned char *)name, (void *)value, size, xflags); + else + error = xfs_attr_remove(ip, (unsigned char *)name, xflags); if (!error) xfs_forget_acl(inode, name, xflags);
We should not just invalidate the ACL when setting the underlying attribute, but also when removing it. The ioctl interface gets that right, but the normal xattr inteface skipped the xfs_forget_acl due to an early return. Signed-off-by: Christoph Hellwig <hch@lst.de> --- fs/xfs/xfs_xattr.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)