mount: Support negotiation between v4, v3, and v2 nfs-utils-1-2-1-rc6
authorChuck Lever <chuck.lever@oracle.com>
Tue, 29 Sep 2009 14:38:52 +0000 (10:38 -0400)
committerSteve Dickson <steved@redhat.com>
Tue, 29 Sep 2009 14:38:52 +0000 (10:38 -0400)
commit0e0526cce8127f1c18063ff700f5e4d5c77dc108
treea3c0645a59f5697253accb613136ee562b85c52a
parent0de3189d32a183f5e91a6d27a9e8f159216d9473
mount: Support negotiation between v4, v3, and v2

When negotiating between v3 and v2, mount.nfs first tries v3, then v2.
Take the same approach for v4: try v4 first, then v3, then v2, in
order to get the highest NFS version both the client and server
support.

No MNT request is needed for v4.  Since we want to avoid an rpcbind
query for the v4 attempt, just go straight for mount(2) without a MNT
request or rpcbind negotiation first.  If the server reports that v4
is not supported, try lower versions.

The decisions made by the fg/bg retry loop have nothing to do with
version negotation.  To avoid a layering violation, mount.nfs's
multi-version negotiation strategy is wholly encapsulated within
nfs_try_mount().  Thus, code duplication between nfsmount_fg(),
nfsmount_parent(), and nfsmount_child() is avoided.

For now, negotiating version 4 is supported only on kernels that can
handle the vers=4 option on type "nfs" file systems.  At some point
we could also allow mount.nfs to switch to an "nfs4" file system in
this case.

Since mi->version == 0 can now mean v2, v3, or v4, limit the versions
tried for RDMA mounts.  Today, only version 3 supports RDMA.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
utils/mount/stropts.c