]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
umount: handle bindmounts during --recursive
authorThomas Weißschuh <thomas@t-8ch.de>
Tue, 17 Oct 2023 16:06:15 +0000 (18:06 +0200)
committerThomas Weißschuh <thomas@t-8ch.de>
Tue, 17 Oct 2023 16:07:21 +0000 (18:07 +0200)
Fixes #2551

Signed-off-by: Thomas Weißschuh <thomas@t-8ch.de>
sys-utils/umount.c
tests/expected/mount/umount-recursive
tests/ts/mount/umount-recursive

index e579fb786b77793bc04c9d56db0ed803740be2c5..3a740ae3bc1c33d2c613e309525ee6bdd8b46496 100644 (file)
@@ -355,7 +355,7 @@ static int umount_recursive(struct libmnt_context *cxt, const char *spec)
        /* it's always real mountpoint, don't assume that the target maybe a device */
        mnt_context_disable_swapmatch(cxt, 1);
 
-       fs = mnt_table_find_target(tb, spec, MNT_ITER_BACKWARD);
+       fs = mnt_table_find_target(tb, spec, MNT_ITER_FORWARD);
        if (fs)
                rc = umount_do_recurse(cxt, tb, fs);
        else {
index 6a95d56dbf2b80b30c388d35c2eead4503e050f5..07855217897030755c364006d5249c534ba8411b 100644 (file)
@@ -11,4 +11,5 @@ B2) Mount child-bind
 C) Mount child/child
 D) Mount child/child
 E) Mount child-bind
+F) Mount mountpoint-bind
 Success
index c6f39c534fa0274e20ca78d62c393b0c83ad14e3..94e3680d1853387b85593b5a6fd8ee6201e0afe1 100755 (executable)
@@ -88,6 +88,9 @@ ts_log "E) Mount child-bind"
 mkdir -p $TS_MOUNTPOINT/bindC
 $TS_CMD_MOUNT --bind $TS_MOUNTPOINT/mntB/mntC $TS_MOUNTPOINT/bindC &> /dev/null
 
+ts_log "F) Mount mountpoint-bind"
+$TS_CMD_MOUNT --bind $TS_MOUNTPOINT $TS_MOUNTPOINT &> /dev/null
+
 udevadm settle
 $TS_CMD_UMOUNT --recursive $TS_MOUNTPOINT >> $TS_OUTPUT 2>> $TS_ERRLOG
 [ $? == 0 ] || ts_die "umount failed"