summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2015-11-05 14:22:10 +0100
committerDavid Sterba <dsterba@suse.com>2015-11-05 14:49:02 +0100
commitf2c844f65ffdb6673467eb838049a48dc316dcaf (patch)
tree6219195aba6272b4801616bfcf2ea5c099cab87f
parente8a5f57b69b583e0f15b931353aef98380b4e796 (diff)
btrfs-progs: mkfs: do not truncate the image when --rootdir is set
With the rootdir option we try to guess the final size of the image and fill it with zeros, preceded by truncation. After patch "Btrfs-progs: Do not force mixed block group creation unless '-M' option is specified" the misc test 002 will fail, because of the non-mixed mode. I think we should not touch the image size (no change for block devices) and try to fit into whatever is provided by user. Signed-off-by: David Sterba <dsterba@suse.com>
-rw-r--r--mkfs.c2
-rwxr-xr-xtests/mkfs-tests/004-rootdir-keeps-size/test.sh30
2 files changed, 31 insertions, 1 deletions
diff --git a/mkfs.c b/mkfs.c
index 72ee2904..0ea39f38 100644
--- a/mkfs.c
+++ b/mkfs.c
@@ -926,7 +926,7 @@ fail_no_dir:
static int open_target(char *output_name)
{
int output_fd;
- output_fd = open(output_name, O_CREAT | O_RDWR | O_TRUNC,
+ output_fd = open(output_name, O_CREAT | O_RDWR,
S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
return output_fd;
diff --git a/tests/mkfs-tests/004-rootdir-keeps-size/test.sh b/tests/mkfs-tests/004-rootdir-keeps-size/test.sh
new file mode 100755
index 00000000..a78a3dec
--- /dev/null
+++ b/tests/mkfs-tests/004-rootdir-keeps-size/test.sh
@@ -0,0 +1,30 @@
+#!/bin/bash
+# make sure that mkfs.btrfs --rootsize does not change size of the image
+
+source $TOP/tests/common
+
+check_prereq mkfs.btrfs
+prepare_test_dev
+
+test_mkfs_with_size() {
+ local size
+ local imgsize
+ local tmp
+
+ size="$1"
+ run_check truncate -s$size $TEST_DEV
+ imgsize=$(run_check_stdout stat --format=%s $TEST_DEV)
+ run_check $SUDO_HELPER $TOP/mkfs.btrfs -f \
+ --rootdir $TOP/Documentation \
+ $TEST_DEV
+ tmp=$(run_check_stdout stat --format=%s $TEST_DEV)
+ if ! [ "$imgsize" = "$tmp" ]; then
+ _fail "image size changed from $imgsize to $tmp"
+ fi
+}
+
+test_mkfs_with_size 128M
+test_mkfs_with_size 256M
+test_mkfs_with_size 512M
+test_mkfs_with_size 1G
+test_mkfs_with_size 2G