Skip to content

Commit afeee51

Browse files
koverstreetaxboe
authored andcommitted
md: convert to bioset_init()/mempool_init()
Convert md to embedded bio sets. Signed-off-by: Kent Overstreet <[email protected]> Signed-off-by: Jens Axboe <[email protected]>
1 parent d19936a commit afeee51

File tree

15 files changed

+159
-181
lines changed

15 files changed

+159
-181
lines changed

drivers/md/md-faulty.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ static bool faulty_make_request(struct mddev *mddev, struct bio *bio)
214214
}
215215
}
216216
if (failit) {
217-
struct bio *b = bio_clone_fast(bio, GFP_NOIO, mddev->bio_set);
217+
struct bio *b = bio_clone_fast(bio, GFP_NOIO, &mddev->bio_set);
218218

219219
bio_set_dev(b, conf->rdev->bdev);
220220
b->bi_private = bio;

drivers/md/md-linear.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ static bool linear_make_request(struct mddev *mddev, struct bio *bio)
269269
if (unlikely(bio_end_sector(bio) > end_sector)) {
270270
/* This bio crosses a device boundary, so we have to split it */
271271
struct bio *split = bio_split(bio, end_sector - bio_sector,
272-
GFP_NOIO, mddev->bio_set);
272+
GFP_NOIO, &mddev->bio_set);
273273
bio_chain(split, bio);
274274
generic_make_request(bio);
275275
bio = split;

drivers/md/md-multipath.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ static void multipath_end_bh_io(struct multipath_bh *mp_bh, blk_status_t status)
8080

8181
bio->bi_status = status;
8282
bio_endio(bio);
83-
mempool_free(mp_bh, conf->pool);
83+
mempool_free(mp_bh, &conf->pool);
8484
}
8585

8686
static void multipath_end_request(struct bio *bio)
@@ -117,15 +117,15 @@ static bool multipath_make_request(struct mddev *mddev, struct bio * bio)
117117
return true;
118118
}
119119

120-
mp_bh = mempool_alloc(conf->pool, GFP_NOIO);
120+
mp_bh = mempool_alloc(&conf->pool, GFP_NOIO);
121121

122122
mp_bh->master_bio = bio;
123123
mp_bh->mddev = mddev;
124124

125125
mp_bh->path = multipath_map(conf);
126126
if (mp_bh->path < 0) {
127127
bio_io_error(bio);
128-
mempool_free(mp_bh, conf->pool);
128+
mempool_free(mp_bh, &conf->pool);
129129
return true;
130130
}
131131
multipath = conf->multipaths + mp_bh->path;
@@ -378,6 +378,7 @@ static int multipath_run (struct mddev *mddev)
378378
struct multipath_info *disk;
379379
struct md_rdev *rdev;
380380
int working_disks;
381+
int ret;
381382

382383
if (md_check_no_bitmap(mddev))
383384
return -EINVAL;
@@ -431,9 +432,9 @@ static int multipath_run (struct mddev *mddev)
431432
}
432433
mddev->degraded = conf->raid_disks - working_disks;
433434

434-
conf->pool = mempool_create_kmalloc_pool(NR_RESERVED_BUFS,
435-
sizeof(struct multipath_bh));
436-
if (conf->pool == NULL)
435+
ret = mempool_init_kmalloc_pool(&conf->pool, NR_RESERVED_BUFS,
436+
sizeof(struct multipath_bh));
437+
if (ret)
437438
goto out_free_conf;
438439

