Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8e64406 authored by Dan Williams's avatar Dan Williams
Browse files

md: delay notification of 'active_idle' to the recovery thread



sysfs_notify might sleep, so do not call it from md_safemode_timeout.

Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
parent 23397883
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -3483,7 +3483,7 @@ static void md_safemode_timeout(unsigned long data)
	if (!atomic_read(&mddev->writes_pending)) {
		mddev->safemode = 1;
		if (mddev->external)
			sysfs_notify(&mddev->kobj, NULL, "array_state");
			set_bit(MD_NOTIFY_ARRAY_STATE, &mddev->flags);
	}
	md_wakeup_thread(mddev->thread);
}
@@ -6051,6 +6051,9 @@ void md_check_recovery(mddev_t *mddev)
	if (mddev->bitmap)
		bitmap_daemon_work(mddev->bitmap);

	if (test_and_clear_bit(MD_NOTIFY_ARRAY_STATE, &mddev->flags))
		sysfs_notify(&mddev->kobj, NULL, "array_state");

	if (mddev->ro)
		return;

+1 −0
Original line number Diff line number Diff line
@@ -128,6 +128,7 @@ struct mddev_s
#define MD_CHANGE_DEVS	0	/* Some device status has changed */
#define MD_CHANGE_CLEAN 1	/* transition to or from 'clean' */
#define MD_CHANGE_PENDING 2	/* superblock update in progress */
#define MD_NOTIFY_ARRAY_STATE 3	/* atomic context wants to notify userspace */

	int				ro;