Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1356433 > unrolled thread
| Started by | Ming Lei <ming.lei@canonical.com> |
|---|---|
| First post | 2016-03-12 16:00 +0100 |
| Last post | 2016-03-13 05:30 +0100 |
| Articles | 3 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec() Ming Lei <ming.lei@canonical.com> - 2016-03-12 16:00 +0100
Re: [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec() Jens Axboe <axboe@kernel.dk> - 2016-03-13 05:00 +0100
Re: [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec() Jens Axboe <axboe@kernel.dk> - 2016-03-13 05:30 +0100
| From | Ming Lei <ming.lei@canonical.com> |
|---|---|
| Date | 2016-03-12 16:00 +0100 |
| Subject | [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec() |
| Message-ID | <rbTbj-7BO-11@gated-at.bofh.it> |
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)
Cc: stable@vger.kernel.org
Reported-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Ming Lei <ming.lei@canonical.com>
---
Jens, I am fine with either reverting previous patchset or
applying this one to v4.5, and you decide it.
Thanks Kent for reporting the issue!
include/linux/bio.h | 5 -----
1 file changed, 5 deletions(-)
diff --git a/include/linux/bio.h b/include/linux/bio.h
index 1e7248f..4abc129 100644
--- a/include/linux/bio.h
+++ b/include/linux/bio.h
@@ -267,11 +267,6 @@ static inline void bio_get_last_bvec(struct bio *bio, struct bio_vec *bv)
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;
--
1.9.1
[toc] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-03-13 05:00 +0100 |
| Subject | Re: [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec() |
| Message-ID | <rc5ma-8fn-15@gated-at.bofh.it> |
| In reply to | #1356433 |
On 03/12/2016 07:56 AM, Ming Lei wrote: > 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. Added and tested. -- Jens Axboe
[toc] | [prev] | [next] | [standalone]
| From | Jens Axboe <axboe@kernel.dk> |
|---|---|
| Date | 2016-03-13 05:30 +0100 |
| Subject | Re: [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec() |
| Message-ID | <rc5Pb-h2-1@gated-at.bofh.it> |
| In reply to | #1356607 |
On 03/12/2016 08:58 PM, Jens Axboe wrote: > On 03/12/2016 07:56 AM, Ming Lei wrote: >> 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. > > Added and tested. And Ming, let's not get a repeat of this situation. For critical fixes, it has to be spot on for post -rc1, especially for code that is notoriously difficult to get right. Fixes are obviously fine, but it has to be just enough to fix the regression, no more. This has been too lax, I expect this to improve. -- Jens Axboe
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web