Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1356433 > unrolled thread

[PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec()

Started byMing Lei <ming.lei@canonical.com>
First post2016-03-12 16:00 +0100
Last post2016-03-13 05:30 +0100
Articles 3 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [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

#1356433 — [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec()

FromMing Lei <ming.lei@canonical.com>
Date2016-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]


#1356607 — Re: [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec()

FromJens Axboe <axboe@kernel.dk>
Date2016-03-13 05:00 +0100
SubjectRe: [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]


#1356613 — Re: [PATCH] block: don't optimize for non-cloned bio in bio_get_last_bvec()

FromJens Axboe <axboe@kernel.dk>
Date2016-03-13 05:30 +0100
SubjectRe: [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