diff options
Diffstat (limited to 'fs/nfs/nfs4state.c')
-rw-r--r-- | fs/nfs/nfs4state.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index de44804d986..5fa43cd9bfc 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c | |||
@@ -1097,9 +1097,23 @@ void nfs4_schedule_lease_recovery(struct nfs_client *clp) | |||
1097 | } | 1097 | } |
1098 | EXPORT_SYMBOL_GPL(nfs4_schedule_lease_recovery); | 1098 | EXPORT_SYMBOL_GPL(nfs4_schedule_lease_recovery); |
1099 | 1099 | ||
1100 | /* | ||
1101 | * nfs40_handle_cb_pathdown - return all delegations after NFS4ERR_CB_PATH_DOWN | ||
1102 | * @clp: client to process | ||
1103 | * | ||
1104 | * Set the NFS4CLNT_LEASE_EXPIRED state in order to force a | ||
1105 | * resend of the SETCLIENTID and hence re-establish the | ||
1106 | * callback channel. Then return all existing delegations. | ||
1107 | */ | ||
1108 | static void nfs40_handle_cb_pathdown(struct nfs_client *clp) | ||
1109 | { | ||
1110 | set_bit(NFS4CLNT_LEASE_EXPIRED, &clp->cl_state); | ||
1111 | nfs_expire_all_delegations(clp); | ||
1112 | } | ||
1113 | |||
1100 | void nfs4_schedule_path_down_recovery(struct nfs_client *clp) | 1114 | void nfs4_schedule_path_down_recovery(struct nfs_client *clp) |
1101 | { | 1115 | { |
1102 | nfs_handle_cb_pathdown(clp); | 1116 | nfs40_handle_cb_pathdown(clp); |
1103 | nfs4_schedule_state_manager(clp); | 1117 | nfs4_schedule_state_manager(clp); |
1104 | } | 1118 | } |
1105 | 1119 | ||
@@ -1444,7 +1458,7 @@ static int nfs4_recovery_handle_error(struct nfs_client *clp, int error) | |||
1444 | case 0: | 1458 | case 0: |
1445 | break; | 1459 | break; |
1446 | case -NFS4ERR_CB_PATH_DOWN: | 1460 | case -NFS4ERR_CB_PATH_DOWN: |
1447 | nfs_handle_cb_pathdown(clp); | 1461 | nfs40_handle_cb_pathdown(clp); |
1448 | break; | 1462 | break; |
1449 | case -NFS4ERR_NO_GRACE: | 1463 | case -NFS4ERR_NO_GRACE: |
1450 | nfs4_state_end_reclaim_reboot(clp); | 1464 | nfs4_state_end_reclaim_reboot(clp); |