Re: [PATCH] nfsv3: Use inode posix acl cache

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Any chance of getting this patch applied ?

-aneesh


On Wed, Sep 02, 2009 at 05:29:48PM +0530, Aneesh Kumar K.V wrote:
> This patch update nfs3 acl caching to use struct inode acl cache.
> 
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@xxxxxxxxxxxxxxxxxx>
> ---
>  fs/nfs/inode.c         |    4 --
>  fs/nfs/nfs3acl.c       |   82 +++++++++---------------------------------------
>  include/linux/nfs_fs.h |    4 --
>  3 files changed, 15 insertions(+), 75 deletions(-)
> 
> diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
> index bd7938e..714ed5e 100644
> --- a/fs/nfs/inode.c
> +++ b/fs/nfs/inode.c
> @@ -1346,10 +1346,6 @@ struct inode *nfs_alloc_inode(struct super_block *sb)
>  		return NULL;
>  	nfsi->flags = 0UL;
>  	nfsi->cache_validity = 0UL;
> -#ifdef CONFIG_NFS_V3_ACL
> -	nfsi->acl_access = ERR_PTR(-EAGAIN);
> -	nfsi->acl_default = ERR_PTR(-EAGAIN);
> -#endif
>  #ifdef CONFIG_NFS_V4
>  	nfsi->nfs4_acl = NULL;
>  #endif /* CONFIG_NFS_V4 */
> diff --git a/fs/nfs/nfs3acl.c b/fs/nfs/nfs3acl.c
> index bac6051..8271b3c 100644
> --- a/fs/nfs/nfs3acl.c
> +++ b/fs/nfs/nfs3acl.c
> @@ -115,70 +115,13 @@ int nfs3_removexattr(struct dentry *dentry, const char *name)
>  	return nfs3_proc_setacl(inode, type, NULL);
>  }
> 
> -static void __nfs3_forget_cached_acls(struct nfs_inode *nfsi)
> -{
> -	if (!IS_ERR(nfsi->acl_access)) {
> -		posix_acl_release(nfsi->acl_access);
> -		nfsi->acl_access = ERR_PTR(-EAGAIN);
> -	}
> -	if (!IS_ERR(nfsi->acl_default)) {
> -		posix_acl_release(nfsi->acl_default);
> -		nfsi->acl_default = ERR_PTR(-EAGAIN);
> -	}
> -}
> -
>  void nfs3_forget_cached_acls(struct inode *inode)
>  {
> -	dprintk("NFS: nfs3_forget_cached_acls(%s/%ld)\n", inode->i_sb->s_id,
> -		inode->i_ino);
> -	spin_lock(&inode->i_lock);
> -	__nfs3_forget_cached_acls(NFS_I(inode));
> -	spin_unlock(&inode->i_lock);
> -}
> +       dprintk("NFS: nfs3_forget_cached_acls(%s/%ld)\n", inode->i_sb->s_id,
> +	       inode->i_ino);
> +       forget_cached_acl(inode, ACL_TYPE_DEFAULT);
> +       forget_cached_acl(inode, ACL_TYPE_ACCESS);
> 
> -static struct posix_acl *nfs3_get_cached_acl(struct inode *inode, int type)
> -{
> -	struct nfs_inode *nfsi = NFS_I(inode);
> -	struct posix_acl *acl = ERR_PTR(-EINVAL);
> -
> -	spin_lock(&inode->i_lock);
> -	switch(type) {
> -		case ACL_TYPE_ACCESS:
> -			acl = nfsi->acl_access;
> -			break;
> -
> -		case ACL_TYPE_DEFAULT:
> -			acl = nfsi->acl_default;
> -			break;
> -
> -		default:
> -			goto out;
> -	}
> -	if (IS_ERR(acl))
> -		acl = ERR_PTR(-EAGAIN);
> -	else
> -		acl = posix_acl_dup(acl);
> -out:
> -	spin_unlock(&inode->i_lock);
> -	dprintk("NFS: nfs3_get_cached_acl(%s/%ld, %d) = %p\n", inode->i_sb->s_id,
> -		inode->i_ino, type, acl);
> -	return acl;
> -}
> -
> -static void nfs3_cache_acls(struct inode *inode, struct posix_acl *acl,
> -		    struct posix_acl *dfacl)
> -{
> -	struct nfs_inode *nfsi = NFS_I(inode);
> -
> -	dprintk("nfs3_cache_acls(%s/%ld, %p, %p)\n", inode->i_sb->s_id,
> -		inode->i_ino, acl, dfacl);
> -	spin_lock(&inode->i_lock);
> -	__nfs3_forget_cached_acls(NFS_I(inode));
> -	if (!IS_ERR(acl))
> -		nfsi->acl_access = posix_acl_dup(acl);
> -	if (!IS_ERR(dfacl))
> -		nfsi->acl_default = posix_acl_dup(dfacl);
> -	spin_unlock(&inode->i_lock);
>  }
> 
>  struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type)
> @@ -207,8 +150,8 @@ struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type)
>  	status = nfs_revalidate_inode(server, inode);
>  	if (status < 0)
>  		return ERR_PTR(status);
> -	acl = nfs3_get_cached_acl(inode, type);
> -	if (acl != ERR_PTR(-EAGAIN))
> +	acl = get_cached_acl(inode, type);
> +	if (acl != ACL_NOT_CACHED)
>  		return acl;
>  	acl = NULL;
> 
> @@ -259,9 +202,11 @@ struct posix_acl *nfs3_proc_getacl(struct inode *inode, int type)
>  			res.acl_access = NULL;
>  		}
>  	}
> -	nfs3_cache_acls(inode,
> -		(res.mask & NFS_ACL)   ? res.acl_access  : ERR_PTR(-EINVAL),
> -		(res.mask & NFS_DFACL) ? res.acl_default : ERR_PTR(-EINVAL));
> +
> +	if (res.mask & NFS_ACL)
> +		set_cached_acl(inode, type, res.acl_access);
> +	if (res.mask & NFS_DFACL)
> +		set_cached_acl(inode, type, res.acl_default);
> 
>  	switch(type) {
>  		case ACL_TYPE_ACCESS:
> @@ -344,7 +289,10 @@ static int nfs3_proc_setacls(struct inode *inode, struct posix_acl *acl,
>  	switch (status) {
>  		case 0:
>  			status = nfs_refresh_inode(inode, &fattr);
> -			nfs3_cache_acls(inode, acl, dfacl);
> +			if (!IS_ERR(dfacl))
> +				set_cached_acl(inode, ACL_TYPE_DEFAULT, dfacl);
> +			if (!IS_ERR(acl))
> +				set_cached_acl(inode, ACL_TYPE_ACCESS, acl);
>  			break;
>  		case -EPFNOSUPPORT:
>  		case -EPROTONOSUPPORT:
> diff --git a/include/linux/nfs_fs.h b/include/linux/nfs_fs.h
> index f6b9024..738758f 100644
> --- a/include/linux/nfs_fs.h
> +++ b/include/linux/nfs_fs.h
> @@ -150,10 +150,6 @@ struct nfs_inode {
>  	struct rb_root		access_cache;
>  	struct list_head	access_cache_entry_lru;
>  	struct list_head	access_cache_inode_lru;
> -#ifdef CONFIG_NFS_V3_ACL
> -	struct posix_acl	*acl_access;
> -	struct posix_acl	*acl_default;
> -#endif
> 
>  	/*
>  	 * This is the cookie verifier used for NFSv3 readdir
> -- 
> 1.6.4.2.253.g0b1fac
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux