From: Chuck Lever <chuck.lever@oracle.com>
To: steved@redhat.com
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH 07/10] mount.nfs: proto=netid forces address family when resolving server names
Date: Tue, 08 Dec 2009 13:00:25 -0500 [thread overview]
Message-ID: <20091208180024.2544.78485.stgit@localhost.localdomain> (raw)
In-Reply-To: <20091208175128.2544.457.stgit-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
Using the netid settings, determine the correct address family to use
for NFS and MNT server name resolution. Use this family when
resolving the server name for the addr= and mountaddr= options.
This patch assumes the kernel can recognize a netid, instead of a
protocol name, as the value of the proto= options.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---
utils/mount/stropts.c | 31 +++++++++++++++++++++++--------
1 files changed, 23 insertions(+), 8 deletions(-)
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index c4fccbc..f2389f5 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -225,21 +225,33 @@ static int nfs_append_clientaddr_option(const struct sockaddr *sap,
}
/*
- * Resolve the 'mounthost=' hostname and append a new option using
- * the resulting address.
+ * Determine whether to append a 'mountaddr=' option. The option is needed if:
+ *
+ * 1. "mounthost=" was specified, or
+ * 2. The address families for proto= and mountproto= are different.
*/
-static int nfs_fix_mounthost_option(struct mount_options *options)
+static int nfs_fix_mounthost_option(struct mount_options *options,
+ const char *nfs_hostname)
{
union nfs_sockaddr address;
struct sockaddr *sap = &address.sa;
socklen_t salen = sizeof(address);
+ sa_family_t nfs_family, mnt_family;
char *mounthost;
+ if (!nfs_nfs_proto_family(options, &nfs_family))
+ return 0;
+ if (!nfs_mount_proto_family(options, &mnt_family))
+ return 0;
+
mounthost = po_get(options, "mounthost");
- if (!mounthost)
- return 1;
+ if (mounthost == NULL) {
+ if (nfs_family == mnt_family)
+ return 1;
+ mounthost = (char *)nfs_hostname;
+ }
- if (!nfs_name_to_address(mounthost, sap, &salen)) {
+ if (!nfs_lookup(mounthost, mnt_family, sap, &salen)) {
nfs_error(_("%s: unable to determine mount server's address"),
progname);
return 0;
@@ -327,12 +339,15 @@ static int nfs_set_version(struct nfsmount_info *mi)
static int nfs_validate_options(struct nfsmount_info *mi)
{
struct sockaddr *sap = &mi->address.sa;
+ sa_family_t family;
if (!nfs_parse_devname(mi->spec, &mi->hostname, NULL))
return 0;
+ if (!nfs_nfs_proto_family(mi->options, &family))
+ return 0;
mi->salen = sizeof(mi->address);
- if (!nfs_name_to_address(mi->hostname, sap, &mi->salen))
+ if (!nfs_lookup(mi->hostname, family, sap, &mi->salen))
return 0;
if (!nfs_set_version(mi))
@@ -565,7 +580,7 @@ static int nfs_try_mount_v3v2(struct nfsmount_info *mi)
return result;
}
- if (!nfs_fix_mounthost_option(options)) {
+ if (!nfs_fix_mounthost_option(options, mi->hostname)) {
errno = EINVAL;
goto out_fail;
}
next prev parent reply other threads:[~2009-12-08 18:00 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-08 17:59 [PATCH 00/10] mount.nfs support for netids Chuck Lever
[not found] ` <20091208175128.2544.457.stgit-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
2009-12-08 17:59 ` [PATCH 01/10] libnfs.a: Provide shared helpers for managing netids Chuck Lever
2009-12-08 17:59 ` [PATCH 02/10] mount.nfs: support netids in nfs_options2pmap() Chuck Lever
2009-12-08 17:59 ` [PATCH 03/10] mount.nfs: support netids in v2/v3 version/transport negotiation Chuck Lever
2009-12-08 17:59 ` [PATCH 04/10] mount.nfs: make nfs_lookup() global Chuck Lever
2009-12-08 18:00 ` [PATCH 05/10] mount.nfs: Add new API for getting protocol family from netids Chuck Lever
2009-12-08 18:00 ` [PATCH 06/10] mount.nfs: Fix sockaddr pointer aliasing in stropts.c Chuck Lever
2009-12-08 18:00 ` Chuck Lever [this message]
2009-12-08 18:00 ` [PATCH 08/10] mount.nfs: Teach umount.nfs to recognize netids in /etc/mtab Chuck Lever
2009-12-08 18:00 ` [PATCH 09/10] mount.nfs: Remove nfs_name_to_address() Chuck Lever
2009-12-08 18:00 ` [PATCH 10/10] NFS man page: update nfs(5) with details about IPv6 support Chuck Lever
2009-12-11 21:17 ` [PATCH 00/10] mount.nfs support for netids Steve Dickson
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=20091208180024.2544.78485.stgit@localhost.localdomain \
--to=chuck.lever@oracle.com \
--cc=linux-nfs@vger.kernel.org \
--cc=steved@redhat.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.