aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2014-09-30 01:24:25 -0400
committerNeilBrown <neilb@suse.de>2014-10-13 22:08:29 -0400
commite1960f8c5cd1420dd2ecf0754a136956246365e7 (patch)
tree9ea3e40fedadd37cdd429128eb00068ed57fce25
parentf72ffdd68616e3697bc782b21c82197aeb480fd5 (diff)
md: don't allow "-sync" to be set for device in an active array.
If an array is active, devices can be marked 'faulty', but simply removing the 'sync' flag is wrong. That only makes sense for an array which is not active (and is probably only useful for testing anyway). Signed-off-by: NeilBrown <neilb@suse.de>
-rw-r--r--drivers/md/md.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 3ca611fabfaf..9939122ca00c 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2642,10 +2642,12 @@ state_store(struct md_rdev *rdev, const char *buf, size_t len)
2642 set_bit(In_sync, &rdev->flags); 2642 set_bit(In_sync, &rdev->flags);
2643 err = 0; 2643 err = 0;
2644 } else if (cmd_match(buf, "-insync") && rdev->raid_disk >= 0) { 2644 } else if (cmd_match(buf, "-insync") && rdev->raid_disk >= 0) {
2645 clear_bit(In_sync, &rdev->flags); 2645 if (rdev->mddev->pers == NULL) {
2646 rdev->saved_raid_disk = rdev->raid_disk; 2646 clear_bit(In_sync, &rdev->flags);
2647 rdev->raid_disk = -1; 2647 rdev->saved_raid_disk = rdev->raid_disk;
2648 err = 0; 2648 rdev->raid_disk = -1;
2649 err = 0;
2650 }
2649 } else if (cmd_match(buf, "write_error")) { 2651 } else if (cmd_match(buf, "write_error")) {
2650 set_bit(WriteErrorSeen, &rdev->flags); 2652 set_bit(WriteErrorSeen, &rdev->flags);
2651 err = 0; 2653 err = 0;