aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2015-09-18 13:20:12 -0400
committerNeilBrown <neilb@suse.com>2015-10-02 03:23:44 -0400
commitd4929add83ad4660b1824a9282ab5dd4d60140fa (patch)
treec087245ba01366fb5c568915fce7d353897cc7a1 /drivers/md/md.c
parent66eefe5de11db1e0d8f2edc3880d50e7c36a9d43 (diff)
md: clear CHANGE_PENDING in readonly array
If faulty disks of an array are more than allowed degraded number, the array enters error handling. It will be marked as read-only with MD_CHANGE_PENDING/RECOVERY_NEEDED set. But currently recovery doesn't clear CHANGE_PENDING bit for read-only array. If MD_CHANGE_PENDING is set for a raid5 array, all returned IO will be hold on a list till the bit is clear. But recovery nevery clears this bit, the IO is always in pending state and nevery finish. This has bad effects like upper layer can't get an IO error and the array can't be stopped. Fixes: c3cce6cda162 ("md/raid5: ensure device failure recorded before write request returns.") Signed-off-by: Shaohua Li <shli@fb.com> Signed-off-by: NeilBrown <neilb@suse.com>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index b8247bc32cf6..c702de18207a 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -8164,6 +8164,7 @@ void md_check_recovery(struct mddev *mddev)
8164 md_reap_sync_thread(mddev); 8164 md_reap_sync_thread(mddev);
8165 clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery); 8165 clear_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
8166 clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 8166 clear_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
8167 clear_bit(MD_CHANGE_PENDING, &mddev->flags);
8167 goto unlock; 8168 goto unlock;
8168 } 8169 }
8169 8170