md: Don't test all of mddev->flags at once.
mddev->flags is mostly used to record if an update of the metadata is needed. Sometimes the whole field is tested instead of just the important bits. This makes it difficult to introduce more state bits. So replace all bare tests of mddev->flags with tests for the bits that actually need testing. Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
c9ad020fec
commit
7a0a5355cb
@ -5144,7 +5144,7 @@ int md_run(struct mddev *mddev)
|
|||||||
|
|
||||||
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
|
||||||
|
|
||||||
if (mddev->flags)
|
if (mddev->flags & MD_UPDATE_SB_FLAGS)
|
||||||
md_update_sb(mddev, 0);
|
md_update_sb(mddev, 0);
|
||||||
|
|
||||||
md_new_event(mddev);
|
md_new_event(mddev);
|
||||||
@ -5289,7 +5289,7 @@ static void __md_stop_writes(struct mddev *mddev)
|
|||||||
md_super_wait(mddev);
|
md_super_wait(mddev);
|
||||||
|
|
||||||
if (mddev->ro == 0 &&
|
if (mddev->ro == 0 &&
|
||||||
(!mddev->in_sync || mddev->flags)) {
|
(!mddev->in_sync || (mddev->flags & MD_UPDATE_SB_FLAGS))) {
|
||||||
/* mark array as shutdown cleanly */
|
/* mark array as shutdown cleanly */
|
||||||
mddev->in_sync = 1;
|
mddev->in_sync = 1;
|
||||||
md_update_sb(mddev, 1);
|
md_update_sb(mddev, 1);
|
||||||
@ -7814,7 +7814,7 @@ void md_check_recovery(struct mddev *mddev)
|
|||||||
sysfs_notify_dirent_safe(mddev->sysfs_state);
|
sysfs_notify_dirent_safe(mddev->sysfs_state);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mddev->flags)
|
if (mddev->flags & MD_UPDATE_SB_FLAGS)
|
||||||
md_update_sb(mddev, 0);
|
md_update_sb(mddev, 0);
|
||||||
|
|
||||||
if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) &&
|
if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery) &&
|
||||||
|
@ -209,6 +209,7 @@ struct mddev {
|
|||||||
#define MD_CHANGE_DEVS 0 /* Some device status has changed */
|
#define MD_CHANGE_DEVS 0 /* Some device status has changed */
|
||||||
#define MD_CHANGE_CLEAN 1 /* transition to or from 'clean' */
|
#define MD_CHANGE_CLEAN 1 /* transition to or from 'clean' */
|
||||||
#define MD_CHANGE_PENDING 2 /* switch from 'clean' to 'active' in progress */
|
#define MD_CHANGE_PENDING 2 /* switch from 'clean' to 'active' in progress */
|
||||||
|
#define MD_UPDATE_SB_FLAGS (1 | 2 | 4) /* If these are set, md_update_sb needed */
|
||||||
#define MD_ARRAY_FIRST_USE 3 /* First use of array, needs initialization */
|
#define MD_ARRAY_FIRST_USE 3 /* First use of array, needs initialization */
|
||||||
|
|
||||||
int suspended;
|
int suspended;
|
||||||
|
Loading…
Reference in New Issue
Block a user