diff options
author | Trond Myklebust <trond.myklebust@primarydata.com> | 2017-07-11 17:54:32 -0400 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2017-07-21 11:51:19 -0400 |
commit | 15d4b73ac2232d6f2beb61d8b2400ea66e4da606 (patch) | |
tree | 18e3f28f6b4e33aed2750283eed0ae5f2116a685 | |
parent | 3ffbc1d65583394be12801655781dd2b079ce169 (diff) |
NFS: Refactor NFS access to kernel access mask calculation
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
-rw-r--r-- | fs/nfs/dir.c | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 1255891e5695..24b3a6748062 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -2375,16 +2375,31 @@ void nfs_access_add_cache(struct inode *inode, struct nfs_access_entry *set) | |||
2375 | } | 2375 | } |
2376 | EXPORT_SYMBOL_GPL(nfs_access_add_cache); | 2376 | EXPORT_SYMBOL_GPL(nfs_access_add_cache); |
2377 | 2377 | ||
2378 | #define NFS_MAY_READ (NFS4_ACCESS_READ) | ||
2379 | #define NFS_MAY_WRITE (NFS4_ACCESS_MODIFY | \ | ||
2380 | NFS4_ACCESS_EXTEND | \ | ||
2381 | NFS4_ACCESS_DELETE) | ||
2382 | #define NFS_MAY_LOOKUP (NFS4_ACCESS_LOOKUP) | ||
2383 | #define NFS_MAY_EXECUTE (NFS4_ACCESS_EXECUTE) | ||
2384 | static int | ||
2385 | nfs_access_calc_mask(u32 access_result) | ||
2386 | { | ||
2387 | int mask = 0; | ||
2388 | |||
2389 | if (access_result & NFS_MAY_READ) | ||
2390 | mask |= MAY_READ; | ||
2391 | if (access_result & NFS_MAY_WRITE) | ||
2392 | mask |= MAY_WRITE; | ||
2393 | if (access_result & NFS_MAY_LOOKUP) | ||
2394 | mask |= MAY_EXEC; | ||
2395 | if (access_result & NFS_MAY_EXECUTE) | ||
2396 | mask |= MAY_EXEC; | ||
2397 | return mask; | ||
2398 | } | ||
2399 | |||
2378 | void nfs_access_set_mask(struct nfs_access_entry *entry, u32 access_result) | 2400 | void nfs_access_set_mask(struct nfs_access_entry *entry, u32 access_result) |
2379 | { | 2401 | { |
2380 | entry->mask = 0; | 2402 | entry->mask = nfs_access_calc_mask(access_result); |
2381 | if (access_result & NFS4_ACCESS_READ) | ||
2382 | entry->mask |= MAY_READ; | ||
2383 | if (access_result & | ||
2384 | (NFS4_ACCESS_MODIFY | NFS4_ACCESS_EXTEND | NFS4_ACCESS_DELETE)) | ||
2385 | entry->mask |= MAY_WRITE; | ||
2386 | if (access_result & (NFS4_ACCESS_LOOKUP|NFS4_ACCESS_EXECUTE)) | ||
2387 | entry->mask |= MAY_EXEC; | ||
2388 | } | 2403 | } |
2389 | EXPORT_SYMBOL_GPL(nfs_access_set_mask); | 2404 | EXPORT_SYMBOL_GPL(nfs_access_set_mask); |
2390 | 2405 | ||