| From 62530ed8b1d07a45dec94d46e521c0c6c2d476e6 Mon Sep 17 00:00:00 2001 |
| From: Michael Lyle <mlyle@lyle.org> |
| Date: Thu, 16 Nov 2017 23:47:25 -0800 |
| Subject: bio: ensure __bio_clone_fast copies bi_partno |
| |
| From: Michael Lyle <mlyle@lyle.org> |
| |
| commit 62530ed8b1d07a45dec94d46e521c0c6c2d476e6 upstream. |
| |
| A new field was introduced in 74d46992e0d9, 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: 74d46992e0d9 ("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> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| block/bio.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/block/bio.c |
| +++ b/block/bio.c |
| @@ -597,6 +597,7 @@ void __bio_clone_fast(struct bio *bio, s |
| * so we don't set nor calculate new physical/hw segment counts here |
| */ |
| bio->bi_disk = bio_src->bi_disk; |
| + bio->bi_partno = bio_src->bi_partno; |
| bio_set_flag(bio, BIO_CLONED); |
| bio->bi_opf = bio_src->bi_opf; |
| bio->bi_write_hint = bio_src->bi_write_hint; |