diff options
Diffstat (limited to 'fs/nfsd/nfs4state.c')
-rw-r--r-- | fs/nfsd/nfs4state.c | 22 |
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 | ||
3466 | static struct workqueue_struct *laundry_wq; | 3460 | static struct workqueue_struct *laundry_wq; |