diff options
author | NeilBrown <neilb@suse.com> | 2017-06-13 08:39:08 -0400 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2017-06-13 08:39:08 -0400 |
commit | 34c73d82ed02209bd8933da2f1f4761bb464d1d7 (patch) | |
tree | 2689d8729ae4032ddc134e85aba3ff2dbe8b3282 | |
parent | 1c2c18806800198bf3f2336939a5b5c348f46b92 (diff) | |
download | nfs-utils-34c73d82ed02209bd8933da2f1f4761bb464d1d7.tar.gz nfs-utils-34c73d82ed02209bd8933da2f1f4761bb464d1d7.tar.xz nfs-utils-34c73d82ed02209bd8933da2f1f4761bb464d1d7.zip |
umount.nfs: assume path name is canonical.
/usr/bin/umount will always pass a canonical name
to umount.nfs, so it is safe to disable canonicalization.
When umounting an NFS filesystem, it is generally safest to
not "stat" the mountpoint at all as that can block
indefinitely. umount() will not block, but lstat() etc can.
By disabling canonicalization in libmount, we discourage it
from ever calling 'stat' family operations, and thus reduce
the chance of a hang.
Note that to be fully effective, this requires changes to
util-linux which have not yet been accepted.
When both that change and this are in effect, automounters
can use "umount -c $PATH" to safely unmount a filesystem
without blocking.
Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r-- | utils/mount/mount_libmount.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/utils/mount/mount_libmount.c b/utils/mount/mount_libmount.c index 1f01f7f..2d40657 100644 --- a/utils/mount/mount_libmount.c +++ b/utils/mount/mount_libmount.c @@ -188,6 +188,7 @@ static int umount_main(struct libmnt_context *cxt, int argc, char **argv) }; mnt_context_init_helper(cxt, MNT_ACT_UMOUNT, 0); + mnt_context_disable_canonicalize(cxt, 1); while ((c = getopt_long (argc, argv, "fvnrlh", longopts, NULL)) != -1) { |