From: Neil Brown <neilb@suse.de>
To: Chuck Lever <chuck.lever@oracle.com>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 1/3] mount.nfs: Refactor mount version and protocol autonegotiation
Date: Tue, 7 Sep 2010 11:12:46 +1000 [thread overview]
Message-ID: <20100907111246.7de7d757@notabene> (raw)
In-Reply-To: <20100831212130.21061.10519.stgit@matisse.1015granger.net>
On Tue, 31 Aug 2010 17:21:31 -0400
Chuck Lever <chuck.lever@oracle.com> wrote:
> The logic that manages negotiating NFS version and protocol settings
> is getting more complex over time, so let's split this out of
> nfs_try_mount().
>
> This should make Bruce a little happier, as it eliminates the silent
> switch case fall through in nfs_try_mount(). And it should help Neil
> fix some bugs he's found in this logic.
Hi Chuck,
thanks for these..
One question....
.....
> +{
> + int result;
> +
> + /*
> + * Before 2.6.32, the kernel NFS client didn't support
> + * "-t nfs vers=4" mounts, so NFS version 4 cannot be
> + * included when autonegotiating while running on
> + * those kernels.
> + */
> + if (linux_version_code() <= MAKE_VERSION(2, 6, 31))
> + goto fall_back;
> +
> + errno = 0;
> + result = nfs_try_mount_v4(mi);
> + switch (errno) {
Should we not have e.g.
if (result)
return result;
before the switch(errno)?? Typically errno is 'undefined' in no error is
reported.
I realise the current code doesn't have that test either, but I still think
it is wrong not to.
Thanks
NeilBrown
> + case EPROTONOSUPPORT:
> + /* A clear indication that the server or our
> + * client does not support NFS version 4. */
> + goto fall_back;
> + case ENOENT:
> + /* Legacy Linux servers don't export an NFS
> + * version 4 pseudoroot. */
> + goto fall_back;
> + case EPERM:
> + /* Linux servers prior to 2.6.25 may return
> + * EPERM when NFS version 4 is not supported. */
> + goto fall_back;
> + default:
> + return result;
> + }
> +
> +fall_back:
> + return nfs_try_mount_v3v2(mi);
> +}
> +
> +/*
> * This is a single pass through the fg/bg loop.
> *
> * Returns TRUE if successful, otherwise FALSE.
> @@ -758,20 +801,8 @@ static int nfs_try_mount(struct nfsmount_info *mi)
>
> switch (mi->version) {
> case 0:
> - if (linux_version_code() > MAKE_VERSION(2, 6, 31)) {
> - errno = 0;
> - result = nfs_try_mount_v4(mi);
> - if (errno != EPROTONOSUPPORT) {
> - /*
> - * To deal with legacy Linux servers that don't
> - * automatically export a pseudo root, retry
> - * ENOENT errors using version 3. And for
> - * Linux servers prior to 2.6.25, retry EPERM
> - */
> - if (errno != ENOENT && errno != EPERM)
> - break;
> - }
> - }
> + result = nfs_autonegotiate(mi);
> + break;
> case 2:
> case 3:
> result = nfs_try_mount_v3v2(mi);
next parent reply other threads:[~2010-09-07 1:12 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20100831212006.21061.17002.stgit@matisse.1015granger.net>
[not found] ` <20100831212130.21061.10519.stgit@matisse.1015granger.net>
2010-09-07 1:12 ` Neil Brown [this message]
2010-09-09 17:27 ` [PATCH 1/3] mount.nfs: Refactor mount version and protocol autonegotiation Chuck Lever
2010-09-09 21:23 ` Neil Brown
2010-09-09 21:45 ` Trond Myklebust
[not found] ` <1284068734.14656.39.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2010-09-11 4:06 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100907111246.7de7d757@notabene \
--to=neilb@suse.de \
--cc=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox