Skip to content

Commit b4128c0

Browse files
YuKuai-huaweiliu-song-6
authored andcommitted
md: cleanup mddev_create/destroy_serial_pool()
Now that except for stopping the array, all the callers already suspend the array, there is no need to suspend anymore, hence remove the second parameter. Signed-off-by: Yu Kuai <yukuai3@huawei.com> Signed-off-by: Song Liu <song@kernel.org> Link: https://lore.kernel.org/r/20231010151958.145896-15-yukuai1@huaweicloud.com
1 parent 5822694 commit b4128c0

3 files changed

Lines changed: 17 additions & 31 deletions

File tree

drivers/md/md-bitmap.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1861,7 +1861,7 @@ void md_bitmap_destroy(struct mddev *mddev)
18611861

18621862
md_bitmap_wait_behind_writes(mddev);
18631863
if (!mddev->serialize_policy)
1864-
mddev_destroy_serial_pool(mddev, NULL, true);
1864+
mddev_destroy_serial_pool(mddev, NULL);
18651865

18661866
mutex_lock(&mddev->bitmap_info.mutex);
18671867
spin_lock(&mddev->lock);
@@ -1977,7 +1977,7 @@ int md_bitmap_load(struct mddev *mddev)
19771977
goto out;
19781978

19791979
rdev_for_each(rdev, mddev)
1980-
mddev_create_serial_pool(mddev, rdev, true);
1980+
mddev_create_serial_pool(mddev, rdev);
19811981

19821982
if (mddev_is_clustered(mddev))
19831983
md_cluster_ops->load_bitmaps(mddev, mddev->bitmap_info.nodes);
@@ -2562,11 +2562,11 @@ backlog_store(struct mddev *mddev, const char *buf, size_t len)
25622562
if (!backlog && mddev->serial_info_pool) {
25632563
/* serial_info_pool is not needed if backlog is zero */
25642564
if (!mddev->serialize_policy)
2565-
mddev_destroy_serial_pool(mddev, NULL, true);
2565+
mddev_destroy_serial_pool(mddev, NULL);
25662566
} else if (backlog && !mddev->serial_info_pool) {
25672567
/* serial_info_pool is needed since backlog is not zero */
25682568
rdev_for_each(rdev, mddev)
2569-
mddev_create_serial_pool(mddev, rdev, true);
2569+
mddev_create_serial_pool(mddev, rdev);
25702570
}
25712571
if (old_mwb != backlog)
25722572
md_bitmap_update_sb(mddev->bitmap);

drivers/md/md.c

