mirror of
https://github.com/torvalds/linux.git
synced 2026-09-12 12:34:02 +02:00
xfs: restore bi_bdev in xfs_zone_gc_write_chunk
xfs_zone_gc_write_chunk relies on bi_bdev to still be valid, which is not
true when XFS is used on top of a stacked block device. This can lead to
misdirected GC writes, writing of plain text when using dm-crypt, or
miscalculated I/O limits in xfs_zone_gc_split_write.
Fix this by reassigning bi_bdev.
Fixes: 080d01c41d ("xfs: implement zoned garbage collection")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
6b855256eb
commit
885435535b
|
|
@ -869,6 +869,11 @@ xfs_zone_gc_write_chunk(
|
|||
WRITE_ONCE(chunk->state, XFS_GC_BIO_NEW);
|
||||
list_move_tail(&chunk->entry, &data->writing);
|
||||
|
||||
/*
|
||||
* If we run on top of stacked block device, the read I/O might have
|
||||
* reset bi_bdev, restore it to the one we want.
|
||||
*/
|
||||
bio_set_dev(&chunk->bio, mp->m_rtdev_targp->bt_bdev);
|
||||
bio_reuse(&chunk->bio, REQ_OP_WRITE);
|
||||
while ((split_chunk = xfs_zone_gc_split_write(data, chunk)))
|
||||
xfs_zone_gc_submit_write(data, split_chunk);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user