On 07/24/2012 11:11 PM, Kent Overstreet wrote: ACK-by: Boaz Harrosh <bharrosh@xxxxxxxxxxx> > Signed-off-by: Kent Overstreet <koverstreet@xxxxxxxxxx> Thanks looks nice > --- > drivers/block/osdblk.c | 3 +-- > fs/bio.c | 13 +++++++++++++ > fs/exofs/ore.c | 5 ++--- > include/linux/bio.h | 1 + > 4 files changed, 17 insertions(+), 5 deletions(-) > > diff --git a/drivers/block/osdblk.c b/drivers/block/osdblk.c > index 87311eb..1bbc681 100644 > --- a/drivers/block/osdblk.c > +++ b/drivers/block/osdblk.c > @@ -266,11 +266,10 @@ static struct bio *bio_chain_clone(struct bio *old_chain, gfp_t gfpmask) > struct bio *tmp, *new_chain = NULL, *tail = NULL; > > while (old_chain) { > - tmp = bio_kmalloc(gfpmask, old_chain->bi_max_vecs); > + tmp = bio_clone_kmalloc(old_chain, gfpmask); > if (!tmp) > goto err_out; > > - __bio_clone(tmp, old_chain); > tmp->bi_bdev = NULL; > gfpmask &= ~__GFP_WAIT; > tmp->bi_next = NULL; > diff --git a/fs/bio.c b/fs/bio.c > index fa6dee4..9d0ceb2 100644 > --- a/fs/bio.c > +++ b/fs/bio.c > @@ -499,6 +499,19 @@ struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask) > } > EXPORT_SYMBOL(bio_clone); > > +struct bio *bio_clone_kmalloc(struct bio *bio, gfp_t gfp_mask) > +{ > + struct bio *b = bio_kmalloc(gfp_mask, bio->bi_max_vecs); > + > + if (!b) > + return NULL; > + > + __bio_clone(b, bio); > + > + return b; > +} > +EXPORT_SYMBOL(bio_clone_kmalloc); > + > /** > * bio_get_nr_vecs - return approx number of vecs > * @bdev: I/O target > diff --git a/fs/exofs/ore.c b/fs/exofs/ore.c > index 24a49d4..a8d92fc 100644 > --- a/fs/exofs/ore.c > +++ b/fs/exofs/ore.c > @@ -814,8 +814,8 @@ static int _write_mirror(struct ore_io_state *ios, int cur_comp) > struct bio *bio; > > if (per_dev != master_dev) { > - bio = bio_kmalloc(GFP_KERNEL, > - master_dev->bio->bi_max_vecs); > + bio = bio_clone_kmalloc(master_dev->bio, > + GFP_KERNEL); > if (unlikely(!bio)) { > ORE_DBGMSG( > "Failed to allocate BIO size=%u\n", > @@ -824,7 +824,6 @@ static int _write_mirror(struct ore_io_state *ios, int cur_comp) > goto out; > } > > - __bio_clone(bio, master_dev->bio); > bio->bi_bdev = NULL; > bio->bi_next = NULL; > per_dev->offset = master_dev->offset; > diff --git a/include/linux/bio.h b/include/linux/bio.h > index 9720544..e180f1d 100644 > --- a/include/linux/bio.h > +++ b/include/linux/bio.h > @@ -221,6 +221,7 @@ extern int bio_phys_segments(struct request_queue *, struct bio *); > > extern void __bio_clone(struct bio *, struct bio *); > extern struct bio *bio_clone(struct bio *, gfp_t); > +struct bio *bio_clone_kmalloc(struct bio *, gfp_t); > > extern void bio_init(struct bio *); > extern void bio_reset(struct bio *); -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel