On Mon, Mar 08, 2021 at 05:20:17PM +0800, Qu Wenruo wrote:
> [BUG]
> Btrfs fails at generic/091 test case, with the following output:
>
> fsx -N 10000 -o 128000 -l 500000 -r PSIZE -t BSIZE -w BSIZE -Z -W
> mapped writes DISABLED
> Seed set to 1
> main: filesystem does not support fallocate mode FALLOC_FL_COLLAPSE_RANGE,
> disabling!
> main: filesystem does not support fallocate mode FALLOC_FL_INSERT_RANGE,
> disabling!
> skipping zero size read
> truncating to largest ever: 0xe400
> copying to largest ever: 0x1f400
> cloning to largest ever: 0x70000
> cloning to largest ever: 0x77000
> fallocating to largest ever: 0x7a120
> Mapped Read: non-zero data past EOF (0x3a7ff) page offset 0x800 is 0xf2e1
> <<<
> ...
>
> [CAUSE]
> In commit c28ea613fafa ("btrfs: subpage: fix the false data csum mismatch
> error")
> end_bio_extent_readpage() changes to only zero the range inside the bvec
> for incoming subpage support.
>
> But that commit is using incorrect offset to calculate the start.
>
> For subpage, we can have a case that the whole bvec is beyond isize,
> thus we need to calculate the correct offset.
>
> But the offending commit is using @end (bvec end), other than @start
> (bvec start) to calculate the start offset.
>
> This means, we only zero the last byte of the bvec, not from the isize.
> This stupid bug makes the range beyond isize is not properly zeroed, and
> failed above test.
>
> [FIX]
> Use correct @start to calculate the range start.
>
> Reported-by: kernel test robot <[email protected]>
> Signed-off-by: Qu Wenruo <[email protected]>
Added to misc-next, thanks.