On Mon, 2011-05-02 at 21:54 -0400, andros@xxxxxxxxxx wrote: > From: Andy Adamson <andros@xxxxxxxxxx> > > 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@xxxxxxxxxx> > --- > 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? -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html