forked from Minki/linux
nfs: define nfs_access_get_cached function
The only consumer of nfs_access_get_cached_rcu and nfs_access_cached calls these static functions in order to first try RCU access, and then locked access. Combine them in to a single function, and call that. Make this function available to the rest of the NFS code. Signed-off-by: Frank van der Linden <fllinden@amazon.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
3e1f02123f
commit
d2ae4f8b21
20
fs/nfs/dir.c
20
fs/nfs/dir.c
@ -2460,7 +2460,7 @@ static struct nfs_access_entry *nfs_access_search_rbtree(struct inode *inode, co
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static int nfs_access_get_cached(struct inode *inode, const struct cred *cred, struct nfs_access_entry *res, bool may_block)
|
||||
static int nfs_access_get_cached_locked(struct inode *inode, const struct cred *cred, struct nfs_access_entry *res, bool may_block)
|
||||
{
|
||||
struct nfs_inode *nfsi = NFS_I(inode);
|
||||
struct nfs_access_entry *cache;
|
||||
@ -2533,6 +2533,20 @@ out:
|
||||
return err;
|
||||
}
|
||||
|
||||
int nfs_access_get_cached(struct inode *inode, const struct cred *cred, struct
|
||||
nfs_access_entry *res, bool may_block)
|
||||
{
|
||||
int status;
|
||||
|
||||
status = nfs_access_get_cached_rcu(inode, cred, res);
|
||||
if (status != 0)
|
||||
status = nfs_access_get_cached_locked(inode, cred, res,
|
||||
may_block);
|
||||
|
||||
return status;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nfs_access_get_cached);
|
||||
|
||||
static void nfs_access_add_rbtree(struct inode *inode, struct nfs_access_entry *set)
|
||||
{
|
||||
struct nfs_inode *nfsi = NFS_I(inode);
|
||||
@ -2647,9 +2661,7 @@ static int nfs_do_access(struct inode *inode, const struct cred *cred, int mask)
|
||||
|
||||
trace_nfs_access_enter(inode);
|
||||
|
||||
status = nfs_access_get_cached_rcu(inode, cred, &cache);
|
||||
if (status != 0)
|
||||
status = nfs_access_get_cached(inode, cred, &cache, may_block);
|
||||
status = nfs_access_get_cached(inode, cred, &cache, may_block);
|
||||
if (status == 0)
|
||||
goto out_cached;
|
||||
|
||||
|
@ -493,6 +493,8 @@ extern int nfs_instantiate(struct dentry *dentry, struct nfs_fh *fh,
|
||||
struct nfs_fattr *fattr, struct nfs4_label *label);
|
||||
extern int nfs_may_open(struct inode *inode, const struct cred *cred, int openflags);
|
||||
extern void nfs_access_zap_cache(struct inode *inode);
|
||||
extern int nfs_access_get_cached(struct inode *inode, const struct cred *cred, struct nfs_access_entry *res,
|
||||
bool may_block);
|
||||
|
||||
/*
|
||||
* linux/fs/nfs/symlink.c
|
||||
|
Loading…
Reference in New Issue
Block a user