[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <4A9C7673-1CC1-4B8E-AF18-4DA39A14BCB7@oracle.com>
Date: Mon, 7 Nov 2011 22:57:14 -0500
From: Chuck Lever <chuck.lever@...cle.com>
To: Hamo <hamo.by@...il.com>
Cc: linux-nfs@...r.kernel.org, linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org, steved@...hat.com, jlayton@...hat.com
Subject: Re: [PATCH] mount.nfs: ensure AF priority when mounting
On Nov 7, 2011, at 10:14 PM, Hamo wrote:
> On different architectures, getaddrinfo() may return different
> orders of address families. This may confuse the users.
Isn't this controlled by /etc/gai.conf ? I'm not sure we want mount.nfs to override that.
> This patch fixes this problem by ensuring that we first try
> through IPv6(if present), then through IPv4.
> Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=750729
>
> Signed-off-by: Yang Bai <hamo.by@...il.com>
> ---
> utils/mount/stropts.c | 41 +++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 41 insertions(+), 0 deletions(-)
>
> diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
> index 4032bf3..aa5ee86 100644
> --- a/utils/mount/stropts.c
> +++ b/utils/mount/stropts.c
> @@ -654,7 +654,28 @@ static int nfs_try_mount_v3v2(struct nfsmount_info *mi)
> struct addrinfo *ai;
> int ret = 0;
>
> + /* first, try IPv6 */
> for (ai = mi->address; ai != NULL; ai = ai->ai_next) {
> + if (ai->ai_family != AF_INET6)
> + continue;
> + ret = nfs_do_mount_v3v2(mi, ai->ai_addr, ai->ai_addrlen);
> + if (ret != 0)
> + return ret;
> +
> + switch (errno) {
> + case ECONNREFUSED:
> + case EOPNOTSUPP:
> + case EHOSTUNREACH:
> + continue;
> + default:
> + goto out;
> + }
> + }
> +
> + /* then, try IPv4 */
> + for (ai = mi->address; ai != NULL; ai = ai->ai_next) {
> + if (ai->ai_family != AF_INET)
> + continue;
> ret = nfs_do_mount_v3v2(mi, ai->ai_addr, ai->ai_addrlen);
> if (ret != 0)
> return ret;
> @@ -742,7 +763,27 @@ static int nfs_try_mount_v4(struct nfsmount_info *mi)
> struct addrinfo *ai;
> int ret = 0;
>
> + /* first, try IPv6 */
> for (ai = mi->address; ai != NULL; ai = ai->ai_next) {
> + if (ai->ai_family != AF_INET6)
> + continue;
> + ret = nfs_do_mount_v4(mi, ai->ai_addr, ai->ai_addrlen);
> + if (ret != 0)
> + return ret;
> +
> + switch (errno) {
> + case ECONNREFUSED:
> + case EHOSTUNREACH:
> + continue;
> + default:
> + goto out;
> + }
> + }
> +
> + /* then, try IPv4 */
> + for (ai = mi->address; ai != NULL; ai = ai->ai_next) {
> + if (ai->ai_family != AF_INET)
> + continue;
> ret = nfs_do_mount_v4(mi, ai->ai_addr, ai->ai_addrlen);
> if (ret != 0)
> return ret;
> --
> 1.7.1
--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists