md: convert to bioset_init()/mempool_init()
Convert md to embedded bio sets. 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
d19936a266
commit
afeee514ce
@@ -291,14 +291,14 @@ static void free_r10bio(struct r10bio *r10_bio)
|
||||
struct r10conf *conf = r10_bio->mddev->private;
|
||||
|
||||
put_all_bios(conf, r10_bio);
|
||||
mempool_free(r10_bio, conf->r10bio_pool);
|
||||
mempool_free(r10_bio, &conf->r10bio_pool);
|
||||
}
|
||||
|
||||
static void put_buf(struct r10bio *r10_bio)
|
||||
{
|
||||
struct r10conf *conf = r10_bio->mddev->private;
|
||||
|
||||
mempool_free(r10_bio, conf->r10buf_pool);
|
||||
mempool_free(r10_bio, &conf->r10buf_pool);
|
||||
|
||||
lower_barrier(conf);
|
||||
}
|
||||
@@ -1204,7 +1204,7 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
|
||||
(unsigned long long)r10_bio->sector);
|
||||
if (max_sectors < bio_sectors(bio)) {
|
||||
struct bio *split = bio_split(bio, max_sectors,
|
||||
gfp, conf->bio_split);
|
||||
gfp, &conf->bio_split);
|
||||
bio_chain(split, bio);
|
||||
generic_make_request(bio);
|
||||
bio = split;
|
||||
@@ -1213,7 +1213,7 @@ static void raid10_read_request(struct mddev *mddev, struct bio *bio,
|
||||
}
|
||||
slot = r10_bio->read_slot;
|
||||
|
||||
read_bio = bio_clone_fast(bio, gfp, mddev->bio_set);
|
||||
read_bio = bio_clone_fast(bio, gfp, &mddev->bio_set);
|
||||
|
||||
r10_bio->devs[slot].bio = read_bio;
|
||||
r10_bio->devs[slot].rdev = rdev;
|
||||
@@ -1261,7 +1261,7 @@ static void raid10_write_one_disk(struct mddev *mddev, struct r10bio *r10_bio,
|
||||
} else
|
||||
rdev = conf->mirrors[devnum].rdev;
|
||||
|
||||
mbio = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set);
|
||||
mbio = bio_clone_fast(bio, GFP_NOIO, &mddev->bio_set);
|
||||
if (replacement)
|
||||
r10_bio->devs[n_copy].repl_bio = mbio;
|
||||
else
|
||||
@@ -1509,7 +1509,7 @@ retry_write:
|
||||
|
||||
if (r10_bio->sectors < bio_sectors(bio)) {
|
||||
struct bio *split = bio_split(bio, r10_bio->sectors,
|
||||
GFP_NOIO, conf->bio_split);
|
||||
GFP_NOIO, &conf->bio_split);
|
||||
bio_chain(split, bio);
|
||||
generic_make_request(bio);
|
||||
bio = split;
|
||||
@@ -1533,7 +1533,7 @@ static void __make_request(struct mddev *mddev, struct bio *bio, int sectors)
|
||||
struct r10conf *conf = mddev->private;
|
||||
struct r10bio *r10_bio;
|
||||
|
||||
r10_bio = mempool_alloc(conf->r10bio_pool, GFP_NOIO);
|
||||
r10_bio = mempool_alloc(&conf->r10bio_pool, GFP_NOIO);
|
||||
|
||||
r10_bio->master_bio = bio;
|
||||
r10_bio->sectors = sectors;
|
||||
@@ -1732,8 +1732,7 @@ static void close_sync(struct r10conf *conf)
|
||||
wait_barrier(conf);
|
||||
allow_barrier(conf);
|
||||
|
||||
mempool_destroy(conf->r10buf_pool);
|
||||
conf->r10buf_pool = NULL;
|
||||
mempool_exit(&conf->r10buf_pool);
|
||||
}
|
||||
|
||||
static int raid10_spare_active(struct mddev *mddev)
|
||||
@@ -2583,7 +2582,7 @@ static int narrow_write_error(struct r10bio *r10_bio, int i)
|
||||
if (sectors > sect_to_write)
|
||||
sectors = sect_to_write;
|
||||
/* Write at 'sector' for 'sectors' */
|
||||
wbio = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set);
|
||||
wbio = bio_clone_fast(bio, GFP_NOIO, &mddev->bio_set);
|
||||
bio_trim(wbio, sector - bio->bi_iter.bi_sector, sectors);
|
||||
wsector = r10_bio->devs[i].addr + (sector - r10_bio->sector);
|
||||
wbio->bi_iter.bi_sector = wsector +
|
||||
@@ -2816,25 +2815,25 @@ static void raid10d(struct md_thread *thread)
|
||||
|
||||
static int init_resync(struct r10conf *conf)
|
||||
{
|
||||
int buffs;
|
||||
int i;
|
||||
int ret, buffs, i;
|
||||
|
||||
buffs = RESYNC_WINDOW / RESYNC_BLOCK_SIZE;
|
||||
BUG_ON(conf->r10buf_pool);
|
||||
BUG_ON(mempool_initialized(&conf->r10buf_pool));
|
||||
conf->have_replacement = 0;
|
||||
for (i = 0; i < conf->geo.raid_disks; i++)
|
||||
if (conf->mirrors[i].replacement)
|
||||
conf->have_replacement = 1;
|
||||
conf->r10buf_pool = mempool_create(buffs, r10buf_pool_alloc, r10buf_pool_free, conf);
|
||||
if (!conf->r10buf_pool)
|
||||
return -ENOMEM;
|
||||
ret = mempool_init(&conf->r10buf_pool, buffs,
|
||||
r10buf_pool_alloc, r10buf_pool_free, conf);
|
||||
if (ret)
|
||||
return ret;
|
||||
conf->next_resync = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct r10bio *raid10_alloc_init_r10buf(struct r10conf *conf)
|
||||
{
|
||||
struct r10bio *r10bio = mempool_alloc(conf->r10buf_pool, GFP_NOIO);
|
||||
struct r10bio *r10bio = mempool_alloc(&conf->r10buf_pool, GFP_NOIO);
|
||||
struct rsync_pages *rp;
|
||||
struct bio *bio;
|
||||
int nalloc;
|
||||
@@ -2945,7 +2944,7 @@ static sector_t raid10_sync_request(struct mddev *mddev, sector_t sector_nr,
|
||||
sector_t chunk_mask = conf->geo.chunk_mask;
|
||||
int page_idx = 0;
|
||||
|
||||
if (!conf->r10buf_pool)
|
||||
if (!mempool_initialized(&conf->r10buf_pool))
|
||||
if (init_resync(conf))
|
||||
return 0;
|
||||
|
||||
@@ -3699,13 +3698,13 @@ static struct r10conf *setup_conf(struct mddev *mddev)
|
||||
|
||||
conf->geo = geo;
|
||||
conf->copies = copies;
|
||||
conf->r10bio_pool = mempool_create(NR_RAID10_BIOS, r10bio_pool_alloc,
|
||||
r10bio_pool_free, conf);
|
||||
if (!conf->r10bio_pool)
|
||||
err = mempool_init(&conf->r10bio_pool, NR_RAID10_BIOS, r10bio_pool_alloc,
|
||||
r10bio_pool_free, conf);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
conf->bio_split = bioset_create(BIO_POOL_SIZE, 0, 0);
|
||||
if (!conf->bio_split)
|
||||
err = bioset_init(&conf->bio_split, BIO_POOL_SIZE, 0, 0);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
calc_sectors(conf, mddev->dev_sectors);
|
||||
@@ -3733,6 +3732,7 @@ static struct r10conf *setup_conf(struct mddev *mddev)
|
||||
init_waitqueue_head(&conf->wait_barrier);
|
||||
atomic_set(&conf->nr_pending, 0);
|
||||
|
||||
err = -ENOMEM;
|
||||
conf->thread = md_register_thread(raid10d, mddev, "raid10");
|
||||
if (!conf->thread)
|
||||
goto out;
|
||||
@@ -3742,11 +3742,10 @@ static struct r10conf *setup_conf(struct mddev *mddev)
|
||||
|
||||
out:
|
||||
if (conf) {
|
||||
mempool_destroy(conf->r10bio_pool);
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
kfree(conf->mirrors);
|
||||
safe_put_page(conf->tmppage);
|
||||
if (conf->bio_split)
|
||||
bioset_free(conf->bio_split);
|
||||
bioset_exit(&conf->bio_split);
|
||||
kfree(conf);
|
||||
}
|
||||
return ERR_PTR(err);
|
||||
@@ -3953,7 +3952,7 @@ static int raid10_run(struct mddev *mddev)
|
||||
|
||||
out_free_conf:
|
||||
md_unregister_thread(&mddev->thread);
|
||||
mempool_destroy(conf->r10bio_pool);
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
safe_put_page(conf->tmppage);
|
||||
kfree(conf->mirrors);
|
||||
kfree(conf);
|
||||
@@ -3966,13 +3965,12 @@ static void raid10_free(struct mddev *mddev, void *priv)
|
||||
{
|
||||
struct r10conf *conf = priv;
|
||||
|
||||
mempool_destroy(conf->r10bio_pool);
|
||||
mempool_exit(&conf->r10bio_pool);
|
||||
safe_put_page(conf->tmppage);
|
||||
kfree(conf->mirrors);
|
||||
kfree(conf->mirrors_old);
|
||||
kfree(conf->mirrors_new);
|
||||
if (conf->bio_split)
|
||||
bioset_free(conf->bio_split);
|
||||
bioset_exit(&conf->bio_split);
|
||||
kfree(conf);
|
||||
}
|
||||
|
||||
@@ -4543,7 +4541,7 @@ read_more:
|
||||
* on all the target devices.
|
||||
*/
|
||||
// FIXME
|
||||
mempool_free(r10_bio, conf->r10buf_pool);
|
||||
mempool_free(r10_bio, &conf->r10buf_pool);
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
return sectors_done;
|
||||
}
|
||||
|
Reference in New Issue
Block a user