All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jet Chen <jet.chen@intel.com>
To: Ming Lei <tom.leiming@gmail.com>,
	Maurizio Lombardi <mlombard@redhat.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Jens Axboe <axboe@kernel.dk>,
	Dongsu Park <dongsu.park@profitbricks.com>,
	Fengguang Wu <fengguang.wu@intel.com>
Subject: Re: [PATCH] bio: decrease bi_iter.bi_size by len in the fail path
Date: Thu, 29 May 2014 14:06:18 +0800	[thread overview]
Message-ID: <5386CE5A.6070708@intel.com> (raw)
In-Reply-To: <CACVXFVPQR6xdzJxakPhA_rMiNyquooEGt_XS50-nZmyY0P+0CA@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1996 bytes --]

On 05/29/2014 01:44 AM, Ming Lei wrote:
> On Thu, May 29, 2014 at 1:21 AM, Maurizio Lombardi <mlombard@redhat.com> wrote:
>> Hi Ming,
>>
>> On Thu, May 29, 2014 at 12:59:19AM +0800, Ming Lei wrote:
>>>
>>> Actually, the correct thing may be like what did in the
>>> attached patch, as Maurizio discussed with me[1].
>>>
>>> Very interestingly, I have reproduced the problem one time
>>> with ext4/271 ext4/301 ext4/305, but won't with the attached
>>> patch after running it for 3 rounds.
>>>
>>> [tom@localhost xfstests]$ sudo ./check ext4/271 ext4/301 ext4/305
>>> FSTYP         -- ext4
>>> PLATFORM      -- Linux/x86_64 localhost 3.15.0-rc7-next-20140527+
>>> MKFS_OPTIONS  -- /dev/vdc
>>> MOUNT_OPTIONS -- -o acl,user_xattr /dev/vdc /mnt/scratch
>>>
>>> ext4/271 1s ... 1s
>>> ext4/301 31s ... 32s
>>> ext4/305 181s ... 180s
>>> Ran: ext4/271 ext4/301 ext4/305
>>> Passed all 3 tests
>>>
>>> Jet, could you test the attached patch?
>>>
>>> [1], https://lkml.org/lkml/2014/5/27/327
>>
>> There is a little mistake in your patch, you removed bio->bi_iter.bi_size += len;
>> after the "done" label,
>> but be careful that at line 747 there is a "goto done"... bi_size should be incremented
>> before jumping there.
>
> Good catch, thanks Maurizio.
>
> Jet, please test the attached patch in this mail and ignore previous
> one.
>
> The story behind the patch should be like below:
>
> - one page is added in __bio_add_page() 'successfully',
> and bio->bi_phys_segments is equal to queue_max_segments(q),
> but it should have been rejected since the last vector isn't covered
>
> - next time, __bio_add_page() is called to add one page, but this
> time blk_recount_segments() can figure out the actual physical
> segments and find it is more than max segments, so failure is
> triggered, but the bio->bi_phys_segments is updated with
> max segments plus one
>
> - the oops is triggered and reported by Jet, :-)
>
>
> Thanks,
>
This patch works, thanks.

Tested-by: Jet Chen <jet.chen@intel.com>


[-- Attachment #2: fix_compute_segments.patch --]
[-- Type: text/x-patch, Size: 997 bytes --]

diff --git a/block/bio.c b/block/bio.c
index 0443694..f9bae56 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -744,6 +744,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
 				}
 			}
 
+			bio->bi_iter.bi_size += len;
 			goto done;
 		}
 	}
@@ -761,6 +762,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
 	bvec->bv_offset = offset;
 	bio->bi_vcnt++;
 	bio->bi_phys_segments++;
+	bio->bi_iter.bi_size += len;
 
 	/*
 	 * Perform a recount if the number of segments is greater
@@ -802,7 +804,6 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
 		bio->bi_flags &= ~(1 << BIO_SEG_VALID);
 
  done:
-	bio->bi_iter.bi_size += len;
 	return len;
 
  failed:
@@ -810,6 +811,7 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
 	bvec->bv_len = 0;
 	bvec->bv_offset = 0;
 	bio->bi_vcnt--;
+	bio->bi_iter.bi_size -= len;
 	blk_recount_segments(q, bio);
 	return 0;
 }

  reply	other threads:[~2014-05-29  6:08 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-26 19:43 [jet.chen@intel.com: [bio] kernel BUG at drivers/block/virtio_blk.c:166!] Maurizio Lombardi
2014-05-26 19:43 ` Maurizio Lombardi
2014-05-27  4:03 ` Ming Lei
2014-05-27  4:03   ` Ming Lei
2014-05-27  8:44   ` Maurizio Lombardi
2014-05-27  8:44     ` Maurizio Lombardi
2014-05-27 11:24     ` Maurizio Lombardi
2014-05-27 11:24       ` Maurizio Lombardi
2014-05-28 15:09       ` Dongsu Park
2014-05-28 15:09         ` Dongsu Park
2014-05-28 15:09       ` [PATCH] bio: decrease bi_iter.bi_size by len in the fail path Dongsu Park
2014-05-28 15:42         ` Ming Lei
2014-05-28 16:59           ` Ming Lei
2014-05-28 17:21             ` Maurizio Lombardi
2014-05-28 17:44               ` Ming Lei
2014-05-29  6:06                 ` Jet Chen [this message]
2014-05-29  7:04                   ` Maurizio Lombardi
2014-05-29  7:28                     ` Ming Lei
2014-05-29  3:35             ` Jet Chen
2014-05-29  4:13               ` Ming Lei
2014-05-29  4:36                 ` Jet Chen
2014-05-30  9:41             ` Dongsu Park
2014-05-28 15:49         ` Maurizio Lombardi
2014-05-29  3:21         ` Jet Chen
2014-05-28 15:16       ` [jet.chen@intel.com: [bio] kernel BUG at drivers/block/virtio_blk.c:166!] Jet Chen
2014-05-28 15:16         ` Jet Chen
2014-05-28 15:27         ` Maurizio Lombardi
2014-05-28 15:27           ` Maurizio Lombardi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5386CE5A.6070708@intel.com \
    --to=jet.chen@intel.com \
    --cc=axboe@kernel.dk \
    --cc=dongsu.park@profitbricks.com \
    --cc=fengguang.wu@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlombard@redhat.com \
    --cc=tom.leiming@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.