Message ID | 1304387669-2969-1-git-send-email-andros@netapp.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, 2011-05-02 at 21:54 -0400, andros@netapp.com wrote: > From: Andy Adamson <andros@netapp.com> > > Free the slot and resend the RPC with new session <slot#,seq#>. > > For nfs4_async_handle_error, return -EAGAIN and set the task->tk_status to 0 > to restart the async rpc in the rpc_restart_call_prepare state which resets > the slot. > > For nfs4_handle_exception, retrying a call that uses nfs4_call_sync will > reset the slot via nfs41_call_sync_prepare. > > Signed-off-by: Andy Adamson <andros@netapp.com> > --- > fs/nfs/nfs4proc.c | 2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c > index b8e1ac6..01d70dd 100644 > --- a/fs/nfs/nfs4proc.c > +++ b/fs/nfs/nfs4proc.c > @@ -300,6 +300,7 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc > ret = nfs4_delay(server->client, &exception->timeout); > if (ret != 0) > break; > + case -NFS4ERR_RETRY_UNCACHED_REP: > case -NFS4ERR_OLD_STATEID: > exception->retry = 1; > break; > @@ -3677,6 +3678,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server, > rpc_delay(task, NFS4_POLL_RETRY_MAX); > task->tk_status = 0; > return -EAGAIN; > + case -NFS4ERR_RETRY_UNCACHED_REP: > case -NFS4ERR_OLD_STATEID: > task->tk_status = 0; > return -EAGAIN; Looks good... Do we need handlers for this in things like 'reclaim_complete_done()' and 'nfs41_sequence_handle_errors()'? I'm assuming that all the stateful operations such as open/close/... set the cache reply flag and so don't need it?
On May 3, 2011, at 4:19 PM, Trond Myklebust wrote: > On Mon, 2011-05-02 at 21:54 -0400, andros@netapp.com wrote: >> From: Andy Adamson <andros@netapp.com> >> >> Free the slot and resend the RPC with new session <slot#,seq#>. >> >> For nfs4_async_handle_error, return -EAGAIN and set the task->tk_status to 0 >> to restart the async rpc in the rpc_restart_call_prepare state which resets >> the slot. >> >> For nfs4_handle_exception, retrying a call that uses nfs4_call_sync will >> reset the slot via nfs41_call_sync_prepare. >> >> Signed-off-by: Andy Adamson <andros@netapp.com> >> --- >> fs/nfs/nfs4proc.c | 2 ++ >> 1 files changed, 2 insertions(+), 0 deletions(-) >> >> diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c >> index b8e1ac6..01d70dd 100644 >> --- a/fs/nfs/nfs4proc.c >> +++ b/fs/nfs/nfs4proc.c >> @@ -300,6 +300,7 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc >> ret = nfs4_delay(server->client, &exception->timeout); >> if (ret != 0) >> break; >> + case -NFS4ERR_RETRY_UNCACHED_REP: >> case -NFS4ERR_OLD_STATEID: >> exception->retry = 1; >> break; >> @@ -3677,6 +3678,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server, >> rpc_delay(task, NFS4_POLL_RETRY_MAX); >> task->tk_status = 0; >> return -EAGAIN; >> + case -NFS4ERR_RETRY_UNCACHED_REP: >> case -NFS4ERR_OLD_STATEID: >> task->tk_status = 0; >> return -EAGAIN; > > Looks good... Do we need handlers for this in things like > 'reclaim_complete_done()' and 'nfs41_sequence_handle_errors()'? We probably do. I'll check for coverage. > > I'm assuming that all the stateful operations such as open/close/... set > the cache reply flag and so don't need it? Yes - and I'll double check. -->Andy > > -- > Trond Myklebust > Linux NFS client maintainer > > NetApp > Trond.Myklebust@netapp.com > www.netapp.com > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index b8e1ac6..01d70dd 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -300,6 +300,7 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc ret = nfs4_delay(server->client, &exception->timeout); if (ret != 0) break; + case -NFS4ERR_RETRY_UNCACHED_REP: case -NFS4ERR_OLD_STATEID: exception->retry = 1; break; @@ -3677,6 +3678,7 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server, rpc_delay(task, NFS4_POLL_RETRY_MAX); task->tk_status = 0; return -EAGAIN; + case -NFS4ERR_RETRY_UNCACHED_REP: case -NFS4ERR_OLD_STATEID: task->tk_status = 0; return -EAGAIN;