umount.nfs: ignore non-nfs filesystems
authorKarel Zak <kzak@redhat.com>
Wed, 1 Aug 2012 15:14:21 +0000 (11:14 -0400)
committerSteve Dickson <steved@redhat.com>
Wed, 1 Aug 2012 15:14:21 +0000 (11:14 -0400)
 # 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>
utils/mount/mount_libmount.c

index 5c1116a..ddf61b2 100644 (file)
@@ -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 */