Commit 7a0a5355 authored by NeilBrown's avatar NeilBrown

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: default avatarNeilBrown <neilb@suse.de>
parent c9ad020f
...@@ -5144,7 +5144,7 @@ int md_run(struct mddev *mddev) ...@@ -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) ...@@ -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) ...@@ -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) &&
......
...@@ -204,11 +204,12 @@ struct mddev { ...@@ -204,11 +204,12 @@ struct mddev {
struct md_personality *pers; struct md_personality *pers;
dev_t unit; dev_t unit;
int md_minor; int md_minor;
struct list_head disks; struct list_head disks;
unsigned long flags; unsigned long flags;
#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;
...@@ -218,7 +219,7 @@ struct mddev { ...@@ -218,7 +219,7 @@ struct mddev {
* are happening, so run/ * are happening, so run/
* takeover/stop are not safe * takeover/stop are not safe
*/ */
int ready; /* See when safe to pass int ready; /* See when safe to pass
* IO requests down */ * IO requests down */
struct gendisk *gendisk; struct gendisk *gendisk;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment