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