Thread (54 messages) flat view 54 messages, 6 authors, 2016-03-21

Re: [PATCH v18 21/22] ext4: Add richacl support

From: Andreas Gruenbacher <agruenba@redhat.com>
Date: 2016-03-13 23:49:57
Also in: linux-cifs, linux-ext4, linux-fsdevel, linux-nfs, linux-xfs, lkml

On Fri, Mar 11, 2016 at 3:27 PM, Christoph Hellwig [off-list ref] wrote:
quoted
+static int
+__ext4_set_richacl(handle_t *handle, struct inode *inode, struct richacl *acl)
+{
+     const int name_index = EXT4_XATTR_INDEX_RICHACL;
+     umode_t mode = inode->i_mode;
+     int retval, size;
+     void *value;
+
+     if (richacl_equiv_mode(acl, &mode) == 0) {
+             inode->i_ctime = ext4_current_time(inode);
+             inode->i_mode = mode;
+             ext4_mark_inode_dirty(handle, inode);
+             return __ext4_remove_richacl(handle, inode);
+     }
Should this check for a NULL acl instead of special casing that
in ext4_set_richacl?
I'm not sure I understand what you mean. When iop->set_richacl is
called with a richacl that is mode-equivalent, the file permission
bits need to be updated and any existing acl needs to be removed.
Doing this at the vfs level would result in two calls, iop->setattr
and iop->set_richacl, which can cause problems. To remove an existing
acl without setting the mode, set_richacl is called with a NULL
richacl.

__ext4_set_richacl() was split into __ext4_set_richacl() and
__ext4_remove_richacl() to align with the xfs code due to the
following comment from Dave Chinner:
  http://oss.sgi.com/archives/xfs/2015-10/msg00354.html

Diff here:
  https://git.kernel.org/cgit/linux/kernel/git/agruen/linux-richacl.git/diff/fs/ext4/richacl.c?id=richacl-2015-10-16&id2=richacl-2015-10-12
quoted
+int
+ext4_init_richacl(handle_t *handle, struct inode *inode, struct inode *dir)
+{
+     struct richacl *acl = richacl_create(&inode->i_mode, dir);
+     int error;
+
+     error = PTR_ERR(acl);
+     if (IS_ERR(acl))
+             return error;
        if (IS_ERR(acl))
                return PTR_ERR(acl);
quoted
+     if (acl) {
+             error = __ext4_set_richacl(handle, inode, acl);
+             richacl_put(acl);
+     }
Shouldn't richacl_create return NULL if the ACL is equivalent to the
mode bits instead of letting every filesystem figure that out on it's
own?
Hm, that's what it does?

Thanks,
Andreas

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help