The xfstests test suite assumes that an attempt to collapse range on the range (0, 1) will return EOPNOTSUPP if the file system does not support collapse range. Commit 280227a75b56: "ext4: move check under lock scope to close a race" broke this, and this caused xfstests to fail when run when testing file systems that did not have the extents feature enabled.
Unified · Split
| @@ -5396,6 +5396,14 @@ int ext4_collapse_range(struct inode *inode, loff_t offset, loff_t len) · 5395 unmodified lines | ||
| 5396 | 5396 | loff_t new_size, ioffset; |
| 5397 | 5397 | int ret; |
| 5398 | 5398 | |
| 5399 | + /* | |
| 5400 | + * We need to test this early because xfstests assumes that a | |
| 5401 | + * collapse range of (0, 1) will return EOPNOTSUPP if the file | |
| 5402 | + * system does not support collapse range. | |
| 5403 | + */ | |
| 5404 | + if (!ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) | |
| 5405 | + return -EOPNOTSUPP; | |
| 5406 | + | |
| 5399 | 5407 | /* Collapse range works only on fs block size aligned offsets. */ |
| 5400 | 5408 | if (offset & (EXT4_CLUSTER_SIZE(sb) - 1) || |
| 5401 | 5409 | len & (EXT4_CLUSTER_SIZE(sb) - 1)) |