2
# Test support for partitions on loop devices
4
# Copyright (C) 2008-2012 Free Software Foundation, Inc.
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 3 of the License, or
9
# (at your option) any later version.
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program. If not, see <http://www.gnu.org/licenses/>.
19
. "${srcdir=.}/init.sh"; path_prepend_ ../parted
22
require_udevadm_settle_
27
&& { udevadm settle --timeout=3; losetup -d "$loopdev"; }
30
# If the loop module is loaded, unload it first
31
if lsmod | grep '^loop[[:space:]]'; then
35
# Insert loop module with max_part > 1
36
modprobe loop max_part=7 || fail=1
39
dd if=/dev/zero of=backing_file bs=1M count=4 >/dev/null 2>&1 || fail=1
41
# Set up loop device on top of backing file
42
loopdev=$(losetup -f --show backing_file)
43
test -z "$loopdev" && fail=1
45
require_partitionable_loop_device_ $loopdev
47
# Expect this to succeed
48
parted -s "$loopdev" mklabel msdos > err 2>&1 || fail=1
49
compare /dev/null err || fail=1 # expect no output
52
parted -s "$loopdev" mkpart primary 1M 2M > err 2>&1 || fail=1
53
compare /dev/null err || fail=1 # expect no output
54
udevadm settle --timeout=5 || fail=1
56
# Verify that the partition appeared in /proc/partitions
57
entry=$(basename "$loopdev"p1)
58
grep "$entry" /proc/partitions || { cat /proc/partitions; fail=1; }
60
# Remove the partition
61
parted -s "$loopdev" rm 1 > err 2>&1 || fail=1
62
compare /dev/null err || fail=1 # expect no output
63
udevadm settle --timeout=5 || fail=1
65
# Verify that the partition got removed from /proc/partitions
66
grep "$entry" /proc/partitions && fail=1