aboutsummaryrefslogtreecommitdiffstats
path: root/fs/bio.c
diff options
context:
space:
mode:
authorMartin K. Petersen <martin.petersen@oracle.com>2009-03-10 03:27:39 -0400
committerJens Axboe <jens.axboe@oracle.com>2009-03-24 07:35:17 -0400
commit6d2a78e783416ba99e36beb1d4395b785b34e867 (patch)
tree5e1b772cfbfb8b5d089a9808a0232749f7ddf8be /fs/bio.c
parent32ca163c9cdb33151d79e95a7cf244f62b5d4418 (diff)
block: add private bio_set for bio integrity allocations
The integrity bio allocation needs its own bio_set to avoid violating the mempool allocation rules and risking deadlocks. Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'fs/bio.c')
-rw-r--r--fs/bio.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/fs/bio.c b/fs/bio.c
index 9cc1430b4495..a040cde7f6fd 100644
--- a/fs/bio.c
+++ b/fs/bio.c
@@ -248,7 +248,7 @@ void bio_free(struct bio *bio, struct bio_set *bs)
248 bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio)); 248 bvec_free_bs(bs, bio->bi_io_vec, BIO_POOL_IDX(bio));
249 249
250 if (bio_integrity(bio)) 250 if (bio_integrity(bio))
251 bio_integrity_free(bio, bs); 251 bio_integrity_free(bio);
252 252
253 /* 253 /*
254 * If we have front padding, adjust the bio pointer before freeing 254 * If we have front padding, adjust the bio pointer before freeing
@@ -466,7 +466,7 @@ struct bio *bio_clone(struct bio *bio, gfp_t gfp_mask)
466 if (bio_integrity(bio)) { 466 if (bio_integrity(bio)) {
467 int ret; 467 int ret;
468 468
469 ret = bio_integrity_clone(b, bio, gfp_mask, fs_bio_set); 469 ret = bio_integrity_clone(b, bio, gfp_mask);
470 470
471 if (ret < 0) { 471 if (ret < 0) {
472 bio_put(b); 472 bio_put(b);
@@ -1529,7 +1529,6 @@ void bioset_free(struct bio_set *bs)
1529 if (bs->bio_pool) 1529 if (bs->bio_pool)
1530 mempool_destroy(bs->bio_pool); 1530 mempool_destroy(bs->bio_pool);
1531 1531
1532 bioset_integrity_free(bs);
1533 biovec_free_pools(bs); 1532 biovec_free_pools(bs);
1534 bio_put_slab(bs); 1533 bio_put_slab(bs);
1535 1534
@@ -1570,9 +1569,6 @@ struct bio_set *bioset_create(unsigned int pool_size, unsigned int front_pad)
1570 if (!bs->bio_pool) 1569 if (!bs->bio_pool)
1571 goto bad; 1570 goto bad;
1572 1571
1573 if (bioset_integrity_create(bs, pool_size))
1574 goto bad;
1575
1576 if (!biovec_create_pools(bs, pool_size)) 1572 if (!biovec_create_pools(bs, pool_size))
1577 return bs; 1573 return bs;
1578 1574
@@ -1610,7 +1606,6 @@ static int __init init_bio(void)
1610 if (!bio_slabs) 1606 if (!bio_slabs)
1611 panic("bio: can't allocate bios\n"); 1607 panic("bio: can't allocate bios\n");
1612 1608
1613 bio_integrity_init_slab();
1614 biovec_init_slabs(); 1609 biovec_init_slabs();
1615 1610
1616 fs_bio_set = bioset_create(BIO_POOL_SIZE, 0); 1611 fs_bio_set = bioset_create(BIO_POOL_SIZE, 0);