From: Greg Edwards Date: Wed, 8 Aug 2018 19:27:53 +0000 (-0600) Subject: block: bvec_nr_vecs() returns value for wrong slab X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=d6c02a9beb67f13d5f14f23e72fa9981e8b84477;p=linux.git block: bvec_nr_vecs() returns value for wrong slab In commit ed996a52c868 ("block: simplify and cleanup bvec pool handling"), the value of the slab index is incremented by one in bvec_alloc() after the allocation is done to indicate an index value of 0 does not need to be later freed. bvec_nr_vecs() was not updated accordingly, and thus returns the wrong value. Decrement idx before performing the lookup. Fixes: ed996a52c868 ("block: simplify and cleanup bvec pool handling") Signed-off-by: Greg Edwards Signed-off-by: Jens Axboe --- diff --git a/block/bio.c b/block/bio.c index b832151cd0bf4..04969b392c72d 100644 --- a/block/bio.c +++ b/block/bio.c @@ -158,7 +158,7 @@ out: unsigned int bvec_nr_vecs(unsigned short idx) { - return bvec_slabs[idx].nr_vecs; + return bvec_slabs[--idx].nr_vecs; } void bvec_free(mempool_t *pool, struct bio_vec *bv, unsigned int idx)