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>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
        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);