On Wed, 2009-10-07 at 18:34 -0400, Chuck Lever wrote: > On Oct 7, 2009, at 6:20 PM, Trond Myklebust wrote: > > On Wed, 2009-10-07 at 18:02 -0400, Chuck Lever wrote: > >> * Special cases: if we've been waiting on the > >> * socket's write_space() callback, or if the > >> @@ -1198,6 +1200,11 @@ call_transmit_status(struct rpc_task *task) > >> case -EHOSTUNREACH: > >> case -ENETUNREACH: > >> case -EPIPE: > >> + if (RPC_IS_SOFTCONN(task)) { > >> + xprt_end_transmit(task); > >> + rpc_exit(task, task->tk_status); > >> + break; > >> + } > > > > This doesn't look robust. The EPIPE error may mean that the socket got > > closed as a result of server action, or a previous RPC call. Don't > > forget that we might want to reuse SOFTCONN for NFSv4.1 session > > binding > > semantics. > > EPIPE can easily be handled in a separate case that doesn't have soft > connect. It directly affects rpcbind when you cache the rpc client, as you do in later patches. If one RPC call fails with EPIPE, then so will all the subsequent ones... IOW: I'd suggest moving EPIPE _below_ your above SOFTCONN special case. You might want to do the same for ENOTCONN... -- 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