All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Kent Overstreet <koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Cc: linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	mpatocka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	bharrosh-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org,
	Jens Axboe <axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org>,
	Alasdair Kergon <agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Sage Weil <sage-4GqslpFJ+cxBDgjK7y7TUQ@public.gmane.org>
Subject: Re: [PATCH v6 13/13] block: Only clone bio vecs that are in use
Date: Fri, 24 Aug 2012 13:42:16 -0700	[thread overview]
Message-ID: <20120824204216.GH21325@google.com> (raw)
In-Reply-To: <20120824070508.GE11977-jC9Py7bek1znysI04z7BkA@public.gmane.org>

Hello, Kent.

On Fri, Aug 24, 2012 at 12:05:08AM -0700, Kent Overstreet wrote:
> > I'm pretty sure I sound like a broken record by now, but
> > 
> > * How was this tested?
> > 
> > * What are the implications and possible dangers?
> 
> I've said all that on list, but I gather what you really wanted was to
> have it all in the patch description. Will do.

Yeap.

> > > @@ -463,10 +468,10 @@ void __bio_clone(struct bio *bio, struct bio *bio_src)
> > >  	bio->bi_sector = bio_src->bi_sector;
> > >  	bio->bi_bdev = bio_src->bi_bdev;
> > >  	bio->bi_flags |= 1 << BIO_CLONED;
> > > +	bio->bi_flags &= ~(1 << BIO_SEG_VALID);
> > 
> > For the n'th time, explain please.
> 
> Argh, I could've sworn I dropped that part.

Can we drop it tho?  If we're changing bvecs, we probably should be
clearing SEG_VALID on both bios.

> commit 0edda563aef9432b45f0c6a50f52590b92594560
> Author: Kent Overstreet <koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
> Date:   Thu Aug 23 23:26:38 2012 -0700
> 
>     block: Only clone bio vecs that are in use
>     
>     bcache creates large bios internally, and then splits them according to
>     the device requirements before it sends them down. If a lower level
>     device tries to clone the bio, and the original bio had more than
>     BIO_MAX_PAGES, the clone will fail unecessarily.
>     
>     We can fix this by only cloning the bio vecs that are actually in use -
>     as for as the block layer is concerned the new bio is still equivalent
>     to the old bio.
>     
>     This code should in general be safe as long as all the block layer code
>     uses bi_idx, bi_vcnt consistently; since bios are cloned by code that
>     doesn't own the original bio there's little room for issues caused by
>     code playing games with the original bio's bi_io_vec. One perhaps
>     imagine code depending the clone and original bio's io vecs lining up a
>     certain way, but auditing and testing haven't turned up anything.
>     
>     Testing: This code has been in the bcache tree for quite awhile, and has
>     been tested with various md layers and dm targets (including strange
>     things like multipath).

Yeap, looks much better to me.

Thanks.

-- 
tejun

WARNING: multiple messages have this Message-ID (diff)
From: Tejun Heo <tj@kernel.org>
To: Kent Overstreet <koverstreet@google.com>
Cc: linux-bcache@vger.kernel.org, linux-kernel@vger.kernel.org,
	dm-devel@redhat.com, vgoyal@redhat.com, mpatocka@redhat.com,
	bharrosh@panasas.com, Jens Axboe <axboe@kernel.dk>,
	Alasdair Kergon <agk@redhat.com>, Sage Weil <sage@inktank.com>
Subject: Re: [PATCH v6 13/13] block: Only clone bio vecs that are in use
Date: Fri, 24 Aug 2012 13:42:16 -0700	[thread overview]
Message-ID: <20120824204216.GH21325@google.com> (raw)
In-Reply-To: <20120824070508.GE11977@moria.home.lan>

Hello, Kent.

On Fri, Aug 24, 2012 at 12:05:08AM -0700, Kent Overstreet wrote:
> > I'm pretty sure I sound like a broken record by now, but
> > 
> > * How was this tested?
> > 
> > * What are the implications and possible dangers?
> 
> I've said all that on list, but I gather what you really wanted was to
> have it all in the patch description. Will do.

Yeap.

> > > @@ -463,10 +468,10 @@ void __bio_clone(struct bio *bio, struct bio *bio_src)
> > >  	bio->bi_sector = bio_src->bi_sector;
> > >  	bio->bi_bdev = bio_src->bi_bdev;
> > >  	bio->bi_flags |= 1 << BIO_CLONED;
> > > +	bio->bi_flags &= ~(1 << BIO_SEG_VALID);
> > 
> > For the n'th time, explain please.
> 
> Argh, I could've sworn I dropped that part.

Can we drop it tho?  If we're changing bvecs, we probably should be
clearing SEG_VALID on both bios.

