@@ -131,15 +131,15 @@ nfsd_reply_cache_alloc(struct svc_rqst *rqstp, __wsum csum)
131
131
rp -> c_type = RC_NOCACHE ;
132
132
INIT_LIST_HEAD (& rp -> c_lru );
133
133
134
- rp -> c_xid = rqstp -> rq_xid ;
135
- rp -> c_proc = rqstp -> rq_proc ;
136
- memset ( & rp -> c_addr , 0 , sizeof ( rp -> c_addr )) ;
137
- rpc_copy_addr ((struct sockaddr * )& rp -> c_addr , svc_addr (rqstp ));
138
- rpc_set_port ((struct sockaddr * )& rp -> c_addr , rpc_get_port (svc_addr (rqstp )));
139
- rp -> c_prot = rqstp -> rq_prot ;
140
- rp -> c_vers = rqstp -> rq_vers ;
141
- rp -> c_len = rqstp -> rq_arg .len ;
142
- rp -> c_csum = csum ;
134
+ memset ( & rp -> c_key , 0 , sizeof ( rp -> c_key )) ;
135
+ rp -> c_key . k_xid = rqstp -> rq_xid ;
136
+ rp -> c_key . k_proc = rqstp -> rq_proc ;
137
+ rpc_copy_addr ((struct sockaddr * )& rp -> c_key . k_addr , svc_addr (rqstp ));
138
+ rpc_set_port ((struct sockaddr * )& rp -> c_key . k_addr , rpc_get_port (svc_addr (rqstp )));
139
+ rp -> c_key . k_prot = rqstp -> rq_prot ;
140
+ rp -> c_key . k_vers = rqstp -> rq_vers ;
141
+ rp -> c_key . k_len = rqstp -> rq_arg .len ;
142
+ rp -> c_key . k_csum = csum ;
143
143
}
144
144
return rp ;
145
145
}
@@ -330,27 +330,14 @@ nfsd_cache_csum(struct svc_rqst *rqstp)
330
330
return csum ;
331
331
}
332
332
333
- static bool
334
- nfsd_cache_match (const struct svc_cacherep * key , const struct svc_cacherep * rp )
333
+ static int
334
+ nfsd_cache_key_cmp (const struct svc_cacherep * key , const struct svc_cacherep * rp )
335
335
{
336
- /* Check RPC XID first */
337
- if (key -> c_xid != rp -> c_xid )
338
- return false;
339
- /* compare checksum of NFS data */
340
- if (key -> c_csum != rp -> c_csum ) {
336
+ if (key -> c_key .k_xid == rp -> c_key .k_xid &&
337
+ key -> c_key .k_csum != rp -> c_key .k_csum )
341
338
++ payload_misses ;
342
- return false;
343
- }
344
-
345
- /* Other discriminators */
346
- if (key -> c_proc != rp -> c_proc ||
347
- key -> c_prot != rp -> c_prot ||
348
- key -> c_vers != rp -> c_vers ||
349
- key -> c_len != rp -> c_len ||
350
- memcmp (& key -> c_addr , & rp -> c_addr , sizeof (key -> c_addr )) != 0 )
351
- return false;
352
339
353
- return true ;
340
+ return memcmp ( & key -> c_key , & rp -> c_key , sizeof ( key -> c_key )) ;
354
341
}
355
342
356
343
/*
@@ -367,7 +354,7 @@ nfsd_cache_insert(struct nfsd_drc_bucket *b, struct svc_cacherep *key)
367
354
368
355
list_for_each_entry (rp , rh , c_lru ) {
369
356
++ entries ;
370
- if (nfsd_cache_match (key , rp )) {
357
+ if (nfsd_cache_key_cmp (key , rp ) == 0 ) {
371
358
ret = rp ;
372
359
break ;
373
360
}
@@ -510,7 +497,7 @@ nfsd_cache_update(struct svc_rqst *rqstp, int cachetype, __be32 *statp)
510
497
if (!rp )
511
498
return ;
512
499
513
- hash = nfsd_cache_hash (rp -> c_xid );
500
+ hash = nfsd_cache_hash (rp -> c_key . k_xid );
514
501
b = & drc_hashtbl [hash ];
515
502
516
503
len = resv -> iov_len - ((char * )statp - (char * )resv -> iov_base );
0 commit comments