|
@@ -1488,7 +1488,7 @@ static int _nfs4_open_expired(struct nfs_open_context *ctx, struct nfs4_state *s
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
-static inline int nfs4_do_open_expired(struct nfs_open_context *ctx, struct nfs4_state *state)
|
|
|
|
|
|
+static int nfs4_do_open_expired(struct nfs_open_context *ctx, struct nfs4_state *state)
|
|
{
|
|
{
|
|
struct nfs_server *server = NFS_SERVER(state->inode);
|
|
struct nfs_server *server = NFS_SERVER(state->inode);
|
|
struct nfs4_exception exception = { };
|
|
struct nfs4_exception exception = { };
|
|
@@ -1496,10 +1496,16 @@ static inline int nfs4_do_open_expired(struct nfs_open_context *ctx, struct nfs4
|
|
|
|
|
|
do {
|
|
do {
|
|
err = _nfs4_open_expired(ctx, state);
|
|
err = _nfs4_open_expired(ctx, state);
|
|
- if (err != -NFS4ERR_DELAY)
|
|
|
|
- break;
|
|
|
|
- nfs4_handle_exception(server, err, &exception);
|
|
|
|
|
|
+ switch (err) {
|
|
|
|
+ default:
|
|
|
|
+ goto out;
|
|
|
|
+ case -NFS4ERR_GRACE:
|
|
|
|
+ case -NFS4ERR_DELAY:
|
|
|
|
+ nfs4_handle_exception(server, err, &exception);
|
|
|
|
+ err = 0;
|
|
|
|
+ }
|
|
} while (exception.retry);
|
|
} while (exception.retry);
|
|
|
|
+out:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -4049,10 +4055,16 @@ static int nfs4_lock_expired(struct nfs4_state *state, struct file_lock *request
|
|
if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0)
|
|
if (test_bit(NFS_DELEGATED_STATE, &state->flags) != 0)
|
|
return 0;
|
|
return 0;
|
|
err = _nfs4_do_setlk(state, F_SETLK, request, 0);
|
|
err = _nfs4_do_setlk(state, F_SETLK, request, 0);
|
|
- if (err != -NFS4ERR_DELAY)
|
|
|
|
- break;
|
|
|
|
- nfs4_handle_exception(server, err, &exception);
|
|
|
|
|
|
+ switch (err) {
|
|
|
|
+ default:
|
|
|
|
+ goto out;
|
|
|
|
+ case -NFS4ERR_GRACE:
|
|
|
|
+ case -NFS4ERR_DELAY:
|
|
|
|
+ nfs4_handle_exception(server, err, &exception);
|
|
|
|
+ err = 0;
|
|
|
|
+ }
|
|
} while (exception.retry);
|
|
} while (exception.retry);
|
|
|
|
+out:
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|
|
|
|
|