|
@@ -8797,6 +8797,23 @@ static int _nfs41_test_stateid(struct nfs_server *server,
|
|
|
return -res.status;
|
|
|
}
|
|
|
|
|
|
+static void nfs4_handle_delay_or_session_error(struct nfs_server *server,
|
|
|
+ int err, struct nfs4_exception *exception)
|
|
|
+{
|
|
|
+ exception->retry = 0;
|
|
|
+ switch(err) {
|
|
|
+ case -NFS4ERR_DELAY:
|
|
|
+ nfs4_handle_exception(server, err, exception);
|
|
|
+ break;
|
|
|
+ case -NFS4ERR_BADSESSION:
|
|
|
+ case -NFS4ERR_BADSLOT:
|
|
|
+ case -NFS4ERR_BAD_HIGH_SLOT:
|
|
|
+ case -NFS4ERR_CONN_NOT_BOUND_TO_SESSION:
|
|
|
+ case -NFS4ERR_DEADSESSION:
|
|
|
+ nfs4_do_handle_exception(server, err, exception);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* nfs41_test_stateid - perform a TEST_STATEID operation
|
|
|
*
|
|
@@ -8816,9 +8833,7 @@ static int nfs41_test_stateid(struct nfs_server *server,
|
|
|
int err;
|
|
|
do {
|
|
|
err = _nfs41_test_stateid(server, stateid, cred);
|
|
|
- if (err != -NFS4ERR_DELAY)
|
|
|
- break;
|
|
|
- nfs4_handle_exception(server, err, &exception);
|
|
|
+ nfs4_handle_delay_or_session_error(server, err, &exception);
|
|
|
} while (exception.retry);
|
|
|
return err;
|
|
|
}
|