btrfs-progs: tests: add case to verify large symbolic link handling in convert

The new test case will:

- Create a symbolic which contains a 4095 bytes sized target on ext4

- Convert the ext4 to btrfs

- Make sure we can still read the symbolic link
  For unpatched btrfs-convert, the resulted symbolic link will be rejected
  by kernel and fail.

Signed-off-by: Qu Wenruo <wqu@suse.com>
This commit is contained in:
Qu Wenruo 2024-09-03 16:45:46 +09:30 committed by David Sterba
parent 6674a952ff
commit 073471fa27
1 changed files with 27 additions and 0 deletions

View File

@ -0,0 +1,27 @@
#!/bin/bash
# Make sure btrfs-convert can handle a symbol link which is 4095 bytes large
source "$TEST_TOP/common" || exit
source "$TEST_TOP/common.convert" || exit
setup_root_helper
prepare_test_dev 1G
check_global_prereq mkfs.ext4
# This is at the symbolic link size limit (PATH_MAX includes the terminating NUL).
link_target=$(printf "%0.sb" {1..4095})
convert_test_prep_fs ext4 mke2fs -t ext4 -b 4096
run_check $SUDO_HELPER ln -s "$link_target" "$TEST_MNT/symbol_link"
run_check_umount_test_dev
# For unpatched btrfs-convert, it will always append one byte to the
# link target, causing above 4095 target to be 4096, exactly one sector,
# resulting a regular file extent.
convert_test_do_convert
run_check_mount_test_dev
# If the unpatched btrfs-convert created a regular extent, and the kernel is
# newer enough, such readlink will be rejected by kernel.
run_check $SUDO_HELPER readlink "$TEST_MNT/symbol_link"
run_check_umount_test_dev