Lines changed: 10 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -206,24 +206,20 @@ static int rdev_need_serial(struct md_rdev *rdev)
206206
* 1. rdev is the first device which return true from rdev_enable_serial.
207207
* 2. rdev is NULL, means we want to enable serialization for all rdevs.
208208
*/
209-
void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
210-
bool is_suspend)
209+
void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
211210
{
212211
int ret = 0;
213212

214213
if (rdev && !rdev_need_serial(rdev) &&
215214
!test_bit(CollisionCheck, &rdev->flags))
216215
return;
217216

218-
if (!is_suspend)
219-
mddev_suspend(mddev);
220-
221217
if (!rdev)
222218
ret = rdevs_init_serial(mddev);
223219
else
224220
ret = rdev_init_serial(rdev);
225221
if (ret)
226-
goto abort;
222+
return;
227223

228224
if (mddev->serial_info_pool == NULL) {
229225
/*
@@ -238,10 +234,6 @@ void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
238234
pr_err("can't alloc memory pool for serialization\n");
239235
}
240236
}
241-
242-
abort:
243-
if (!is_suspend)
244-
mddev_resume(mddev);
245237
}
246238

247239
/*
@@ -250,8 +242,7 @@ void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
250242
* 2. when bitmap is destroyed while policy is not enabled.
251243
* 3. for disable policy, the pool is destroyed only when no rdev needs it.
252244
*/
253-
void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
254-
bool is_suspend)
245+
void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev)
255246
{
256247
if (rdev && !test_bit(CollisionCheck, &rdev->flags))
257248
return;
@@ -260,8 +251,6 @@ void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
260251
struct md_rdev *temp;
261252
int num = 0; /* used to track if other rdevs need the pool */
262253

263-
if (!is_suspend)
264-
mddev_suspend(mddev);
265254
rdev_for_each(temp, mddev) {
266255
if (!rdev) {
267256
if (!mddev->serialize_policy ||
@@ -283,8 +272,6 @@ void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
283272
mempool_destroy(mddev->serial_info_pool);
284273
mddev->serial_info_pool = NULL;
285274
}
286-
if (!is_suspend)
287-
mddev_resume(mddev);
288275
}
289276
}
290277

@@ -2557,7 +2544,7 @@ static int bind_rdev_to_array(struct md_rdev *rdev, struct mddev *mddev)
25572544
pr_debug("md: bind<%s>\n", b);
25582545

25592546
if (mddev->raid_disks)
2560-
mddev_create_serial_pool(mddev, rdev, true);
2547+
mddev_create_serial_pool(mddev, rdev);
25612548

25622549
if ((err = kobject_add(&rdev->kobj, &mddev->kobj, "dev-%s", b)))
25632550
goto fail;
@@ -2610,7 +2597,7 @@ static void md_kick_rdev_from_array(struct md_rdev *rdev)
26102597
bd_unlink_disk_holder(rdev->bdev, rdev->mddev->gendisk);
26112598
list_del_rcu(&rdev->same_set);
26122599
pr_debug("md: unbind<%pg>\n", rdev->bdev);
2613-
mddev_destroy_serial_pool(rdev->mddev, rdev, false);
2600+
mddev_destroy_serial_pool(rdev->mddev, rdev);
26142601
rdev->mddev = NULL;
26152602
sysfs_remove_link(&rdev->kobj, "block");
26162603
sysfs_put(rdev->sysfs_state);
@@ -3077,11 +3064,11 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len)
30773064
}
30783065
} else if (cmd_match(buf, "writemostly")) {
30793066
set_bit(WriteMostly, &rdev->flags);
3080-
mddev_create_serial_pool(rdev->mddev, rdev, true);
3067+
mddev_create_serial_pool(rdev->mddev, rdev);
30813068
need_update_sb = true;
30823069
err = 0;
30833070
} else if (cmd_match(buf, "-writemostly")) {
3084-
mddev_destroy_serial_pool(rdev->mddev, rdev, true);
3071+
mddev_destroy_serial_pool(rdev->mddev, rdev);
30853072
clear_bit(WriteMostly, &rdev->flags);
30863073
need_update_sb = true;
30873074
err = 0;
@@ -5591,9 +5578,9 @@ serialize_policy_store(struct mddev *mddev, const char *buf, size_t len)
55915578
}
55925579

55935580
if (value)
5594-
mddev_create_serial_pool(mddev, NULL, true);
5581+
mddev_create_serial_pool(mddev, NULL);
55955582
else
5596-
mddev_destroy_serial_pool(mddev, NULL, true);
5583+
mddev_destroy_serial_pool(mddev, NULL);
55975584
mddev->serialize_policy = value;
55985585
unlock:
55995586
mddev_unlock_and_resume(mddev);
@@ -6359,7 +6346,7 @@ static void __md_stop_writes(struct mddev *mddev)
63596346
}
63606347
/* disable policy to guarantee rdevs free resources for serialization */
63616348
mddev->serialize_policy = 0;
6362-
mddev_destroy_serial_pool(mddev, NULL, true);
6349+
mddev_destroy_serial_pool(mddev, NULL);
63636350
}
63646351

63656352
void md_stop_writes(struct mddev *mddev)

drivers/md/md.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -817,10 +817,9 @@ extern void __mddev_resume(struct mddev *mddev);
817817

818818
extern void md_reload_sb(struct mddev *mddev, int raid_disk);
819819
extern void md_update_sb(struct mddev *mddev, int force);
820-
extern void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
821-
bool is_suspend);
822-
extern void mddev_destroy_serial_pool(struct mddev *mddev, struct md_rdev *rdev,
823-
bool is_suspend);
820+
extern void mddev_create_serial_pool(struct mddev *mddev, struct md_rdev *rdev);
821+
extern void mddev_destroy_serial_pool(struct mddev *mddev,
822+
struct md_rdev *rdev);
824823
struct md_rdev *md_find_rdev_nr_rcu(struct mddev *mddev, int nr);
825824
struct md_rdev *md_find_rdev_rcu(struct mddev *mddev, dev_t dev);
826825

0 commit comments

Comments
 (0)