439440
mddev->thread = md_register_thread(multipathd, mddev,
@@ -455,7 +456,7 @@ static int multipath_run (struct mddev *mddev)
455456
return 0;
456457

457458
out_free_conf:
458-
mempool_destroy(conf->pool);
459+
mempool_exit(&conf->pool);
459460
kfree(conf->multipaths);
460461
kfree(conf);
461462
mddev->private = NULL;
@@ -467,7 +468,7 @@ static void multipath_free(struct mddev *mddev, void *priv)
467468
{
468469
struct mpconf *conf = priv;
469470

470-
mempool_destroy(conf->pool);
471+
mempool_exit(&conf->pool);
471472
kfree(conf->multipaths);
472473
kfree(conf);
473474
}

drivers/md/md-multipath.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ struct mpconf {
1313
spinlock_t device_lock;
1414
struct list_head retry_list;
1515

16-
mempool_t *pool;
16+
mempool_t pool;
1717
};
1818

1919
/*

drivers/md/md.c

Lines changed: 24 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -193,10 +193,10 @@ struct bio *bio_alloc_mddev(gfp_t gfp_mask, int nr_iovecs,
193193
{
194194
struct bio *b;
195195

196-
if (!mddev || !mddev->bio_set)
196+
if (!mddev || !bioset_initialized(&mddev->bio_set))
197197
return bio_alloc(gfp_mask, nr_iovecs);
198198

199-
b = bio_alloc_bioset(gfp_mask, nr_iovecs, mddev->bio_set);
199+
b = bio_alloc_bioset(gfp_mask, nr_iovecs, &mddev->bio_set);
200200
if (!b)
201201
return NULL;
202202
return b;
@@ -205,10 +205,10 @@ EXPORT_SYMBOL_GPL(bio_alloc_mddev);
205205

206206
static struct bio *md_bio_alloc_sync(struct mddev *mddev)
207207
{
208-
if (!mddev || !mddev->sync_set)
208+
if (!mddev || !bioset_initialized(&mddev->sync_set))
209209
return bio_alloc(GFP_NOIO, 1);
210210

211-
return bio_alloc_bioset(GFP_NOIO, 1, mddev->sync_set);
211+
return bio_alloc_bioset(GFP_NOIO, 1, &mddev->sync_set);
212212
}
213213

214214
/*
@@ -510,7 +510,10 @@ static void mddev_delayed_delete(struct work_struct *ws);
510510

511511
static void mddev_put(struct mddev *mddev)
512512
{
513-
struct bio_set *bs = NULL, *sync_bs = NULL;
513+
struct bio_set bs, sync_bs;
514+
515+
memset(&bs, 0, sizeof(bs));
516+
memset(&sync_bs, 0, sizeof(sync_bs));
514517

515518
if (!atomic_dec_and_lock(&mddev->active, &all_mddevs_lock))
516519
return;
@@ -521,8 +524,8 @@ static void mddev_put(struct mddev *mddev)
521524
list_del_init(&mddev->all_mddevs);
522525
bs = mddev->bio_set;
523526
sync_bs = mddev->sync_set;
524-
mddev->bio_set = NULL;
525-
mddev->sync_set = NULL;
527+
memset(&mddev->bio_set, 0, sizeof(mddev->bio_set));
528+
memset(&mddev->sync_set, 0, sizeof(mddev->sync_set));
526529
if (mddev->gendisk) {
527530
/* We did a probe so need to clean up. Call
528531
* queue_work inside the spinlock so that
@@ -535,10 +538,8 @@ static void mddev_put(struct mddev *mddev)
535538
kfree(mddev);
536539
}
537540
spin_unlock(&all_mddevs_lock);
538-
if (bs)
539-
bioset_free(bs);
540-
if (sync_bs)
541-
bioset_free(sync_bs);
541+
bioset_exit(&bs);
542+
bioset_exit(&sync_bs);
542543
}
543544

544545
static void md_safemode_timeout(struct timer_list *t);
@@ -2123,7 +2124,7 @@ int md_integrity_register(struct mddev *mddev)
21232124
bdev_get_integrity(reference->bdev));
21242125

21252126
pr_debug("md: data integrity enabled on %s\n", mdname(mddev));
2126-
if (bioset_integrity_create(mddev->bio_set, BIO_POOL_SIZE)) {
2127+
if (bioset_integrity_create(&mddev->bio_set, BIO_POOL_SIZE)) {
21272128
pr_err("md: failed to create integrity pool for %s\n",
21282129
mdname(mddev));
21292130
return -EINVAL;
@@ -5497,17 +5498,15 @@ int md_run(struct mddev *mddev)
54975498
sysfs_notify_dirent_safe(rdev->sysfs_state);
54985499
}
54995500

5500-
if (mddev->bio_set == NULL) {
5501-
mddev->bio_set = bioset_create(BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
5502-
if (!mddev->bio_set)
5503-
return -ENOMEM;
5501+
if (!bioset_initialized(&mddev->bio_set)) {
5502+
err = bioset_init(&mddev->bio_set, BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
5503+
if (err)
5504+
return err;
55045505
}
5505-
if (mddev->sync_set == NULL) {
5506-
mddev->sync_set = bioset_create(BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
5507-
if (!mddev->sync_set) {
5508-
err = -ENOMEM;
5506+
if (!bioset_initialized(&mddev->sync_set)) {
5507+
err = bioset_init(&mddev->sync_set, BIO_POOL_SIZE, 0, BIOSET_NEED_BVECS);
5508+
if (err)
55095509
goto abort;
5510-
}
55115510
}
55125511

55135512
spin_lock(&pers_lock);
@@ -5668,14 +5667,8 @@ int md_run(struct mddev *mddev)
56685667
return 0;
56695668

56705669
abort:
5671-
if (mddev->bio_set) {
5672-
bioset_free(mddev->bio_set);
5673-
mddev->bio_set = NULL;
5674-
}
5675-
if (mddev->sync_set) {
5676-
bioset_free(mddev->sync_set);
5677-
mddev->sync_set = NULL;
5678-
}
5670+
bioset_exit(&mddev->bio_set);
5671+
bioset_exit(&mddev->sync_set);
56795672

56805673
return err;
56815674
}
@@ -5888,14 +5881,8 @@ void md_stop(struct mddev *mddev)
58885881
* This is called from dm-raid
58895882
*/
58905883
__md_stop(mddev);
5891-
if (mddev->bio_set) {
5892-
bioset_free(mddev->bio_set);
5893-
mddev->bio_set = NULL;
5894-
}
5895-
if (mddev->sync_set) {
5896-
bioset_free(mddev->sync_set);
5897-
mddev->sync_set = NULL;
5898-
}
5884+
bioset_exit(&mddev->bio_set);
5885+
bioset_exit(&mddev->sync_set);
58995886
}
59005887

