aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfsd/nfs4state.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r--fs/nfsd/nfs4state.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index d0a016a502be..01a0e4384500 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -3397,8 +3397,7 @@ nfs4_laundromat(struct nfsd_net *nn)
3397 struct nfs4_delegation *dp; 3397 struct nfs4_delegation *dp;
3398 struct list_head *pos, *next, reaplist; 3398 struct list_head *pos, *next, reaplist;
3399 time_t cutoff = get_seconds() - nn->nfsd4_lease; 3399 time_t cutoff = get_seconds() - nn->nfsd4_lease;
3400 time_t t, clientid_val = nn->nfsd4_lease; 3400 time_t t, new_timeo = nn->nfsd4_lease;
3401 time_t u, test_val = nn->nfsd4_lease;
3402 3401
3403 nfs4_lock_state(); 3402 nfs4_lock_state();
3404 3403
@@ -3410,8 +3409,7 @@ nfs4_laundromat(struct nfsd_net *nn)
3410 clp = list_entry(pos, struct nfs4_client, cl_lru); 3409 clp = list_entry(pos, struct nfs4_client, cl_lru);
3411 if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) { 3410 if (time_after((unsigned long)clp->cl_time, (unsigned long)cutoff)) {
3412 t = clp->cl_time - cutoff; 3411 t = clp->cl_time - cutoff;
3413 if (clientid_val > t) 3412 new_timeo = min(new_timeo, t);
3414 clientid_val = t;
3415 break; 3413 break;
3416 } 3414 }
3417 if (mark_client_expired_locked(clp)) { 3415 if (mark_client_expired_locked(clp)) {
@@ -3434,9 +3432,8 @@ nfs4_laundromat(struct nfsd_net *nn)
3434 if (net_generic(dp->dl_stid.sc_client->net, nfsd_net_id) != nn) 3432 if (net_generic(dp->dl_stid.sc_client->net, nfsd_net_id) != nn)
3435 continue; 3433 continue;
3436 if (time_after((unsigned long)dp->dl_time, (unsigned long)cutoff)) { 3434 if (time_after((unsigned long)dp->dl_time, (unsigned long)cutoff)) {
3437 u = dp->dl_time - cutoff; 3435 t = dp->dl_time - cutoff;
3438 if (test_val > u) 3436 new_timeo = min(new_timeo, t);
3439 test_val = u;
3440 break; 3437 break;
3441 } 3438 }
3442 list_move(&dp->dl_recall_lru, &reaplist); 3439 list_move(&dp->dl_recall_lru, &reaplist);
@@ -3446,21 +3443,18 @@ nfs4_laundromat(struct nfsd_net *nn)
3446 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru); 3443 dp = list_entry (pos, struct nfs4_delegation, dl_recall_lru);
3447 revoke_delegation(dp); 3444 revoke_delegation(dp);
3448 } 3445 }
3449 test_val = nn->nfsd4_lease;
3450 list_for_each_safe(pos, next, &nn->close_lru) { 3446 list_for_each_safe(pos, next, &nn->close_lru) {
3451 oo = container_of(pos, struct nfs4_openowner, oo_close_lru); 3447 oo = container_of(pos, struct nfs4_openowner, oo_close_lru);
3452 if (time_after((unsigned long)oo->oo_time, (unsigned long)cutoff)) { 3448 if (time_after((unsigned long)oo->oo_time, (unsigned long)cutoff)) {
3453 u = oo->oo_time - cutoff; 3449 t = oo->oo_time - cutoff;
3454 if (test_val > u) 3450 new_timeo = min(new_timeo, t);
3455 test_val = u;
3456 break; 3451 break;
3457 } 3452 }
3458 release_openowner(oo); 3453 release_openowner(oo);
3459 } 3454 }
3460 if (clientid_val < NFSD_LAUNDROMAT_MINTIMEOUT) 3455 new_timeo = max_t(time_t, new_timeo, NFSD_LAUNDROMAT_MINTIMEOUT);
3461 clientid_val = NFSD_LAUNDROMAT_MINTIMEOUT;
3462 nfs4_unlock_state(); 3456 nfs4_unlock_state();
3463 return clientid_val; 3457 return new_timeo;
3464} 3458}
3465 3459
3466static struct workqueue_struct *laundry_wq; 3460static struct workqueue_struct *laundry_wq;