Sorry to bother you, since I have missed the nr_iovecs in bio_clone_fast. Nacked this patch. Thanks Minfei On 12/18/15 at 11:02P, Minfei Huang wrote: > This is a memory leaking during splitting the bio by the caller > bio_clone_fast. > > Clone bio may allocate its own bvec, if demanding bvec is more than > inline bvec in function bio_alloc_bioset. > > bi_io_vec is assigned to the source bio's bvec directly without freeing > it firstly in function __bio_clone_fast. > > To fix it, freeing the own bvec firstly before assigning the source > bio's bvec. > > Signed-off-by: Minfei Huang <mnfhuang@xxxxxxxxx> > --- > block/bio.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/block/bio.c b/block/bio.c > index 70d9814..b24fd6e 100644 > --- a/block/bio.c > +++ b/block/bio.c > @@ -581,6 +581,10 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) > bio_set_flag(bio, BIO_CLONED); > bio->bi_rw = bio_src->bi_rw; > bio->bi_iter = bio_src->bi_iter; > + > + if (bio_flagged(bio, BIO_OWNS_VEC)) > + bvec_free(bio->bi_pool->bvec_pool, > + bio->bi_io_vec, BIO_POOL_IDX(bio)); > bio->bi_io_vec = bio_src->bi_io_vec; > } > EXPORT_SYMBOL(__bio_clone_fast); > -- > 2.6.3 > -- To unsubscribe from this list: send the line "unsubscribe linux-block" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html