]> git.ipfire.org Git - thirdparty/util-linux.git/blob - tests/ts/mount/umount-recursive
umount: handle bindmounts during --recursive
[thirdparty/util-linux.git] / tests / ts / mount / umount-recursive
1 #!/bin/bash
2
3 # Copyright (C) 2012 Karel Zak <kzak@redhat.com>
4
5 TS_TOPDIR="${0%/*}/../.."
6 TS_DESC="umount-recursive"
7
8 . "$TS_TOPDIR"/functions.sh
9 ts_init "$*"
10
11 ts_check_test_command "$TS_CMD_MOUNT"
12 ts_check_test_command "$TS_CMD_UMOUNT"
13 ts_check_test_command "$TS_CMD_FDISK"
14
15 ts_skip_nonroot
16 ts_check_prog "mkfs.ext2"
17
18 $TS_CMD_UMOUNT --help | grep -q recursive
19 [ $? -eq 1 ] && ts_skip "recursive unsupported"
20
21 ts_log "Init device"
22 # set global variable TS_DEVICE
23 ts_scsi_debug_init dev_size_mb=50
24
25 ts_log "Create partitions"
26 $TS_CMD_FDISK --noauto-pt ${TS_DEVICE} &> /dev/null <<EOF
27 o
28 n
29 p
30 1
31
32 +10M
33 n
34 p
35 2
36
37 +10M
38 n
39 p
40 3
41
42 +10M
43 n
44 p
45
46 +10M
47 w
48 q
49 EOF
50
51 udevadm settle
52
53 ts_log "Create filesystem A"
54 mkfs.ext2 ${TS_DEVICE}1 &> /dev/null
55 ts_log "Create filesystem B"
56 mkfs.ext2 ${TS_DEVICE}2 &> /dev/null
57 ts_log "Create filesystem C"
58 mkfs.ext2 ${TS_DEVICE}3 &> /dev/null
59 ts_log "Create filesystem D"
60 mkfs.ext2 ${TS_DEVICE}4 &> /dev/null
61
62 udevadm settle
63
64 ts_log "Do tests..."
65
66 [ -d "$TS_MOUNTPOINT" ] || mkdir -p $TS_MOUNTPOINT
67
68 ts_log "A) Mount root"
69 $TS_CMD_MOUNT ${TS_DEVICE}1 $TS_MOUNTPOINT >> $TS_OUTPUT 2>> $TS_ERRLOG
70 $TS_CMD_MOUNT --make-shared $TS_MOUNTPOINT &> /dev/null
71
72 ts_log "B) Mount child"
73 mkdir -p $TS_MOUNTPOINT/mntB
74 $TS_CMD_MOUNT ${TS_DEVICE}2 $TS_MOUNTPOINT/mntB >> $TS_OUTPUT 2>> $TS_ERRLOG
75
76 ts_log "B2) Mount child-bind"
77 mkdir -p $TS_MOUNTPOINT/bindB
78 $TS_CMD_MOUNT --bind $TS_MOUNTPOINT/mntB $TS_MOUNTPOINT/bindB >> $TS_OUTPUT 2>> $TS_ERRLOG
79
80 ts_log "C) Mount child/child"
81 mkdir -p $TS_MOUNTPOINT/mntB/mnt{C,D}
82 $TS_CMD_MOUNT ${TS_DEVICE}3 $TS_MOUNTPOINT/mntB/mntC >> $TS_OUTPUT 2>> $TS_ERRLOG
83
84 ts_log "D) Mount child/child"
85 $TS_CMD_MOUNT ${TS_DEVICE}4 $TS_MOUNTPOINT/mntB/mntD >> $TS_OUTPUT 2>> $TS_ERRLOG
86
87 ts_log "E) Mount child-bind"
88 mkdir -p $TS_MOUNTPOINT/bindC
89 $TS_CMD_MOUNT --bind $TS_MOUNTPOINT/mntB/mntC $TS_MOUNTPOINT/bindC &> /dev/null
90
91 ts_log "F) Mount mountpoint-bind"
92 $TS_CMD_MOUNT --bind $TS_MOUNTPOINT $TS_MOUNTPOINT &> /dev/null
93
94 udevadm settle
95 $TS_CMD_UMOUNT --recursive $TS_MOUNTPOINT >> $TS_OUTPUT 2>> $TS_ERRLOG
96 [ $? == 0 ] || ts_die "umount failed"
97
98 ts_log "Success"
99 ts_finalize
100