diff options
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index 69bd37e3fdcf..70cba3fbfa6d 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c | |||
@@ -423,26 +423,25 @@ gen_sessionid(struct nfsd4_session *ses) | |||
423 | */ | 423 | */ |
424 | static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan) | 424 | static int set_forechannel_maxreqs(struct nfsd4_channel_attrs *fchan) |
425 | { | 425 | { |
426 | int status = 0, np = fchan->maxreqs * NFSD_PAGES_PER_SLOT; | 426 | int np; |
427 | 427 | ||
428 | if (fchan->maxreqs < 1) | 428 | if (fchan->maxreqs < 1) |
429 | return nfserr_inval; | 429 | return nfserr_inval; |
430 | else if (fchan->maxreqs > NFSD_MAX_SLOTS_PER_SESSION) | 430 | else if (fchan->maxreqs > NFSD_MAX_SLOTS_PER_SESSION) |
431 | fchan->maxreqs = NFSD_MAX_SLOTS_PER_SESSION; | 431 | fchan->maxreqs = NFSD_MAX_SLOTS_PER_SESSION; |
432 | 432 | ||
433 | np = fchan->maxreqs * NFSD_PAGES_PER_SLOT; | ||
434 | |||
433 | spin_lock(&nfsd_drc_lock); | 435 | spin_lock(&nfsd_drc_lock); |
434 | if (np + nfsd_drc_pages_used > nfsd_drc_max_pages) | 436 | if (np + nfsd_drc_pages_used > nfsd_drc_max_pages) |
435 | np = nfsd_drc_max_pages - nfsd_drc_pages_used; | 437 | np = nfsd_drc_max_pages - nfsd_drc_pages_used; |
436 | nfsd_drc_pages_used += np; | 438 | nfsd_drc_pages_used += np; |
437 | spin_unlock(&nfsd_drc_lock); | 439 | spin_unlock(&nfsd_drc_lock); |
438 | 440 | ||
439 | if (np <= 0) { | 441 | fchan->maxreqs = np / NFSD_PAGES_PER_SLOT; |
440 | status = nfserr_resource; | 442 | if (fchan->maxreqs == 0) |
441 | fchan->maxreqs = 0; | 443 | return nfserr_resource; |
442 | } else | 444 | return 0; |
443 | fchan->maxreqs = np / NFSD_PAGES_PER_SLOT; | ||
444 | |||
445 | return status; | ||
446 | } | 445 | } |
447 | 446 | ||
448 | /* | 447 | /* |