Kernel doesn't support dropping range inside inline extent, and prevents
such thing happening by limiting max inline extent size to
min(max_inline, sectorsize - 1) in cow_file_range_inline().
However btrfs-progs only inherit the BTRFS_MAX_INLINE_DATA_SIZE() macro,
which doesn't have sectorsize check.
And since btrfs-progs defaults to 16K nodesize, above macro allows large
inline extent over 15K size.
This leads to unexpected kernel behavior.
The bug exists from the very beginning of btrfs-convert, dating back to
2008 when btrfs-convert is first introduced.
Qu Wenruo (4):
btrfs-progs: Limit inline extent below page size
btrfs-progs: check/original mode: Check inline extent size
btrfs-progs: check/lowmem mode: Check inline extent size
btrfs-progs: test/convert: Add test case for invalid large inline data
extent
check/main.c | 4 ++++
check/mode-lowmem.c | 8 ++++++++
check/mode-original.h | 1 +
ctree.h | 11 +++++++++--
.../016-invalid-large-inline-extent/test.sh | 22 ++++++++++++++++++++++
5 files changed, 44 insertions(+), 2 deletions(-)
create mode 100755 tests/convert-tests/016-invalid-large-inline-extent/test.sh
--
2.16.2
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html