diff options
Diffstat (limited to 'fs/nfs')
-rw-r--r-- | fs/nfs/nfs42proc.c | 2 | ||||
-rw-r--r-- | fs/nfs/nfs4_fs.h | 4 | ||||
-rw-r--r-- | fs/nfs/nfs4proc.c | 9 | ||||
-rw-r--r-- | fs/nfs/nfs4renewd.c | 20 | ||||
-rw-r--r-- | fs/nfs/nfs4state.c | 9 |
5 files changed, 32 insertions, 12 deletions
diff --git a/fs/nfs/nfs42proc.c b/fs/nfs/nfs42proc.c index 33da841a21bb..6f4752734804 100644 --- a/fs/nfs/nfs42proc.c +++ b/fs/nfs/nfs42proc.c | |||
@@ -338,6 +338,8 @@ nfs42_layoutstat_done(struct rpc_task *task, void *calldata) | |||
338 | case 0: | 338 | case 0: |
339 | break; | 339 | break; |
340 | case -NFS4ERR_EXPIRED: | 340 | case -NFS4ERR_EXPIRED: |
341 | case -NFS4ERR_ADMIN_REVOKED: | ||
342 | case -NFS4ERR_DELEG_REVOKED: | ||
341 | case -NFS4ERR_STALE_STATEID: | 343 | case -NFS4ERR_STALE_STATEID: |
342 | case -NFS4ERR_OLD_STATEID: | 344 | case -NFS4ERR_OLD_STATEID: |
343 | case -NFS4ERR_BAD_STATEID: | 345 | case -NFS4ERR_BAD_STATEID: |
diff --git a/fs/nfs/nfs4_fs.h b/fs/nfs/nfs4_fs.h index 324bfdc21250..9bf64eacba5b 100644 --- a/fs/nfs/nfs4_fs.h +++ b/fs/nfs/nfs4_fs.h | |||
@@ -396,6 +396,10 @@ extern void nfs4_schedule_state_renewal(struct nfs_client *); | |||
396 | extern void nfs4_renewd_prepare_shutdown(struct nfs_server *); | 396 | extern void nfs4_renewd_prepare_shutdown(struct nfs_server *); |
397 | extern void nfs4_kill_renewd(struct nfs_client *); | 397 | extern void nfs4_kill_renewd(struct nfs_client *); |
398 | extern void nfs4_renew_state(struct work_struct *); | 398 | extern void nfs4_renew_state(struct work_struct *); |
399 | extern void nfs4_set_lease_period(struct nfs_client *clp, | ||
400 | unsigned long lease, | ||
401 | unsigned long lastrenewed); | ||
402 | |||
399 | 403 | ||
400 | /* nfs4state.c */ | 404 | /* nfs4state.c */ |
401 | struct rpc_cred *nfs4_get_clid_cred(struct nfs_client *clp); | 405 | struct rpc_cred *nfs4_get_clid_cred(struct nfs_client *clp); |
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index a036e93bdf96..1949bbd806eb 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
@@ -4237,12 +4237,9 @@ static int nfs4_do_fsinfo(struct nfs_server *server, struct nfs_fh *fhandle, str | |||
4237 | err = _nfs4_do_fsinfo(server, fhandle, fsinfo); | 4237 | err = _nfs4_do_fsinfo(server, fhandle, fsinfo); |
4238 | trace_nfs4_fsinfo(server, fhandle, fsinfo->fattr, err); | 4238 | trace_nfs4_fsinfo(server, fhandle, fsinfo->fattr, err); |
4239 | if (err == 0) { | 4239 | if (err == 0) { |
4240 | struct nfs_client *clp = server->nfs_client; | 4240 | nfs4_set_lease_period(server->nfs_client, |
4241 | 4241 | fsinfo->lease_time * HZ, | |
4242 | spin_lock(&clp->cl_lock); | 4242 | now); |
4243 | clp->cl_lease_time = fsinfo->lease_time * HZ; | ||
4244 | clp->cl_last_renewal = now; | ||
4245 | spin_unlock(&clp->cl_lock); | ||
4246 | break; | 4243 | break; |
4247 | } | 4244 | } |
4248 | err = nfs4_handle_exception(server, err, &exception); | 4245 | err = nfs4_handle_exception(server, err, &exception); |
diff --git a/fs/nfs/nfs4renewd.c b/fs/nfs/nfs4renewd.c index e1ba58c3d1ad..82e77198d17e 100644 --- a/fs/nfs/nfs4renewd.c +++ b/fs/nfs/nfs4renewd.c | |||
@@ -136,6 +136,26 @@ nfs4_kill_renewd(struct nfs_client *clp) | |||
136 | cancel_delayed_work_sync(&clp->cl_renewd); | 136 | cancel_delayed_work_sync(&clp->cl_renewd); |
137 | } | 137 | } |
138 | 138 | ||
139 | /** | ||
140 | * nfs4_set_lease_period - Sets the lease period on a nfs_client | ||
141 | * | ||
142 | * @clp: pointer to nfs_client | ||
143 | * @lease: new value for lease period | ||
144 | * @lastrenewed: time at which lease was last renewed | ||
145 | */ | ||
146 | void nfs4_set_lease_period(struct nfs_client *clp, | ||
147 | unsigned long lease, | ||
148 | unsigned long lastrenewed) | ||
149 | { | ||
150 | spin_lock(&clp->cl_lock); | ||
151 | clp->cl_lease_time = lease; | ||
152 | clp->cl_last_renewal = lastrenewed; | ||
153 | spin_unlock(&clp->cl_lock); | ||
154 | |||
155 | /* Cap maximum reconnect timeout at 1/2 lease period */ | ||
156 | rpc_cap_max_reconnect_timeout(clp->cl_rpcclient, lease >> 1); | ||
157 | } | ||
158 | |||
139 | /* | 159 | /* |
140 | * Local variables: | 160 | * Local variables: |
141 | * c-basic-offset: 8 | 161 | * c-basic-offset: 8 |
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 834b875900d6..cada00aa5096 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -277,20 +277,17 @@ static int nfs41_setup_state_renewal(struct nfs_client *clp) | |||
277 | { | 277 | { |
278 | int status; | 278 | int status; |
279 | struct nfs_fsinfo fsinfo; | 279 | struct nfs_fsinfo fsinfo; |
280 | unsigned long now; | ||
280 | 281 | ||
281 | if (!test_bit(NFS_CS_CHECK_LEASE_TIME, &clp->cl_res_state)) { | 282 | if (!test_bit(NFS_CS_CHECK_LEASE_TIME, &clp->cl_res_state)) { |
282 | nfs4_schedule_state_renewal(clp); | 283 | nfs4_schedule_state_renewal(clp); |
283 | return 0; | 284 | return 0; |
284 | } | 285 | } |
285 | 286 | ||
287 | now = jiffies; | ||
286 | status = nfs4_proc_get_lease_time(clp, &fsinfo); | 288 | status = nfs4_proc_get_lease_time(clp, &fsinfo); |
287 | if (status == 0) { | 289 | if (status == 0) { |
288 | /* Update lease time and schedule renewal */ | 290 | nfs4_set_lease_period(clp, fsinfo.lease_time * HZ, now); |
289 | spin_lock(&clp->cl_lock); | ||
290 | clp->cl_lease_time = fsinfo.lease_time * HZ; | ||
291 | clp->cl_last_renewal = jiffies; | ||
292 | spin_unlock(&clp->cl_lock); | ||
293 | |||
294 | nfs4_schedule_state_renewal(clp); | 291 | nfs4_schedule_state_renewal(clp); |
295 | } | 292 | } |
296 | 293 | ||