On Fri, 2009-09-25 at 07:29 +0300, Benny Halevy wrote: > The client cannot reuse a slot while the server's > still working on the previous RPC using it. > > The symptom Bruce saw without this patch was occasional > ESERVERFAULT during Connectathon special tests, 30 MB write/read test. > > Reported-by: J. Bruce Fields <bfields@xxxxxxxxxxxx> > Tested-by: J. Bruce Fields <bfields@xxxxxxxxxxxx> > Signed-off-by: Benny Halevy <bhalevy@xxxxxxxxxxx> > --- > fs/nfs/nfs4proc.c | 6 ++++++ > 1 files changed, 6 insertions(+), 0 deletions(-) > > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c > index be6544a..70895d6 100644 > --- a/fs/nfs/nfs4proc.c > +++ b/fs/nfs/nfs4proc.c > @@ -386,6 +386,12 @@ static void nfs41_sequence_done(struct nfs_client *clp, > spin_unlock(&clp->cl_lock); > return; > } > + > + /* Do not free slot if retried while operation was in progress */ > + if (res->sr_status == -NFS4ERR_DELAY) { > + dprintk("%s: Operation in progress\n", __func__); > + return; > + } > out: > /* The session may be reset by one of the error handlers. */ > dprintk("%s: Error %d free the slot \n", __func__, res->sr_status); OK... Can somebody please tell me how this is supposed to work? As far as I can see, most callers of nfs41_sequence_done() are calling nfs41_sequence_free_slot() themselves. IOW: Who is responsible for calling nfs41_sequence_free_slot()? Is it nfs41_sequence_done(), or is it the callers, or is it some combination of the two (and if so, what determines who calls 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