@@ -2139,7 +2139,7 @@ MODULE_PARM_DESC(nfs_access_max_cachesize, "NFS access maximum total cache lengt
2139
2139
2140
2140
static void nfs_access_free_entry (struct nfs_access_entry * entry )
2141
2141
{
2142
- put_rpccred (entry -> cred );
2142
+ put_cred (entry -> cred );
2143
2143
kfree_rcu (entry , rcu_head );
2144
2144
smp_mb__before_atomic ();
2145
2145
atomic_long_dec (& nfs_access_nr_entries );
@@ -2265,25 +2265,26 @@ void nfs_access_zap_cache(struct inode *inode)
2265
2265
}
2266
2266
EXPORT_SYMBOL_GPL (nfs_access_zap_cache );
2267
2267
2268
- static struct nfs_access_entry * nfs_access_search_rbtree (struct inode * inode , struct rpc_cred * cred )
2268
+ static struct nfs_access_entry * nfs_access_search_rbtree (struct inode * inode , const struct cred * cred )
2269
2269
{
2270
2270
struct rb_node * n = NFS_I (inode )-> access_cache .rb_node ;
2271
- struct nfs_access_entry * entry ;
2272
2271
2273
2272
while (n != NULL ) {
2274
- entry = rb_entry (n , struct nfs_access_entry , rb_node );
2273
+ struct nfs_access_entry * entry =
2274
+ rb_entry (n , struct nfs_access_entry , rb_node );
2275
+ int cmp = cred_fscmp (cred , entry -> cred );
2275
2276
2276
- if (cred < entry -> cred )
2277
+ if (cmp < 0 )
2277
2278
n = n -> rb_left ;
2278
- else if (cred > entry -> cred )
2279
+ else if (cmp > 0 )
2279
2280
n = n -> rb_right ;
2280
2281
else
2281
2282
return entry ;
2282
2283
}
2283
2284
return NULL ;
2284
2285
}
2285
2286
2286
- static int nfs_access_get_cached (struct inode * inode , struct rpc_cred * cred , struct nfs_access_entry * res , bool may_block )
2287
+ static int nfs_access_get_cached (struct inode * inode , const struct cred * cred , struct nfs_access_entry * res , bool may_block )
2287
2288
{
2288
2289
struct nfs_inode * nfsi = NFS_I (inode );
2289
2290
struct nfs_access_entry * cache ;
@@ -2326,7 +2327,7 @@ static int nfs_access_get_cached(struct inode *inode, struct rpc_cred *cred, str
2326
2327
return - ENOENT ;
2327
2328
}
2328
2329
2329
- static int nfs_access_get_cached_rcu (struct inode * inode , struct rpc_cred * cred , struct nfs_access_entry * res )
2330
+ static int nfs_access_get_cached_rcu (struct inode * inode , const struct cred * cred , struct nfs_access_entry * res )
2330
2331
{
2331
2332
/* Only check the most recently returned cache entry,
2332
2333
* but do it without locking.
@@ -2363,15 +2364,17 @@ static void nfs_access_add_rbtree(struct inode *inode, struct nfs_access_entry *
2363
2364
struct rb_node * * p = & root_node -> rb_node ;
2364
2365
struct rb_node * parent = NULL ;
2365
2366
struct nfs_access_entry * entry ;
2367
+ int cmp ;
2366
2368
2367
2369
spin_lock (& inode -> i_lock );
2368
2370
while (* p != NULL ) {
2369
2371
parent = * p ;
2370
2372
entry = rb_entry (parent , struct nfs_access_entry , rb_node );
2373
+ cmp = cred_fscmp (set -> cred , entry -> cred );
2371
2374
2372
- if (set -> cred < entry -> cred )
2375
+ if (cmp < 0 )
2373
2376
p = & parent -> rb_left ;
2374
- else if (set -> cred > entry -> cred )
2377
+ else if (cmp > 0 )
2375
2378
p = & parent -> rb_right ;
2376
2379
else
2377
2380
goto found ;
@@ -2395,7 +2398,7 @@ void nfs_access_add_cache(struct inode *inode, struct nfs_access_entry *set)
2395
2398
if (cache == NULL )
2396
2399
return ;
2397
2400
RB_CLEAR_NODE (& cache -> rb_node );
2398
- cache -> cred = get_rpccred (set -> cred );
2401
+ cache -> cred = get_cred (set -> cred );
2399
2402
cache -> mask = set -> mask ;
2400
2403
2401
2404
/* The above field assignments must be visible
@@ -2459,7 +2462,7 @@ void nfs_access_set_mask(struct nfs_access_entry *entry, u32 access_result)
2459
2462
}
2460
2463
EXPORT_SYMBOL_GPL (nfs_access_set_mask );
2461
2464
2462
- static int nfs_do_access (struct inode * inode , struct rpc_cred * cred , int mask )
2465
+ static int nfs_do_access (struct inode * inode , const struct cred * cred , int mask )
2463
2466
{
2464
2467
struct nfs_access_entry cache ;
2465
2468
bool may_block = (mask & MAY_NOT_BLOCK ) == 0 ;
@@ -2523,7 +2526,7 @@ static int nfs_open_permission_mask(int openflags)
2523
2526
return mask ;
2524
2527
}
2525
2528
2526
- int nfs_may_open (struct inode * inode , struct rpc_cred * cred , int openflags )
2529
+ int nfs_may_open (struct inode * inode , const struct cred * cred , int openflags )
2527
2530
{
2528
2531
return nfs_do_access (inode , cred , nfs_open_permission_mask (openflags ));
2529
2532
}
@@ -2548,7 +2551,7 @@ static int nfs_execute_ok(struct inode *inode, int mask)
2548
2551
2549
2552
int nfs_permission (struct inode * inode , int mask )
2550
2553
{
2551
- struct rpc_cred * cred ;
2554
+ const struct cred * cred = current_cred () ;
2552
2555
int res = 0 ;
2553
2556
2554
2557
nfs_inc_stats (inode , NFSIOS_VFSACCESS );
@@ -2582,20 +2585,11 @@ int nfs_permission(struct inode *inode, int mask)
2582
2585
2583
2586
/* Always try fast lookups first */
2584
2587
rcu_read_lock ();
2585
- cred = rpc_lookup_cred_nonblock ();
2586
- if (!IS_ERR (cred ))
2587
- res = nfs_do_access (inode , cred , mask |MAY_NOT_BLOCK );
2588
- else
2589
- res = PTR_ERR (cred );
2588
+ res = nfs_do_access (inode , cred , mask |MAY_NOT_BLOCK );
2590
2589
rcu_read_unlock ();
2591
2590
if (res == - ECHILD && !(mask & MAY_NOT_BLOCK )) {
2592
2591
/* Fast lookup failed, try the slow way */
2593
- cred = rpc_lookup_cred ();
2594
- if (!IS_ERR (cred )) {
2595
- res = nfs_do_access (inode , cred , mask );
2596
- put_rpccred (cred );
2597
- } else
2598
- res = PTR_ERR (cred );
2592
+ res = nfs_do_access (inode , cred , mask );
2599
2593
}
2600
2594
out :
2601
2595
if (!res && (mask & MAY_EXEC ))
0 commit comments