Browse Source

bio: make freeing of ->bi_io_vec conditional in bio_free()

The empty barrier patches do not carry data, so they have no
iovec attached.

Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Jens Axboe 18 years ago
parent
commit
992c5ddaf1
1 changed files with 6 additions and 3 deletions
  1. 6 3
      fs/bio.c

+ 6 - 3
fs/bio.c

@@ -109,11 +109,14 @@ static inline struct bio_vec *bvec_alloc_bs(gfp_t gfp_mask, int nr, unsigned lon
 
 
 void bio_free(struct bio *bio, struct bio_set *bio_set)
 void bio_free(struct bio *bio, struct bio_set *bio_set)
 {
 {
-	const int pool_idx = BIO_POOL_IDX(bio);
+	if (bio->bi_io_vec) {
+		const int pool_idx = BIO_POOL_IDX(bio);
 
 
-	BIO_BUG_ON(pool_idx >= BIOVEC_NR_POOLS);
+		BIO_BUG_ON(pool_idx >= BIOVEC_NR_POOLS);
+
+		mempool_free(bio->bi_io_vec, bio_set->bvec_pools[pool_idx]);
+	}
 
 
-	mempool_free(bio->bi_io_vec, bio_set->bvec_pools[pool_idx]);
 	mempool_free(bio, bio_set->bio_pool);
 	mempool_free(bio, bio_set->bio_pool);
 }
 }