All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Aneesh Kumar K.V" <aneesh.kumar@linux.vnet.ibm.com>
To: Trond.Myklebust@netapp.com
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH] nfsv3: Use inode posix acl cache
Date: Tue, 15 Sep 2009 14:07:40 +0530	[thread overview]
Message-ID: <20090915083740.GA7884@skywalker.linux.vnet.ibm.com> (raw)
In-Reply-To: <1251892788-497-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com>


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@linux.vnet.ibm.com>
> ---
>  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
> 

  reply	other threads:[~2009-09-15  8:37 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-02 11:59 [PATCH] nfsv3: Use inode posix acl cache Aneesh Kumar K.V
2009-09-15  8:37 ` Aneesh Kumar K.V [this message]
     [not found]   ` <20090915083740.GA7884-6yE53ggjAfyuJw1Jpgb2kA4V1jybR7bhVpNB7YpNyf8@public.gmane.org>
2009-09-15 13:35     ` Trond Myklebust
     [not found]       ` <1253021706.4456.5.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-09-15 14:43         ` Aneesh Kumar K.V

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090915083740.GA7884@skywalker.linux.vnet.ibm.com \
    --to=aneesh.kumar@linux.vnet.ibm.com \
    --cc=Trond.Myklebust@netapp.com \
    --cc=linux-nfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.