Skip to content

Commit 7a2347e

Browse files
YuKuai-huaweiliu-song-6
authored andcommitted
md: export helpers to stop sync_thread
Add new helpers: void md_idle_sync_thread(struct mddev *mddev); void md_frozen_sync_thread(struct mddev *mddev); void md_unfrozen_sync_thread(struct mddev *mddev); The helpers will be used in dm-raid in later patches to fix regressions and prevent calling md_reap_sync_thread() directly. Cc: [email protected] # v6.7+ Signed-off-by: Yu Kuai <[email protected]> Signed-off-by: Xiao Ni <[email protected]> Acked-by: Mike Snitzer <[email protected]> Signed-off-by: Song Liu <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 2f03d0c commit 7a2347e

File tree

2 files changed

+32
-0
lines changed

2 files changed

+32
-0
lines changed

drivers/md/md.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4942,6 +4942,35 @@ static void stop_sync_thread(struct mddev *mddev, bool locked, bool check_seq)
49424942
mddev_lock_nointr(mddev);
49434943
}
49444944

4945+
void md_idle_sync_thread(struct mddev *mddev)
4946+
{
4947+
lockdep_assert_held(&mddev->reconfig_mutex);
4948+
4949+
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
4950+
stop_sync_thread(mddev, true, true);
4951+
}
4952+
EXPORT_SYMBOL_GPL(md_idle_sync_thread);
4953+
4954+
void md_frozen_sync_thread(struct mddev *mddev)
4955+
{
4956+
lockdep_assert_held(&mddev->reconfig_mutex);
4957+
4958+
set_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
4959+
stop_sync_thread(mddev, true, false);
4960+
}
4961+
EXPORT_SYMBOL_GPL(md_frozen_sync_thread);
4962+
4963+
void md_unfrozen_sync_thread(struct mddev *mddev)
4964+
{
4965+
lockdep_assert_held(&mddev->reconfig_mutex);
4966+
4967+
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
4968+
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
4969+
md_wakeup_thread(mddev->thread);
4970+
sysfs_notify_dirent_safe(mddev->sysfs_action);
4971+
}
4972+
EXPORT_SYMBOL_GPL(md_unfrozen_sync_thread);
4973+
49454974
static void idle_sync_thread(struct mddev *mddev)
49464975
{
49474976
mutex_lock(&mddev->sync_mutex);

drivers/md/md.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -792,6 +792,9 @@ extern void md_rdev_clear(struct md_rdev *rdev);
792792
extern void md_handle_request(struct mddev *mddev, struct bio *bio);
793793
extern int mddev_suspend(struct mddev *mddev, bool interruptible);
794794
extern void mddev_resume(struct mddev *mddev);
795+
extern void md_idle_sync_thread(struct mddev *mddev);
796+
extern void md_frozen_sync_thread(struct mddev *mddev);
797+
extern void md_unfrozen_sync_thread(struct mddev *mddev);
795798

796799
extern void md_reload_sb(struct mddev *mddev, int raid_disk);
797800
extern void md_update_sb(struct mddev *mddev, int force);

0 commit comments

Comments
 (0)