| From 90d0f0f11588ec692c12f9009089b398be395184 Mon Sep 17 00:00:00 2001 |
| From: Ming Lei <ming.lei@canonical.com> |
| Date: Sat, 12 Mar 2016 22:56:19 +0800 |
| Subject: block: don't optimize for non-cloned bio in bio_get_last_bvec() |
| |
| From: Ming Lei <ming.lei@canonical.com> |
| |
| commit 90d0f0f11588ec692c12f9009089b398be395184 upstream. |
| |
| For !BIO_CLONED bio, we can use .bi_vcnt safely, but it |
| doesn't mean we can just simply return .bi_io_vec[.bi_vcnt - 1] |
| because the start postion may have been moved in the middle of |
| the bvec, such as splitting in the middle of bvec. |
| |
| Fixes: 7bcd79ac50d9(block: bio: introduce helpers to get the 1st and last bvec) |
| Reported-by: Kent Overstreet <kent.overstreet@gmail.com> |
| Signed-off-by: Ming Lei <ming.lei@canonical.com> |
| Signed-off-by: Jens Axboe <axboe@fb.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| include/linux/bio.h | 5 ----- |
| 1 file changed, 5 deletions(-) |
| |
| --- a/include/linux/bio.h |
| +++ b/include/linux/bio.h |
| @@ -320,11 +320,6 @@ static inline void bio_get_last_bvec(str |
| struct bvec_iter iter = bio->bi_iter; |
| int idx; |
| |
| - if (!bio_flagged(bio, BIO_CLONED)) { |
| - *bv = bio->bi_io_vec[bio->bi_vcnt - 1]; |
| - return; |
| - } |
| - |
| if (unlikely(!bio_multiple_segments(bio))) { |
| *bv = bio_iovec(bio); |
| return; |