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>,
NeilBrown <neilb-l3A5Bk7waGM@public.gmane.org>,
Lars Ellenberg
<lars.ellenberg-63ez5xqkn6DQT0dZR+AlfA@public.gmane.org>,
Peter Osterlund <petero2-zq6IREYz3ykAvxtiuMwx3w@public.gmane.org>,
Sage Weil <sage-4GqslpFJ+cxBDgjK7y7TUQ@public.gmane.org>,
"Martin K. Petersen"
<martin.petersen-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Subject: Re: [PATCH v6 11/13] block: Rework bio_pair_split()
Date: Wed, 22 Aug 2012 14:04:10 -0700 [thread overview]
Message-ID: <20120822210410.GL19212@google.com> (raw)
In-Reply-To: <1345655050-28199-12-git-send-email-koverstreet-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
Hello, Kent.
On Wed, Aug 22, 2012 at 10:04:08AM -0700, Kent Overstreet wrote:
> This changes bio_pair_split() to use the new bio_split() underneath,
> which gets rid of the single page bio limitation. The various callers
> are fixed up for the slightly different struct bio_pair, and to remove
> the unnecessary checks.
This changes an existing API both in its interface and behavior and
there's no detailed explanation on how it's changed and what are the
implications.
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 1f5b483..63e5852 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -751,14 +751,13 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next,
>
> /* split the bio. We'll release it either in the next
> call, or it will have to be released outside */
> - bp = bio_pair_split(old_chain,
> - (len - total) / SECTOR_SIZE);
> + bp = bio_pair_split(old_chain, (len - total) / SECTOR_SIZE);
Probably belongs to the previous patch which renamed bio_split() to
bio_pair_split()? Another thing is, is this renaming really
necessary? If you did,
* s/bio_split()/bio_pair_split().
* introduce better and prettier bio_split() which has
different semantics.
* replace bio_pair_split() users with bio_split().
the renaming would have made sense, but you renamed an existing API,
intrudced a new one and then changed the renamed old API. Doesn't
make too much sense to me.
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index 0f31ec4..9fa07c7 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -1080,15 +1080,9 @@ static void make_request(struct mddev *mddev, struct bio * bio)
> && (conf->geo.near_copies < conf->geo.raid_disks
> || conf->prev.near_copies < conf->prev.raid_disks))) {
> struct bio_pair *bp;
> - /* Sanity check -- queue functions should prevent this happening */
> - if (bio->bi_vcnt != 1 ||
> - bio->bi_idx != 0)
> - goto bad_map;
> - /* This is a one page bio that upper layers
> - * refuse to split for us, so we need to split it.
> - */
> +
> bp = bio_pair_split(bio,
> - chunk_sects - (bio->bi_sector & (chunk_sects - 1)) );
> + chunk_sects - (bio->bi_sector & (chunk_sects - 1)));
I suppose this one too belongs to the previous rename patch?
> --- a/fs/bio-integrity.c
> +++ b/fs/bio-integrity.c
> @@ -681,50 +681,6 @@ void bio_integrity_trim(struct bio *bio, unsigned int offset,
> EXPORT_SYMBOL(bio_integrity_trim);
>
> /**
> - * bio_integrity_split - Split integrity metadata
> - * @bio: Protected bio
> - * @bp: Resulting bio_pair
> - * @sectors: Offset
> - *
> - * Description: Splits an integrity page into a bio_pair.
> - */
> -void bio_integrity_split(struct bio *bio, struct bio_pair *bp, int sectors)
> -{
> - struct blk_integrity *bi;
> - struct bio_integrity_payload *bip = bio->bi_integrity;
> - unsigned int nr_sectors;
> -
> - if (bio_integrity(bio) == 0)
> - return;
> -
> - bi = bdev_get_integrity(bio->bi_bdev);
> - BUG_ON(bi == NULL);
> - BUG_ON(bip->bip_vcnt != 1);
> -
> - nr_sectors = bio_integrity_hw_sectors(bi, sectors);
> -
> - bp->bio1.bi_integrity = &bp->bip1;
> - bp->bio2.bi_integrity = &bp->bip2;
> -
> - bp->iv1 = bip->bip_vec[0];
> - bp->iv2 = bip->bip_vec[0];
> -
> - bp->bip1.bip_vec[0] = bp->iv1;
> - bp->bip2.bip_vec[0] = bp->iv2;
> -
> - bp->iv1.bv_len = sectors * bi->tuple_size;
> - bp->iv2.bv_offset += sectors * bi->tuple_size;
> - bp->iv2.bv_len -= sectors * bi->tuple_size;
> -
> - bp->bip1.bip_sector = bio->bi_integrity->bip_sector;
> - bp->bip2.bip_sector = bio->bi_integrity->bip_sector + nr_sectors;
> -
> - bp->bip1.bip_vcnt = bp->bip2.bip_vcnt = 1;
> - bp->bip1.bip_idx = bp->bip2.bip_idx = 0;
> -}
> -EXPORT_SYMBOL(bio_integrity_split);
I complained about this in the last posting and in the previous patch.
Please respond. Martin, are you okay with these integrity changes?
> -static void bio_pair_end_1(struct bio *bi, int err)
> +static void bio_pair_end(struct bio *bio, int error)
> {
> - struct bio_pair *bp = container_of(bi, struct bio_pair, bio1);
> + struct bio_pair *bp = bio->bi_private;
>
> - if (err)
> - bp->error = err;
> -
> - bio_pair_release(bp);
> -}
> -
> -static void bio_pair_end_2(struct bio *bi, int err)
> -{
> - struct bio_pair *bp = container_of(bi, struct bio_pair, bio2);
> -
> - if (err)
> - bp->error = err;
> + if (error)
> + clear_bit(BIO_UPTODATE, &bp->orig->bi_flags);
>
> bio_pair_release(bp);
> }
Why is losing error value okay here?
> @@ -1856,8 +1846,7 @@ static int __init init_bio(void)
> if (bioset_integrity_create(fs_bio_set, BIO_POOL_SIZE))
> panic("bio: can't create integrity pool\n");
>
> - bio_split_pool = mempool_create_kmalloc_pool(BIO_SPLIT_ENTRIES,
> - sizeof(struct bio_pair));
> + bio_split_pool = bioset_create(BIO_POOL_SIZE, offsetof(struct bio_pair, split));
> if (!bio_split_pool)
> panic("bio: can't create split pool\n");
It would be nice to mention that using this from stacking drivers is
inherently broken. This is something which has been broken before
this patch but still. bio_split*() should always require separate
biosets.
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 1c3bb47..3ad3540 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -192,14 +192,13 @@ struct bio_integrity_payload {
> * in bio2.bi_private
> */
> struct bio_pair {
> - struct bio bio1, bio2;
> - struct bio_vec bv1, bv2;
> -#if defined(CONFIG_BLK_DEV_INTEGRITY)
> - struct bio_integrity_payload bip1, bip2;
> - struct bio_vec iv1, iv2;
> -#endif
> - atomic_t cnt;
> - int error;
> + atomic_t cnt;
> +
> + bio_end_io_t *bi_end_io;
> + void *bi_private;
> +
> + struct bio *orig;
> + struct bio split;
> };
So, this is struct is allocated as frontpad, which is a pretty unusual
thing to do. Please explain and emphasize that ->split should come
last. Also, given that it's a pair split, it would be nice to somehow
indicate that ->split is the earlier half. Before this change it was
pretty clear with ->bio1/2.
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>,
NeilBrown <neilb@suse.de>,
Lars Ellenberg <lars.ellenberg@linbit.com>,
Peter Osterlund <petero2@telia.com>, Sage Weil <sage@inktank.com>,
"Martin K. Petersen" <martin.petersen@oracle.com>
Subject: Re: [PATCH v6 11/13] block: Rework bio_pair_split()
Date: Wed, 22 Aug 2012 14:04:10 -0700 [thread overview]
Message-ID: <20120822210410.GL19212@google.com> (raw)
In-Reply-To: <1345655050-28199-12-git-send-email-koverstreet@google.com>
Hello, Kent.
On Wed, Aug 22, 2012 at 10:04:08AM -0700, Kent Overstreet wrote:
> This changes bio_pair_split() to use the new bio_split() underneath,
> which gets rid of the single page bio limitation. The various callers
> are fixed up for the slightly different struct bio_pair, and to remove
> the unnecessary checks.
This changes an existing API both in its interface and behavior and
there's no detailed explanation on how it's changed and what are the
implications.
> diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
> index 1f5b483..63e5852 100644
> --- a/drivers/block/rbd.c
> +++ b/drivers/block/rbd.c
> @@ -751,14 +751,13 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next,
>
> /* split the bio. We'll release it either in the next
> call, or it will have to be released outside */
> - bp = bio_pair_split(old_chain,
> - (len - total) / SECTOR_SIZE);
> + bp = bio_pair_split(old_chain, (len - total) / SECTOR_SIZE);
Probably belongs to the previous patch which renamed bio_split() to
bio_pair_split()? Another thing is, is this renaming really
necessary? If you did,
* s/bio_split()/bio_pair_split().
* introduce better and prettier bio_split() which has
different semantics.
* replace bio_pair_split() users with bio_split().
the renaming would have made sense, but you renamed an existing API,
intrudced a new one and then changed the renamed old API. Doesn't
make too much sense to me.
> diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c
> index 0f31ec4..9fa07c7 100644
> --- a/drivers/md/raid10.c
> +++ b/drivers/md/raid10.c
> @@ -1080,15 +1080,9 @@ static void make_request(struct mddev *mddev, struct bio * bio)
> && (conf->geo.near_copies < conf->geo.raid_disks
> || conf->prev.near_copies < conf->prev.raid_disks))) {
> struct bio_pair *bp;
> - /* Sanity check -- queue functions should prevent this happening */
> - if (bio->bi_vcnt != 1 ||
> - bio->bi_idx != 0)
> - goto bad_map;
> - /* This is a one page bio that upper layers
> - * refuse to split for us, so we need to split it.
> - */
> +
> bp = bio_pair_split(bio,
> - chunk_sects - (bio->bi_sector & (chunk_sects - 1)) );
> + chunk_sects - (bio->bi_sector & (chunk_sects - 1)));
I suppose this one too belongs to the previous rename patch?
> --- a/fs/bio-integrity.c
> +++ b/fs/bio-integrity.c
> @@ -681,50 +681,6 @@ void bio_integrity_trim(struct bio *bio, unsigned int offset,
> EXPORT_SYMBOL(bio_integrity_trim);
>
> /**
> - * bio_integrity_split - Split integrity metadata
> - * @bio: Protected bio
> - * @bp: Resulting bio_pair
> - * @sectors: Offset
> - *
> - * Description: Splits an integrity page into a bio_pair.
> - */
> -void bio_integrity_split(struct bio *bio, struct bio_pair *bp, int sectors)
> -{
> - struct blk_integrity *bi;
> - struct bio_integrity_payload *bip = bio->bi_integrity;
> - unsigned int nr_sectors;
> -
> - if (bio_integrity(bio) == 0)
> - return;
> -
> - bi = bdev_get_integrity(bio->bi_bdev);
> - BUG_ON(bi == NULL);
> - BUG_ON(bip->bip_vcnt != 1);
> -
> - nr_sectors = bio_integrity_hw_sectors(bi, sectors);
> -
> - bp->bio1.bi_integrity = &bp->bip1;
> - bp->bio2.bi_integrity = &bp->bip2;
> -
> - bp->iv1 = bip->bip_vec[0];
> - bp->iv2 = bip->bip_vec[0];
> -
> - bp->bip1.bip_vec[0] = bp->iv1;
> - bp->bip2.bip_vec[0] = bp->iv2;
> -
> - bp->iv1.bv_len = sectors * bi->tuple_size;
> - bp->iv2.bv_offset += sectors * bi->tuple_size;
> - bp->iv2.bv_len -= sectors * bi->tuple_size;
> -
> - bp->bip1.bip_sector = bio->bi_integrity->bip_sector;
> - bp->bip2.bip_sector = bio->bi_integrity->bip_sector + nr_sectors;
> -
> - bp->bip1.bip_vcnt = bp->bip2.bip_vcnt = 1;
> - bp->bip1.bip_idx = bp->bip2.bip_idx = 0;
> -}
> -EXPORT_SYMBOL(bio_integrity_split);
I complained about this in the last posting and in the previous patch.
Please respond. Martin, are you okay with these integrity changes?
> -static void bio_pair_end_1(struct bio *bi, int err)
> +static void bio_pair_end(struct bio *bio, int error)
> {
> - struct bio_pair *bp = container_of(bi, struct bio_pair, bio1);
> + struct bio_pair *bp = bio->bi_private;
>
> - if (err)
> - bp->error = err;
> -
> - bio_pair_release(bp);
> -}
> -
> -static void bio_pair_end_2(struct bio *bi, int err)
> -{
> - struct bio_pair *bp = container_of(bi, struct bio_pair, bio2);
> -
> - if (err)
> - bp->error = err;
> + if (error)
> + clear_bit(BIO_UPTODATE, &bp->orig->bi_flags);
>
> bio_pair_release(bp);
> }
Why is losing error value okay here?
> @@ -1856,8 +1846,7 @@ static int __init init_bio(void)
> if (bioset_integrity_create(fs_bio_set, BIO_POOL_SIZE))
> panic("bio: can't create integrity pool\n");
>
> - bio_split_pool = mempool_create_kmalloc_pool(BIO_SPLIT_ENTRIES,
> - sizeof(struct bio_pair));
> + bio_split_pool = bioset_create(BIO_POOL_SIZE, offsetof(struct bio_pair, split));
> if (!bio_split_pool)
> panic("bio: can't create split pool\n");
It would be nice to mention that using this from stacking drivers is
inherently broken. This is something which has been broken before
this patch but still. bio_split*() should always require separate
biosets.
> diff --git a/include/linux/bio.h b/include/linux/bio.h
> index 1c3bb47..3ad3540 100644
> --- a/include/linux/bio.h
> +++ b/include/linux/bio.h
> @@ -192,14 +192,13 @@ struct bio_integrity_payload {
> * in bio2.bi_private
> */
> struct bio_pair {
> - struct bio bio1, bio2;
> - struct bio_vec bv1, bv2;
> -#if defined(CONFIG_BLK_DEV_INTEGRITY)
> - struct bio_integrity_payload bip1, bip2;
> - struct bio_vec iv1, iv2;
> -#endif
> - atomic_t cnt;
> - int error;
> + atomic_t cnt;
> +
> + bio_end_io_t *bi_end_io;
> + void *bi_private;
> +
> + struct bio *orig;
> + struct bio split;
> };
So, this is struct is allocated as frontpad, which is a pretty unusual
thing to do. Please explain and emphasize that ->split should come
last. Also, given that it's a pair split, it would be nice to somehow
indicate that ->split is the earlier half. Before this change it was
pretty clear with ->bio1/2.
Thanks.
--
tejun
next prev parent reply other threads:[~2012-08-22 21:04 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
[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
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 [this message]
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
2012-08-24 20:42 ` Tejun Heo
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=20120822210410.GL19212@google.com \
--to=tj-dgejt+ai2ygdnm+yrofe0a@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=lars.ellenberg-63ez5xqkn6DQT0dZR+AlfA@public.gmane.org \
--cc=linux-bcache-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=martin.petersen-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
--cc=mpatocka-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=neilb-l3A5Bk7waGM@public.gmane.org \
--cc=petero2-zq6IREYz3ykAvxtiuMwx3w@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.