summaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2011-12-08 06:22:48 +0100
committerNeilBrown <neilb@suse.de>2011-12-08 06:22:48 +0100
commit52c64152a935e63d9ff73ce823730c9a23dedbff (patch)
tree03de10a1899d74b42d00740437140a032686d011 /drivers/md/md.c
parentmd: take a reference to mddev during sysfs access. (diff)
downloadlinux-52c64152a935e63d9ff73ce823730c9a23dedbff.tar.xz
linux-52c64152a935e63d9ff73ce823730c9a23dedbff.zip
md: bad blocks shouldn't cause a Blocked status on a Faulty device.
Once a device is marked Faulty the badblocks - whether acknowledged or not - become irrelevant. So they shouldn't cause the device to be marked as Blocked. Without this patch, a process might write "-blocked" to clear the Blocked status, but while that will correctly fail the device, it won't remove the apparent 'blocked' status. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index f97c3b2f2f89..d730e8f513a7 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -2546,7 +2546,8 @@ state_show(struct md_rdev *rdev, char *page)
sep = ",";
}
if (test_bit(Blocked, &rdev->flags) ||
- rdev->badblocks.unacked_exist) {
+ (rdev->badblocks.unacked_exist
+ && !test_bit(Faulty, &rdev->flags))) {
len += sprintf(page+len, "%sblocked", sep);
sep = ",";
}