> commit 0edda563aef9432b45f0c6a50f52590b92594560
> Author: Kent Overstreet <koverstreet@google.com>
> Date:   Thu Aug 23 23:26:38 2012 -0700
> 
>     block: Only clone bio vecs that are in use
>     
>     bcache creates large bios internally, and then splits them according to
>     the device requirements before it sends them down. If a lower level
>     device tries to clone the bio, and the original bio had more than
>     BIO_MAX_PAGES, the clone will fail unecessarily.
>     
>     We can fix this by only cloning the bio vecs that are actually in use -
>     as for as the block layer is concerned the new bio is still equivalent
>     to the old bio.
>     
>     This code should in general be safe as long as all the block layer code
>     uses bi_idx, bi_vcnt consistently; since bios are cloned by code that
>     doesn't own the original bio there's little room for issues caused by
>     code playing games with the original bio's bi_io_vec. One perhaps
>     imagine code depending the clone and original bio's io vecs lining up a
>     certain way, but auditing and testing haven't turned up anything.
>     
>     Testing: This code has been in the bcache tree for quite awhile, and has
>     been tested with various md layers and dm targets (including strange
>     things like multipath).

Yeap, looks much better to me.

Thanks.

-- 
tejun

  parent reply	other threads:[~2012-08-24 20:42 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-22 17:03 [PATCH v6 00/13] Block cleanups Kent Overstreet
2012-08-22 17:03 ` Kent Overstreet
2012-08-22 17:03 ` [PATCH v6 01/13] block: Generalized bio pool freeing Kent Overstreet
2012-08-22 17:03   ` Kent Overstreet
     [not found]   ` <1345655050-28199-2-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 21:27     ` Nicholas A. Bellinger
2012-08-22 21:27       ` Nicholas A. Bellinger
2012-08-22 17:03 ` [PATCH v6 02/13] dm: Use bioset's front_pad for dm_rq_clone_bio_info Kent Overstreet
     [not found]   ` <1345655050-28199-3-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 18:32     ` Tejun Heo
2012-08-22 18:32       ` Tejun Heo
2012-08-22 21:30     ` Vivek Goyal
2012-08-22 21:30       ` Vivek Goyal
     [not found]       ` <20120822213010.GA8020-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-08-24  7:14         ` Kent Overstreet
2012-08-24  7:14           ` Kent Overstreet
     [not found]           ` <20120824071448.GF11977-jC9Py7bek1znysI04z7BkA@public.gmane.org>
2012-08-24 18:40             ` Vivek Goyal
2012-08-24 18:40               ` Vivek Goyal
2012-08-22 17:04 ` [PATCH v6 03/13] block: Add bio_reset() Kent Overstreet
     [not found]   ` <1345655050-28199-4-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 18:34     ` Tejun Heo
2012-08-22 18:34       ` Tejun Heo
2012-08-22 19:51       ` Tejun Heo
2012-08-22 17:04 ` [PATCH v6 04/13] pktcdvd: Switch to bio_kmalloc() Kent Overstreet
2012-08-22 17:04   ` Kent Overstreet
     [not found]   ` <1345655050-28199-5-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 19:55     ` Tejun Heo
2012-08-22 19:55       ` Tejun Heo
     [not found]       ` <20120822195546.GG19212-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-28 23:19         ` Jiri Kosina
2012-08-28 23:19           ` Jiri Kosina
2012-08-29  4:35           ` Peter Osterlund
2012-09-03 16:15         ` Jiri Kosina
2012-09-03 16:15           ` Jiri Kosina
2012-08-22 17:04 ` [PATCH v6 05/13] block: Kill bi_destructor Kent Overstreet
2012-08-22 17:04   ` Kent Overstreet
     [not found]   ` <1345655050-28199-6-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 20:00     ` Tejun Heo
2012-08-22 20:00       ` Tejun Heo
     [not found]       ` <20120822200032.GH19212-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-24  5:09         ` Kent Overstreet
2012-08-24  5:09           ` Kent Overstreet
2012-08-22 17:04 ` [PATCH v6 06/13] block: Consolidate bio_alloc_bioset(), bio_kmalloc() Kent Overstreet
2012-08-22 17:04   ` Kent Overstreet
     [not found]   ` <1345655050-28199-7-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 20:17     ` Tejun Heo
2012-08-22 20:17       ` Tejun Heo
     [not found]       ` <20120822201730.GI19212-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-24  5:04         ` Kent Overstreet
2012-08-24  5:04           ` Kent Overstreet
     [not found]           ` <20120824050400.GA11977-jC9Py7bek1znysI04z7BkA@public.gmane.org>
2012-08-24 20:08             ` Tejun Heo
2012-08-24 20:08               ` Tejun Heo
2012-08-22 17:04 ` [PATCH v6 07/13] block: Avoid deadlocks with bio allocation by stacking drivers Kent Overstreet
2012-08-22 20:30   ` Tejun Heo
2012-08-22 20:30     ` Tejun Heo
2012-08-24  5:55     ` Kent Overstreet
     [not found]       ` <20120824055554.GC11977-jC9Py7bek1znysI04z7BkA@public.gmane.org>
2012-08-24 20:28         ` Tejun Heo
2012-08-24 20:28           ` Tejun Heo
2012-08-22 17:04 ` [PATCH v6 11/13] block: Rework bio_pair_split() Kent Overstreet
     [not found]   ` <1345655050-28199-12-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 21:04     ` Tejun Heo
2012-08-22 21:04       ` Tejun Heo
     [not found]       ` <20120822210410.GL19212-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-24  2:25         ` Martin K. Petersen
2012-08-24  2:25           ` Martin K. Petersen
     [not found]           ` <yq1y5l5hvpw.fsf-+q57XtR/GgMb6DWv4sQWN6xOck334EZe@public.gmane.org>
2012-08-24 10:37             ` Kent Overstreet
2012-08-24 10:37               ` Kent Overstreet
2012-08-24 20:58             ` Tejun Heo
2012-08-24 20:58               ` Tejun Heo
2012-08-24 10:30       ` Kent Overstreet
2012-08-24 20:53         ` Tejun Heo
2012-08-22 17:04 ` [PATCH v6 13/13] block: Only clone bio vecs that are in use Kent Overstreet
     [not found]   ` <1345655050-28199-14-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 21:10     ` Tejun Heo
2012-08-22 21:10       ` Tejun Heo
     [not found]       ` <20120822211045.GN19212-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-24  7:05         ` Kent Overstreet
2012-08-24  7:05           ` Kent Overstreet
     [not found]           ` <20120824070508.GE11977-jC9Py7bek1znysI04z7BkA@public.gmane.org>
2012-08-24 20:42             ` Tejun Heo [this message]
2012-08-24 20:42               ` Tejun Heo
     [not found] ` <1345655050-28199-1-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 17:04   ` [PATCH v6 08/13] block: Add an explicit bio flag for bios that own their bvec Kent Overstreet
2012-08-22 17:04     ` Kent Overstreet
     [not found]     ` <1345655050-28199-9-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 17:43       ` Adrian Bunk
2012-08-22 17:43         ` Adrian Bunk
     [not found]         ` <20120822174351.GA27453-c9qLp6CXzmZPEsXTsnYjsA@public.gmane.org>
2012-08-22 19:22           ` Kent Overstreet
2012-08-22 19:22             ` Kent Overstreet
2012-08-22 20:00             ` Adrian Bunk
2012-08-22 20:00               ` Adrian Bunk
     [not found]               ` <20120822200038.GB27453-c9qLp6CXzmZPEsXTsnYjsA@public.gmane.org>
2012-08-28 17:23                 ` Kent Overstreet
2012-08-28 17:23                   ` Kent Overstreet
2012-08-22 17:04   ` [PATCH v6 09/13] block: Rename bio_split() -> bio_pair_split() Kent Overstreet
2012-08-22 17:04     ` Kent Overstreet
2012-08-22 17:04   ` [PATCH v6 10/13] block: Introduce new bio_split() Kent Overstreet
2012-08-22 17:04     ` Kent Overstreet
     [not found]     ` <1345655050-28199-11-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 20:46       ` Tejun Heo
2012-08-22 20:46         ` Tejun Heo
2012-08-22 17:04   ` [PATCH v6 12/13] block: Add bio_clone_bioset(), bio_clone_kmalloc() Kent Overstreet
2012-08-22 17:04     ` Kent Overstreet
     [not found]     ` <1345655050-28199-13-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-22 17:13       ` Jeff Garzik
2012-08-22 17:13         ` Jeff Garzik
2012-08-22 21:07       ` Tejun Heo
2012-08-22 21:07         ` Tejun Heo
     [not found]         ` <20120822210740.GM19212-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-08-24  6:24           ` Kent Overstreet
2012-08-24  6:24             ` Kent Overstreet
     [not found]             ` <20120824062418.GD11977-jC9Py7bek1znysI04z7BkA@public.gmane.org>
2012-08-24 20:36               ` Tejun Heo
2012-08-24 20:36                 ` Tejun Heo
2012-08-23 18:00   ` [PATCH v6 00/13] Block cleanups Vivek Goyal
2012-08-23 18:00     ` Vivek Goyal
     [not found]     ` <20120823180041.GK12232-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-08-24 12:46       ` Kent Overstreet
2012-08-24 12:46         ` Kent Overstreet

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=20120824204216.GH21325@google.com \
    --to=tj-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=agk-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=axboe-tSWWG44O7X1aa/9Udqfwiw@public.gmane.org \
    --cc=bharrosh-C4P08NqkoRlBDgjK7y7TUQ@public.gmane.org \
    --cc=dm-devel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org \
    --cc=linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=mpatocka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=sage-4GqslpFJ+cxBDgjK7y7TUQ@public.gmane.org \
    --cc=vgoyal-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    /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.