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

Commit 1b30e66f authored by NeilBrown's avatar NeilBrown
Browse files

md: minor cleanup in safe_delay_store.



There isn't really much room for races with ->safemode_delay.
But as I am trying to clean up any racy code and will soon
be removing reconfig_mutex protection from most _store()
functions:
 - only set mddev->safemode_delay once, to ensure no code
   can see an intermediate value
 - use safemode_timer to call md_safemode_timeout() rather than
   calling it directly, to ensure it never races with itself.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent 4af1a041
Loading
Loading
Loading
Loading
+7 −5
Original line number Original line Diff line number Diff line
@@ -3242,11 +3242,13 @@ safe_delay_store(struct mddev *mddev, const char *cbuf, size_t len)
		mddev->safemode_delay = 0;
		mddev->safemode_delay = 0;
	else {
	else {
		unsigned long old_delay = mddev->safemode_delay;
		unsigned long old_delay = mddev->safemode_delay;
		mddev->safemode_delay = (msec*HZ)/1000;
		unsigned long new_delay = (msec*HZ)/1000;
		if (mddev->safemode_delay == 0)

			mddev->safemode_delay = 1;
		if (new_delay == 0)
		if (mddev->safemode_delay < old_delay || old_delay == 0)
			new_delay = 1;
			md_safemode_timeout((unsigned long)mddev);
		mddev->safemode_delay = new_delay;
		if (new_delay < old_delay || old_delay == 0)
			mod_timer(&mddev->safemode_timer, jiffies+1);
	}
	}
	return len;
	return len;
}
}