diff options
author | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-12-03 15:52:41 -0500 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2009-12-03 15:52:41 -0500 |
commit | e345e88a774875cec26e097ea3ff2dc40c4f9da2 (patch) | |
tree | b04a63d691c0250fdb50078f15e78e80ebe811e4 /fs | |
parent | d18cc1fda25295416a2855d44c2936db01df9eec (diff) |
NFSv4: Fix up the callers of nfs4_state_end_reclaim_reboot
In practice, we need to ensure that we call nfs4_state_end_reclaim_reboot
in 2 cases:
- If we lose the lease while we were reclaiming state
OR
- After we're done with reboot recovery
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfs/nfs4state.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 2ef4fecf3984..456631969a58 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -1060,6 +1060,7 @@ static void nfs4_recovery_handle_error(struct nfs_client *clp, int error) | |||
1060 | case -NFS4ERR_STALE_CLIENTID: | 1060 | case -NFS4ERR_STALE_CLIENTID: |
1061 | case -NFS4ERR_LEASE_MOVED: | 1061 | case -NFS4ERR_LEASE_MOVED: |
1062 | set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); | 1062 | set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); |
1063 | nfs4_state_end_reclaim_reboot(clp); | ||
1063 | nfs4_state_start_reclaim_reboot(clp); | 1064 | nfs4_state_start_reclaim_reboot(clp); |
1064 | break; | 1065 | break; |
1065 | case -NFS4ERR_EXPIRED: | 1066 | case -NFS4ERR_EXPIRED: |
@@ -1263,7 +1264,7 @@ static void nfs4_state_manager(struct nfs_client *clp) | |||
1263 | } | 1264 | } |
1264 | } | 1265 | } |
1265 | /* First recover reboot state... */ | 1266 | /* First recover reboot state... */ |
1266 | if (test_and_clear_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) { | 1267 | if (test_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) { |
1267 | status = nfs4_do_reclaim(clp, | 1268 | status = nfs4_do_reclaim(clp, |
1268 | nfs4_reboot_recovery_ops[clp->cl_minorversion]); | 1269 | nfs4_reboot_recovery_ops[clp->cl_minorversion]); |
1269 | if (status == -NFS4ERR_STALE_CLIENTID) | 1270 | if (status == -NFS4ERR_STALE_CLIENTID) |
@@ -1309,8 +1310,6 @@ static void nfs4_state_manager(struct nfs_client *clp) | |||
1309 | out_error: | 1310 | out_error: |
1310 | printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s" | 1311 | printk(KERN_WARNING "Error: state manager failed on NFSv4 server %s" |
1311 | " with error %d\n", clp->cl_hostname, -status); | 1312 | " with error %d\n", clp->cl_hostname, -status); |
1312 | if (test_bit(NFS4CLNT_RECLAIM_REBOOT, &clp->cl_state)) | ||
1313 | nfs4_state_end_reclaim_reboot(clp); | ||
1314 | nfs4_clear_state_manager_bit(clp); | 1313 | nfs4_clear_state_manager_bit(clp); |
1315 | } | 1314 | } |
1316 | 1315 | ||