mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
dm: fix a bug in dm_accept_partial_bio
dm-writecache doesn't work in pmem mode - mkfs.ext4 and the following fsck.ext4 fail with data corruption reported. The commit7dd76d1fee("dm: improve bio splitting and associated IO accounting") introduced a latent bug in dm_accept_partial_bio - it set tio->io->sectors = n_sectors;. This is incorrect, according to the diagram in the source code at dm_accept_partial_bio, it should be the size of regions 1+2, not the region 2 alone. The latent bug become real bug with the commit8b211aaccb("dm: add two stage requeue mechanism"). dm-writecache in pmem mode is the only target that actually advances bio with bio_advance and then calls dm_accept_partial_bio (so, the region 1 is non-empty). All the other targets call dm_accept_partial_bio with region 1 empty, so bug went unnoticed for so long. Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Assisted-by: Claude:claude-opus-5 Cc: stable@vger.kernel.org Fixes:8b211aaccb("dm: add two stage requeue mechanism")
This commit is contained in:
parent
99909b74fb
commit
a279804752
|
|
@ -1350,7 +1350,7 @@ void dm_accept_partial_bio(struct bio *bio, unsigned int n_sectors)
|
|||
* for accounting but it is being reduced so update accordingly.
|
||||
*/
|
||||
dm_io_set_flag(io, DM_IO_WAS_SPLIT);
|
||||
io->sectors = n_sectors;
|
||||
io->sectors = *tio->len_ptr;
|
||||
io->sector_offset = bio_sectors(io->orig_bio);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dm_accept_partial_bio);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user