diff options
Diffstat (limited to 'fs/nfsd')
-rw-r--r-- | fs/nfsd/nfscache.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/fs/nfsd/nfscache.c b/fs/nfsd/nfscache.c index 40db57eb2b06..2f9c2d26a2b9 100644 --- a/fs/nfsd/nfscache.c +++ b/fs/nfsd/nfscache.c | |||
@@ -302,8 +302,10 @@ nfsd_cache_search(struct svc_rqst *rqstp, __wsum csum) | |||
302 | 302 | ||
303 | /* | 303 | /* |
304 | * Try to find an entry matching the current call in the cache. When none | 304 | * Try to find an entry matching the current call in the cache. When none |
305 | * is found, we grab the oldest unlocked entry off the LRU list. | 305 | * is found, we try to grab the oldest expired entry off the LRU list. If |
306 | * Note that no operation within the loop may sleep. | 306 | * a suitable one isn't there, then drop the cache_lock and allocate a |
307 | * new one, then search again in case one got inserted while this thread | ||
308 | * didn't hold the lock. | ||
307 | */ | 309 | */ |
308 | int | 310 | int |
309 | nfsd_cache_lookup(struct svc_rqst *rqstp) | 311 | nfsd_cache_lookup(struct svc_rqst *rqstp) |
@@ -344,6 +346,7 @@ nfsd_cache_lookup(struct svc_rqst *rqstp) | |||
344 | } | 346 | } |
345 | } | 347 | } |
346 | 348 | ||
349 | /* Drop the lock and allocate a new entry */ | ||
347 | spin_unlock(&cache_lock); | 350 | spin_unlock(&cache_lock); |
348 | rp = nfsd_reply_cache_alloc(); | 351 | rp = nfsd_reply_cache_alloc(); |
349 | if (!rp) { | 352 | if (!rp) { |