summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak <kzak@redhat.com>2012-08-01 11:14:21 -0400
committerSteve Dickson <steved@redhat.com>2012-08-01 11:14:21 -0400
commit808fd6bc68e00a686f8eed7e31f682a9128bdf9b (patch)
tree923d44a70f587257f67e0393d2e479a5b482e98c
parent4dac21d1e8ff31c3b01f7f29e7cf877e89f09eaa (diff)
downloadnfs-utils-808fd6bc68e00a686f8eed7e31f682a9128bdf9b.zip
nfs-utils-808fd6bc68e00a686f8eed7e31f682a9128bdf9b.tar.gz
nfs-utils-808fd6bc68e00a686f8eed7e31f682a9128bdf9b.tar.xz
umount.nfs: ignore non-nfs filesystems
# umount.nfs /boot; echo $? umount.nfs: /boot: device is busy 32 expected and fixed behavior: # umount.nfs /boot; echo $? # umount.nfs: /boot: is not an NFS filesystem 1 Note that the function mnt_context_set_fstype_pattern() has never been used for mtab/fstab evaluation. It's usable only for "umount -a" and for "mount -t" operations. Reported-by: NeilBrown <neilb@suse.de> Signed-off-by: Karel Zak <kzak@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mount/mount_libmount.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/utils/mount/mount_libmount.c b/utils/mount/mount_libmount.c
index 5c1116a..ddf61b2 100644
--- a/utils/mount/mount_libmount.c
+++ b/utils/mount/mount_libmount.c
@@ -210,8 +210,6 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv)
if (mnt_context_set_target(cxt, spec))
goto err;
- if (mnt_context_set_fstype_pattern(cxt, "nfs,nfs4")) /* restrict filesystems */
- goto err;
/* read mtab/fstab, evaluate permissions, etc. */
rc = mnt_context_prepare_umount(cxt);
@@ -221,6 +219,14 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv)
goto err;
}
+ if (mnt_context_get_fstype(cxt) &&
+ !mnt_match_fstype(mnt_context_get_fstype(cxt), "nfs,nfs4")) {
+
+ nfs_error(_("%s: %s: is not an NFS filesystem"), progname, spec);
+ ret = EX_USAGE;
+ goto err;
+ }
+
opts = retrieve_mount_options(mnt_context_get_fs(cxt));
if (!mnt_context_is_lazy(cxt)) {
@@ -244,6 +250,7 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv)
/* strange, no entry in mtab or /proc not mounted */
nfs_umount23(spec, "tcp,v3");
}
+
ret = EX_FILEIO;
rc = mnt_context_do_umount(cxt); /* call umount(2) syscall */
mnt_context_finalize_mount(cxt); /* mtab update */