Re: [PATCH 02/18] fs: add get_acl helper

Jan Kara
2013-12-02T20:14:40Z

On Sun 01-12-13 03:59:05, Christoph Hellwig wrote:
> Factor out the code to get an ACL either from the inode or disk from
> check_acl, so that it can be used elsewhere later on.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Looks good. You can add:
Reviewed-by: Jan Kara <jack@suse.cz>

Honza

> ---
> fs/namei.c | 24 +++---------------------
> fs/posix_acl.c | 23 +++++++++++++++++++++++
> include/linux/posix_acl.h | 2 ++
> 3 files changed, 28 insertions(+), 21 deletions(-)
>
> diff --git a/fs/namei.c b/fs/namei.c
> index c53d3a9..8acd1e8 100644
> --- a/fs/namei.c
> +++ b/fs/namei.c
> @@ -235,27 +235,9 @@ static int check_acl(struct inode *inode, int mask)
> return posix_acl_permission(inode, acl, mask & ~MAY_NOT_BLOCK);
> }
>
> - acl = get_cached_acl(inode, ACL_TYPE_ACCESS);
> -
> - /*
> - * A filesystem can force a ACL callback by just never filling the
> - * ACL cache. But normally you'd fill the cache either at inode
> - * instantiation time, or on the first ->get_acl call.
> - *
> - * If the filesystem doesn't have a get_acl() function at all, we'll
> - * just create the negative cache entry.
> - */
> - if (acl == ACL_NOT_CACHED) {
> - if (inode->i_op->get_acl) {
> - acl = inode->i_op->get_acl(inode, ACL_TYPE_ACCESS);
> - if (IS_ERR(acl))
> - return PTR_ERR(acl);
> - } else {
> - set_cached_acl(inode, ACL_TYPE_ACCESS, NULL);
> - return -EAGAIN;
> - }
> - }
> -
> + acl = get_acl(inode, ACL_TYPE_ACCESS);
> + if (IS_ERR(acl))
> + return PTR_ERR(acl);
> if (acl) {
> int error = posix_acl_permission(inode, acl, mask);
> posix_acl_release(acl);
> diff --git a/fs/posix_acl.c b/fs/posix_acl.c
> index 8bd2135..9dd03e0 100644
> --- a/fs/posix_acl.c
> +++ b/fs/posix_acl.c
> @@ -418,3 +418,26 @@ posix_acl_chmod(struct posix_acl **acl, gfp_t gfp, umode_t mode)
> return err;
> }
> EXPORT_SYMBOL(posix_acl_chmod);
> +
> +struct posix_acl *get_acl(struct inode *inode, int type)
> +{
> + struct posix_acl *acl;
> +
> + acl = get_cached_acl(inode, type);
> + if (acl != ACL_NOT_CACHED)
> + return acl;
> +
> + /*
> + * A filesystem can force a ACL callback by just never filling the
> + * ACL cache. But normally you'd fill the cache either at inode
> + * instantiation time, or on the first ->get_acl call.
> + *
> + * If the filesystem doesn't have a get_acl() function at all, we'll
> + * just create the negative cache entry.
> + */
> + if (!inode->i_op->get_acl) {
> + set_cached_acl(inode, type, NULL);
> + return ERR_PTR(-EAGAIN);
> + }
> + return inode->i_op->get_acl(inode, type);
> +}
> diff --git a/include/linux/posix_acl.h b/include/linux/posix_acl.h
> index 7931efe..a8d9918 100644
> --- a/include/linux/posix_acl.h
> +++ b/include/linux/posix_acl.h
> @@ -175,4 +175,6 @@ static inline void cache_no_acl(struct inode *inode)
> #endif
> }
>
> +struct posix_acl *get_acl(struct inode *inode, int type);
> +
> #endif /* __LINUX_POSIX_ACL_H */
> --
> 1.7.10.4
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
--
Jan Kara <jack@suse.cz>
SUSE Labs, CR