dm: convert to bioset_init()/mempool_init()
Convert dm to embedded bio sets. Acked-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:

committed by
Jens Axboe

parent
afeee514ce
commit
6f1c819c21
@@ -148,8 +148,8 @@ static int dm_numa_node = DM_NUMA_NODE;
|
||||
* For mempools pre-allocation at the table loading time.
|
||||
*/
|
||||
struct dm_md_mempools {
|
||||
struct bio_set *bs;
|
||||
struct bio_set *io_bs;
|
||||
struct bio_set bs;
|
||||
struct bio_set io_bs;
|
||||
};
|
||||
|
||||
struct table_device {
|
||||
@@ -537,7 +537,7 @@ static struct dm_io *alloc_io(struct mapped_device *md, struct bio *bio)
|
||||
struct dm_target_io *tio;
|
||||
struct bio *clone;
|
||||
|
||||
clone = bio_alloc_bioset(GFP_NOIO, 0, md->io_bs);
|
||||
clone = bio_alloc_bioset(GFP_NOIO, 0, &md->io_bs);
|
||||
if (!clone)
|
||||
return NULL;
|
||||
|
||||
@@ -572,7 +572,7 @@ static struct dm_target_io *alloc_tio(struct clone_info *ci, struct dm_target *t
|
||||
/* the dm_target_io embedded in ci->io is available */
|
||||
tio = &ci->io->tio;
|
||||
} else {
|
||||
struct bio *clone = bio_alloc_bioset(gfp_mask, 0, ci->io->md->bs);
|
||||
struct bio *clone = bio_alloc_bioset(gfp_mask, 0, &ci->io->md->bs);
|
||||
if (!clone)
|
||||
return NULL;
|
||||
|
||||
@@ -1784,10 +1784,8 @@ static void cleanup_mapped_device(struct mapped_device *md)
|
||||
destroy_workqueue(md->wq);
|
||||
if (md->kworker_task)
|
||||
kthread_stop(md->kworker_task);
|
||||
if (md->bs)
|
||||
bioset_free(md->bs);
|
||||
if (md->io_bs)
|
||||
bioset_free(md->io_bs);
|
||||
bioset_exit(&md->bs);
|
||||
bioset_exit(&md->io_bs);
|
||||
|
||||
if (md->dax_dev) {
|
||||
kill_dax(md->dax_dev);
|
||||
@@ -1964,16 +1962,10 @@ static void __bind_mempools(struct mapped_device *md, struct dm_table *t)
|
||||
* If so, reload bioset because front_pad may have changed
|
||||
* because a different table was loaded.
|
||||
*/
|
||||
if (md->bs) {
|
||||
bioset_free(md->bs);
|
||||
md->bs = NULL;
|
||||
}
|
||||
if (md->io_bs) {
|
||||
bioset_free(md->io_bs);
|
||||
md->io_bs = NULL;
|
||||
}
|
||||
bioset_exit(&md->bs);
|
||||
bioset_exit(&md->io_bs);
|
||||
|
||||
} else if (md->bs) {
|
||||
} else if (bioset_initialized(&md->bs)) {
|
||||
/*
|
||||
* There's no need to reload with request-based dm
|
||||
* because the size of front_pad doesn't change.
|
||||
@@ -1985,12 +1977,14 @@ static void __bind_mempools(struct mapped_device *md, struct dm_table *t)
|
||||
goto out;
|
||||
}
|
||||
|
||||
BUG_ON(!p || md->bs || md->io_bs);
|
||||
BUG_ON(!p ||
|
||||
bioset_initialized(&md->bs) ||
|
||||
bioset_initialized(&md->io_bs));
|
||||
|
||||
md->bs = p->bs;
|
||||
p->bs = NULL;
|
||||
memset(&p->bs, 0, sizeof(p->bs));
|
||||
md->io_bs = p->io_bs;
|
||||
p->io_bs = NULL;
|
||||
memset(&p->io_bs, 0, sizeof(p->io_bs));
|
||||
out:
|
||||
/* mempool bind completed, no longer need any mempools in the table */
|
||||
dm_table_free_md_mempools(t);
|
||||
@@ -2904,6 +2898,7 @@ struct dm_md_mempools *dm_alloc_md_mempools(struct mapped_device *md, enum dm_qu
|
||||
struct dm_md_mempools *pools = kzalloc_node(sizeof(*pools), GFP_KERNEL, md->numa_node_id);
|
||||
unsigned int pool_size = 0;
|
||||
unsigned int front_pad, io_front_pad;
|
||||
int ret;
|
||||
|
||||
if (!pools)
|
||||
return NULL;
|
||||
@@ -2915,10 +2910,10 @@ struct dm_md_mempools *dm_alloc_md_mempools(struct mapped_device *md, enum dm_qu
|
||||
pool_size = max(dm_get_reserved_bio_based_ios(), min_pool_size);
|
||||
front_pad = roundup(per_io_data_size, __alignof__(struct dm_target_io)) + offsetof(struct dm_target_io, clone);
|
||||
io_front_pad = roundup(front_pad, __alignof__(struct dm_io)) + offsetof(struct dm_io, tio);
|
||||
pools->io_bs = bioset_create(pool_size, io_front_pad, 0);
|
||||
if (!pools->io_bs)
|
||||
ret = bioset_init(&pools->io_bs, pool_size, io_front_pad, 0);
|
||||
if (ret)
|
||||
goto out;
|
||||
if (integrity && bioset_integrity_create(pools->io_bs, pool_size))
|
||||
if (integrity && bioset_integrity_create(&pools->io_bs, pool_size))
|
||||
goto out;
|
||||
break;
|
||||
case DM_TYPE_REQUEST_BASED:
|
||||
@@ -2931,11 +2926,11 @@ struct dm_md_mempools *dm_alloc_md_mempools(struct mapped_device *md, enum dm_qu
|
||||
BUG();
|
||||
}
|
||||
|
||||
pools->bs = bioset_create(pool_size, front_pad, 0);
|
||||
if (!pools->bs)
|
||||
ret = bioset_init(&pools->bs, pool_size, front_pad, 0);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
if (integrity && bioset_integrity_create(pools->bs, pool_size))
|
||||
if (integrity && bioset_integrity_create(&pools->bs, pool_size))
|
||||
goto out;
|
||||
|
||||
return pools;
|
||||
@@ -2951,10 +2946,8 @@ void dm_free_md_mempools(struct dm_md_mempools *pools)
|
||||
if (!pools)
|
||||
return;
|
||||
|
||||
if (pools->bs)
|
||||
bioset_free(pools->bs);
|
||||
if (pools->io_bs)
|
||||
bioset_free(pools->io_bs);
|
||||
bioset_exit(&pools->bs);
|
||||
bioset_exit(&pools->io_bs);
|
||||
|
||||
kfree(pools);
|
||||
}
|
||||
|
Reference in New Issue
Block a user