diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-09 12:11:54 -0400 | 
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-24 08:17:07 -0400 | 
| commit | 073aaa1b142461d91f83da66db1184d7c1b1edea (patch) | |
| tree | 2b54d185d78f1229418fca521a93e6b55c57248b /fs/ext4/acl.c | |
| parent | 06b16e9f68edaa1e71aee943d3c030bcf7380af1 (diff) | |
helpers for acl caching + switch to those
helpers: get_cached_acl(inode, type), set_cached_acl(inode, type, acl),
forget_cached_acl(inode, type).
ubifs/xattr.c needed includes reordered, the rest is a plain switchover.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ext4/acl.c')
| -rw-r--r-- | fs/ext4/acl.c | 65 | 
1 files changed, 9 insertions, 56 deletions
| diff --git a/fs/ext4/acl.c b/fs/ext4/acl.c index 0084e3a19d86..f6d8967149ca 100644 --- a/fs/ext4/acl.c +++ b/fs/ext4/acl.c @@ -126,33 +126,6 @@ fail:  	return ERR_PTR(-EINVAL);  } -static inline struct posix_acl * -ext4_iget_acl(struct inode *inode, struct posix_acl **i_acl) -{ -	struct posix_acl *acl = ACCESS_ONCE(*i_acl); - -	if (acl) { -		spin_lock(&inode->i_lock); -		acl = *i_acl; -		if (acl != ACL_NOT_CACHED) -			acl = posix_acl_dup(acl); -		spin_unlock(&inode->i_lock); -	} - -	return acl; -} - -static inline void -ext4_iset_acl(struct inode *inode, struct posix_acl **i_acl, -		struct posix_acl *acl) -{ -	spin_lock(&inode->i_lock); -	if (*i_acl != ACL_NOT_CACHED) -		posix_acl_release(*i_acl); -	*i_acl = posix_acl_dup(acl); -	spin_unlock(&inode->i_lock); -} -  /*   * Inode operation get_posix_acl().   * @@ -169,23 +142,19 @@ ext4_get_acl(struct inode *inode, int type)  	if (!test_opt(inode->i_sb, POSIX_ACL))  		return NULL; +	acl = get_cached_acl(inode, type); +	if (acl != ACL_NOT_CACHED) +		return acl; +  	switch (type) {  	case ACL_TYPE_ACCESS: -		acl = ext4_iget_acl(inode, &inode->i_acl); -		if (acl != ACL_NOT_CACHED) -			return acl;  		name_index = EXT4_XATTR_INDEX_POSIX_ACL_ACCESS;  		break; -  	case ACL_TYPE_DEFAULT: -		acl = ext4_iget_acl(inode, &inode->i_default_acl); -		if (acl != ACL_NOT_CACHED) -			return acl;  		name_index = EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT;  		break; -  	default: -		return ERR_PTR(-EINVAL); +		BUG();  	}  	retval = ext4_xattr_get(inode, name_index, "", NULL, 0);  	if (retval > 0) { @@ -202,17 +171,9 @@ ext4_get_acl(struct inode *inode, int type)  		acl = ERR_PTR(retval);  	kfree(value); -	if (!IS_ERR(acl)) { -		switch (type) { -		case ACL_TYPE_ACCESS: -			ext4_iset_acl(inode, &inode->i_acl, acl); -			break; +	if (!IS_ERR(acl)) +		set_cached_acl(inode, type, acl); -		case ACL_TYPE_DEFAULT: -			ext4_iset_acl(inode, &inode->i_default_acl, acl); -			break; -		} -	}  	return acl;  } @@ -269,17 +230,9 @@ ext4_set_acl(handle_t *handle, struct inode *inode, int type,  				      value, size, 0);  	kfree(value); -	if (!error) { -		switch (type) { -		case ACL_TYPE_ACCESS: -			ext4_iset_acl(inode, &inode->i_acl, acl); -			break; +	if (!error) +		set_cached_acl(inode, type, acl); -		case ACL_TYPE_DEFAULT: -			ext4_iset_acl(inode, &inode->i_default_acl, acl); -			break; -		} -	}  	return error;  } | 
