On Wed, 2012-07-11 at 16:31 -0400, Chuck Lever wrote: > "Server trunking" is a fancy named for a multi-homed NFS server. > Trunking might occur if a client sends NFS requests for a single > workload to multiple network interfaces on the same server. There > are some implications for NFSv4 state management that make it useful > for a client to know if a single NFSv4 server instance is > multi-homed. (Note this is only a consideration for NFSv4, not for > legacy versions of NFS, which are stateless). > > If a client cares about server trunking, no NFSv4 operations can > proceed until that client determines who it is talking to. Thus > server IP trunking discovery must be done when the client first > encounters an unfamiliar server IP address. > > The nfs_get_client() function walks the nfs_client_list and matches > on server IP address. The outcome of that walk tells us immediately > if we have an unfamiliar server IP address. It invokes > nfs_init_client() in this case. Thus, nfs4_init_client() is a good > spot to perform trunking discovery. > > Discovery requires a client to establish a fresh client ID, so our > client will now send SETCLIENTID or EXCHANGE_ID as the first NFS > operation after a successful ping, rather than waiting for an > application to perform an operation that requires NFSv4 state. > > The exact process for detecting trunking is different for NFSv4.0 and > NFSv4.1, so a minorversion-specific init_client callout method is > introduced. > > CLID_INUSE recovery is important for the trunking discovery process. > CLID_INUSE is a sign the server recognizes the client's nfs_client_id4 > id string, but the client is using the wrong principal this time for > the SETCLIENTID operation. The SETCLIENTID must be retried with a > series of different principals until one works, and the rest of > trunking discovery can proceed. > > Signed-off-by: Chuck Lever <chuck.lever@xxxxxxxxxx> > --- > > fs/nfs/client.c | 237 ++++++++++++++++++++++++++++++++++++++++++++++++++++ > fs/nfs/internal.h | 6 + > fs/nfs/nfs4_fs.h | 8 ++ > fs/nfs/nfs4proc.c | 2 > fs/nfs/nfs4state.c | 186 ++++++++++++++++++++++++++++++++++++++++- > 5 files changed, 433 insertions(+), 6 deletions(-) Applying: NFS: Discover NFSv4 server trunking when mounting error: patch failed: fs/nfs/nfs4state.c:1656 error: fs/nfs/nfs4state.c: patch does not apply Patch failed at 0001 NFS: Discover NFSv4 server trunking when mounting -- Trond Myklebust Linux NFS client maintainer NetApp Trond.Myklebust@xxxxxxxxxx www.netapp.com ��.n��������+%������w��{.n�����{��w���jg��������ݢj����G�������j:+v���w�m������w�������h�����٥