Skip to content

Commit bd8b244

Browse files
trondmypdamschuma-ntap
authored andcommitted
NFS: Store the raw NFS access mask in the inode's access cache
Signed-off-by: Trond Myklebust <[email protected]> Signed-off-by: Anna Schumaker <[email protected]>
1 parent eda3e20 commit bd8b244

File tree

2 files changed

+7
-4
lines changed

2 files changed

+7
-4
lines changed

fs/nfs/dir.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2399,14 +2399,15 @@ nfs_access_calc_mask(u32 access_result)
23992399

24002400
void nfs_access_set_mask(struct nfs_access_entry *entry, u32 access_result)
24012401
{
2402-
entry->mask = nfs_access_calc_mask(access_result);
2402+
entry->mask = access_result;
24032403
}
24042404
EXPORT_SYMBOL_GPL(nfs_access_set_mask);
24052405

24062406
static int nfs_do_access(struct inode *inode, struct rpc_cred *cred, int mask)
24072407
{
24082408
struct nfs_access_entry cache;
24092409
bool may_block = (mask & MAY_NOT_BLOCK) == 0;
2410+
int cache_mask;
24102411
int status;
24112412

24122413
trace_nfs_access_enter(inode);
@@ -2422,7 +2423,8 @@ static int nfs_do_access(struct inode *inode, struct rpc_cred *cred, int mask)
24222423
goto out;
24232424

24242425
/* Be clever: ask server to check for all possible rights */
2425-
cache.mask = MAY_EXEC | MAY_WRITE | MAY_READ;
2426+
cache.mask = NFS_MAY_LOOKUP | NFS_MAY_EXECUTE
2427+
| NFS_MAY_WRITE | NFS_MAY_READ;
24262428
cache.cred = cred;
24272429
cache.jiffies = jiffies;
24282430
status = NFS_PROTO(inode)->access(inode, &cache);
@@ -2436,7 +2438,8 @@ static int nfs_do_access(struct inode *inode, struct rpc_cred *cred, int mask)
24362438
}
24372439
nfs_access_add_cache(inode, &cache);
24382440
out_cached:
2439-
if ((mask & ~cache.mask & (MAY_READ | MAY_WRITE | MAY_EXEC)) != 0)
2441+
cache_mask = nfs_access_calc_mask(cache.mask);
2442+
if ((mask & ~cache_mask & (MAY_READ | MAY_WRITE | MAY_EXEC)) != 0)
24402443
status = -EACCES;
24412444
out:
24422445
trace_nfs_access_exit(inode, status);

include/linux/nfs_fs.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ struct nfs_access_entry {
5151
struct list_head lru;
5252
unsigned long jiffies;
5353
struct rpc_cred * cred;
54-
int mask;
54+
__u32 mask;
5555
struct rcu_head rcu_head;
5656
};
5757

0 commit comments

Comments
 (0)