Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 258a5aa8 authored by Nick Piggin's avatar Nick Piggin
Browse files

btrfs: provide simple rcu-walk ACL implementation



This simple implementation just checks for no ACLs on the inode, and
if so, then the rcu-walk may proceed, otherwise fail it.

Signed-off-by: default avatarNick Piggin <npiggin@kernel.dk>
parent 73598611
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -187,12 +187,14 @@ static int btrfs_xattr_acl_set(struct dentry *dentry, const char *name,

int btrfs_check_acl(struct inode *inode, int mask, unsigned int flags)
{
	struct posix_acl *acl;
	int error = -EAGAIN;

	if (flags & IPERM_FLAG_RCU)
		return -ECHILD;
	if (flags & IPERM_FLAG_RCU) {
		if (!negative_cached_acl(inode, ACL_TYPE_ACCESS))
			error = -ECHILD;

	} else {
		struct posix_acl *acl;
		acl = btrfs_get_acl(inode, ACL_TYPE_ACCESS);
		if (IS_ERR(acl))
			return PTR_ERR(acl);
@@ -200,6 +202,7 @@ int btrfs_check_acl(struct inode *inode, int mask, unsigned int flags)
			error = posix_acl_permission(inode, acl, mask);
			posix_acl_release(acl);
		}
	}

	return error;
}
+0 −3
Original line number Diff line number Diff line
@@ -7213,9 +7213,6 @@ static int btrfs_set_page_dirty(struct page *page)

static int btrfs_permission(struct inode *inode, int mask, unsigned int flags)
{
	if (flags & IPERM_FLAG_RCU)
		return -ECHILD;

	if ((BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) && (mask & MAY_WRITE))
		return -EACCES;
	return generic_permission(inode, mask, flags, btrfs_check_acl);