summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.com>2017-06-13 08:39:08 -0400
committerSteve Dickson <steved@redhat.com>2017-06-13 08:39:08 -0400
commit34c73d82ed02209bd8933da2f1f4761bb464d1d7 (patch)
tree2689d8729ae4032ddc134e85aba3ff2dbe8b3282
parent1c2c18806800198bf3f2336939a5b5c348f46b92 (diff)
downloadnfs-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.c1
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) {