59015888
EXPORT_SYMBOL_GPL(md_stop);

drivers/md/md.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -452,8 +452,8 @@ struct mddev {
452452

453453
struct attribute_group *to_remove;
454454

455-
struct bio_set *bio_set;
456-
struct bio_set *sync_set; /* for sync operations like
455+
struct bio_set bio_set;
456+
struct bio_set sync_set; /* for sync operations like
457457
* metadata and bitmap writes
458458
*/
459459

drivers/md/raid0.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ static void raid0_handle_discard(struct mddev *mddev, struct bio *bio)
479479
if (bio_end_sector(bio) > zone->zone_end) {
480480
struct bio *split = bio_split(bio,
481481
zone->zone_end - bio->bi_iter.bi_sector, GFP_NOIO,
482-
mddev->bio_set);
482+
&mddev->bio_set);
483483
bio_chain(split, bio);
484484
generic_make_request(bio);
485485
bio = split;
@@ -582,7 +582,8 @@ static bool raid0_make_request(struct mddev *mddev, struct bio *bio)
582582
sector = bio_sector;
583583

584584
if (sectors < bio_sectors(bio)) {
585-
struct bio *split = bio_split(bio, sectors, GFP_NOIO, mddev->bio_set);
585+
struct bio *split = bio_split(bio, sectors, GFP_NOIO,
586+
&mddev->bio_set);
586587
bio_chain(split, bio);
587588
generic_make_request(bio);
588589
bio = split;

0 commit comments

Comments
 (0)