bio: ensure __bio_clone_fast copies bi_partno
A new field was introduced in74d46992e0
, bi_partno, instead of using bdev->bd_contains and encoding the partition information in the bi_bdev field. __bio_clone_fast was changed to copy the disk information, but not the partition information. At minimum, this regressed bcache and caused data corruption. Signed-off-by: Michael Lyle <mlyle@lyle.org> Fixes:74d46992e0
("block: replace bi_bdev with a gendisk pointer and partitions index") Reported-by: Pavel Goran <via-bcache@pvgoran.name> Reported-by: Campbell Steven <casteven@gmail.com> Reviewed-by: Coly Li <colyli@suse.de> Reviewed-by: Ming Lei <ming.lei@redhat.com> Cc: <stable@vger.kernel.org> # 4.14 Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Родитель
cce75291ff
Коммит
62530ed8b1
|
@ -597,6 +597,7 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src)
|
||||||
* so we don't set nor calculate new physical/hw segment counts here
|
* so we don't set nor calculate new physical/hw segment counts here
|
||||||
*/
|
*/
|
||||||
bio->bi_disk = bio_src->bi_disk;
|
bio->bi_disk = bio_src->bi_disk;
|
||||||
|
bio->bi_partno = bio_src->bi_partno;
|
||||||
bio_set_flag(bio, BIO_CLONED);
|
bio_set_flag(bio, BIO_CLONED);
|
||||||
bio->bi_opf = bio_src->bi_opf;
|
bio->bi_opf = bio_src->bi_opf;
|
||||||
bio->bi_write_hint = bio_src->bi_write_hint;
|
bio->bi_write_hint = bio_src->bi_write_hint;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче