Fix long standing -EOPNOTSUPP problem caused by large inline extent
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v3 Latest6 patches 3 repliesIn review
- v27 patches 6 repliesSuperseded
- v14 patches 7 repliesSuperseded
Changes in v3 from the cover letter
Merge fixes for convert.
Add real commit message for convert fixes.
Use $TEST_TOP to replace cooperate with stand alone test cases. Use for loops to make the new test case shorter.
Patches in v3 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/6 | btrfs-progs: convert: Fix inline file extent creation conditionconvert/ convert/ | +3 | 0 replies | |
| 2/6 | btrfs-progs: mkfs/rootdir: Fix inline extent creation checkmkfs/ | +4 | 0 replies | |
| 3/6 | btrfs-progs: check/original mode: Check inline extent sizecheck/ check/ | +17 | 0 replies | |
| 4/6 | btrfs-progs: check/lowmem mode: Check inline extent sizecheck/ | +28 | 0 replies | |
| 5/6 | btrfs-progs: test/convert: Add test case for invalid large inline data extenttests/ | +22 | 0 replies | |
| 6/6 | btrfs-progs: test/mkfs: Add test case for rootdir inline extent sizetests/ | +47 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v3 yet.
Cover letter [PATCH v3 0/6] Fix long standing -EOPNOTSUPP problem caused by large inline extent
The patch is based on v4.15.1, and is designed to replace the old patch in devel branch.
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 in several parts of btrfs-progs, any tool which creates file extent is involved, including:
1) btrfs-convert
2) mkfs --rootdir
This patchset fixes the problems in convert (both ext2 and reiserfs), mkfs --rootdir, then add check support for both original and lowmem mode, and finally adds 2 test cases, one for mkfs and one for convert.
For mkfs test case, it can already be exposed by misc/002, but a pin-point test case will be much better.
changelog:
v2:
Don't modify BTRFS_MAX_INLINE_DATA_SIZE(), but add extra check to callers who create file extents.
v3:
Merge fixes for convert.
Add real commit message for convert fixes.
Use $TEST_TOP to replace cooperate with stand alone test cases. Use for loops to make the new test case shorter.
Qu Wenruo (6):
btrfs-progs: convert: Fix inline file extent creation condition
btrfs-progs: mkfs/rootdir: Fix inline extent creation check
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
btrfs-progs: test/mkfs: Add test case for rootdir inline extent size
check/main.c | 16 ++++++++ check/mode-lowmem.c | 28 +++++++++++++ check/mode-original.h | 1 + convert/source-ext2.c | 2 +- convert/source-reiserfs.c | 3 +- mkfs/rootdir.c | 6 ++- .../016-invalid-large-inline-extent/test.sh | 22 ++++++++++ tests/mkfs-tests/014-rootdir-inline-extent/test.sh | 47 ++++++++++++++++++++++ 8 files changed, 121 insertions(+), 4 deletions(-) create mode 100755 tests/convert-tests/016-invalid-large-inline-extent/test.sh create mode 100755 tests/mkfs-tests/014-rootdir-inline-extent/test.sh
Signature · 1 line
2.16.2