[PATCH -next v3 0/7] md: make rdev addition and removal independent from daemon thread

From: Yu Kuai
Date: Sun Aug 20 2023 - 05:16:40 EST


From: Yu Kuai <yukuai3@xxxxxxxxxx>

Changes in v3:
- rename md_choose_sync_direction() to md_choose_sync_action() in patch 2;
- fix an error in patch 3;
- add flush_work(&mddev->sync_work) while change read-only array to
read-write;

Changes in v2:
- remove patch 1 from v1 and some related patches, those patches will
be sent later when rcu protection for rdev is removed.
- add patch 2.

This is the third patchset to do some preparatory work to synchronize
io with array reconfiguration.

1) The first patchset refactor 'active_io', make sure that mddev_suspend()
will wait for io to be done. [1]

2) The second patchset remove 'quiesce' callback from mddev_suspend(), so
that mddev_suspend() doesn't rely on 'quiesce' callback is registered,
and can be used for all personalites; [2]

3) This patchset make array reconfiguration independent from daemon thread,
and synchronize it with io will be much easier because io may rely on
daemon thread to be done.

More patchset on the way!

[1] https://lore.kernel.org/all/20230621165110.1498313-1-yukuai1@xxxxxxxxxxxxxxx/
[2] https://lore.kernel.org/all/20230628012931.88911-2-yukuai1@xxxxxxxxxxxxxxx/

Yu Kuai (7):
md: use separate work_struct for md_start_sync()
md: factor out a helper to choose sync action from md_check_recovery()
md: delay choosing sync action to md_start_sync()
md: factor out a helper rdev_removeable() from remove_and_add_spares()
md: factor out a helper rdev_is_spare() from remove_and_add_spares()
md: factor out a helper rdev_addable() from remove_and_add_spares()
md: delay remove_and_add_spares() for read only array to
md_start_sync()

drivers/md/md.c | 268 ++++++++++++++++++++++++++++++------------------
drivers/md/md.h | 5 +-
2 files changed, 170 insertions(+), 103 deletions(-)

--
2.39.2