From: Neil Brown <neilb@suse.de>
To: Steve Dickson <SteveD@redhat.com>,
"Chuck Lever" <chuck.lever@oracle.com>
Cc: linux-nfs@vger.kernel.org
Subject: [PATCH] umount: fix problems when portmap doesn't listen on UDP.
Date: Tue, 15 Jul 2008 22:52:22 +1000 [thread overview]
Message-ID: <18556.40326.764642.102066@notabene.brown> (raw)
Another patch that can be pulled from
git://neil.brown.name/nfs-utils for-steved
This and the next deal with problems with the new 'string based
option' code when portmap can only be contacted via TCP.
Some people seem to turn of string based options to avoid this
problem:
https://bugs.launchpad.net/ubuntu/+bug/213444/comments/23
This can partly be avoided using mountproto=tcp, but that
a/ shouldn't be needed (isn't with the old code)
b/ doesn't help the unmount case.
This first patch make umount work better if mountproto=tcp was given
to mount.
The next patch gives mountproto=tcp to mount if it is needed.
NeilBrown
>From 863af3c54b574a588ac6d7bd05a1f250784159bd Mon Sep 17 00:00:00 2001
From: Neil Brown <neilb@suse.de>
Date: Tue, 15 Jul 2008 17:36:57 +1000
If portmap is not listening on UDP (as apparently happens with
MS-Windows-Server2003R2SP2), then nfs mounts have to be mounted
with -o mountproto=tcp to succeed.
In this case a umount will still try UDP and will fail to contact the
server. It will still succeed with the local unmount (after a
timeout) but exits with a non-zero exit status. This causes
/bin/mount to retry so we get a strange error about the filesystem
not being mounted.
So:
get umount to use tcp if "mountproto=tcp" appears in mtab
ignore any failure message from the server that would overwrite
a success message from the local umount syscall.
Signed-off-by: NeilBrown <neilb@suse.de>
---
utils/mount/nfsumount.c | 19 +++++++++++++++----
1 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/utils/mount/nfsumount.c b/utils/mount/nfsumount.c
index 285273b..9e1855d 100644
--- a/utils/mount/nfsumount.c
+++ b/utils/mount/nfsumount.c
@@ -203,9 +203,15 @@ static int do_nfs_umount23(const char *spec, char *opts)
pmap->pm_vers = nfsvers_to_mnt(atoi(p+5));
if (opts && (p = strstr(opts, "mountvers=")) && isdigit(*(p+10)))
pmap->pm_vers = atoi(p+10);
- if (opts && (hasmntopt(&mnt, "udp") || hasmntopt(&mnt, "proto=udp")))
+ if (opts && (hasmntopt(&mnt, "udp")
+ || hasmntopt(&mnt, "proto=udp")
+ || hasmntopt(&mnt, "mountproto=udp")
+ ))
pmap->pm_prot = IPPROTO_UDP;
- if (opts && (hasmntopt(&mnt, "tcp") || hasmntopt(&mnt, "proto=tcp")))
+ if (opts && (hasmntopt(&mnt, "tcp")
+ || hasmntopt(&mnt, "proto=tcp")
+ || hasmntopt(&mnt, "mountproto=tcp")
+ ))
pmap->pm_prot = IPPROTO_TCP;
if (!nfs_gethostbyname(hostname, &mnt_server.saddr)) {
@@ -347,8 +353,13 @@ int nfsumount(int argc, char *argv[])
ret = 0;
if (mc) {
if (!lazy && strcmp(mc->m.mnt_type, "nfs4") != 0)
- ret = do_nfs_umount23(mc->m.mnt_fsname, mc->m.mnt_opts);
- ret = del_mtab(mc->m.mnt_fsname, mc->m.mnt_dir) ?: ret;
+ /* We ignore the error from do_nfs_umount23.
+ * If the actual umount succeeds (in del_mtab),
+ * we don't want to signal an error, as that
+ * could cause /sbin/mount to retry!
+ */
+ do_nfs_umount23(mc->m.mnt_fsname, mc->m.mnt_opts);
+ ret = del_mtab(mc->m.mnt_fsname, mc->m.mnt_dir);
} else if (*spec != '/') {
if (!lazy)
ret = do_nfs_umount23(spec, "tcp,v3");
--
1.5.6.2
next reply other threads:[~2008-07-15 12:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-15 12:52 Neil Brown [this message]
[not found] ` <18556.40326.764642.102066-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-07-15 15:42 ` [PATCH] umount: fix problems when portmap doesn't listen on UDP Chuck Lever
2008-07-16 18:49 ` Steve Dickson
2008-07-17 2:44 ` Neil Brown
[not found] ` <18558.45595.59801.775326-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-07-17 10:18 ` 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=18556.40326.764642.102066@notabene.brown \
--to=neilb@suse.de \
--cc=SteveD@redhat.com \
--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