aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/raid5.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md/raid5.c')
-rw-r--r--drivers/md/raid5.c41
1 files changed, 20 insertions, 21 deletions
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 49bf5f891435..34dd54539f7b 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -1700,27 +1700,25 @@ static void error(mddev_t *mddev, mdk_rdev_t *rdev)
1700 raid5_conf_t *conf = mddev->private; 1700 raid5_conf_t *conf = mddev->private;
1701 pr_debug("raid456: error called\n"); 1701 pr_debug("raid456: error called\n");
1702 1702
1703 if (!test_bit(Faulty, &rdev->flags)) { 1703 if (test_and_clear_bit(In_sync, &rdev->flags)) {
1704 set_bit(MD_CHANGE_DEVS, &mddev->flags); 1704 unsigned long flags;
1705 if (test_and_clear_bit(In_sync, &rdev->flags)) { 1705 spin_lock_irqsave(&conf->device_lock, flags);
1706 unsigned long flags; 1706 mddev->degraded++;
1707 spin_lock_irqsave(&conf->device_lock, flags); 1707 spin_unlock_irqrestore(&conf->device_lock, flags);
1708 mddev->degraded++; 1708 /*
1709 spin_unlock_irqrestore(&conf->device_lock, flags); 1709 * if recovery was running, make sure it aborts.
1710 /* 1710 */
1711 * if recovery was running, make sure it aborts. 1711 set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1712 */
1713 set_bit(MD_RECOVERY_INTR, &mddev->recovery);
1714 }
1715 set_bit(Faulty, &rdev->flags);
1716 printk(KERN_ALERT
1717 "md/raid:%s: Disk failure on %s, disabling device.\n"
1718 "md/raid:%s: Operation continuing on %d devices.\n",
1719 mdname(mddev),
1720 bdevname(rdev->bdev, b),
1721 mdname(mddev),
1722 conf->raid_disks - mddev->degraded);
1723 } 1712 }
1713 set_bit(Faulty, &rdev->flags);
1714 set_bit(MD_CHANGE_DEVS, &mddev->flags);
1715 printk(KERN_ALERT
1716 "md/raid:%s: Disk failure on %s, disabling device.\n"
1717 "md/raid:%s: Operation continuing on %d devices.\n",
1718 mdname(mddev),
1719 bdevname(rdev->bdev, b),
1720 mdname(mddev),
1721 conf->raid_disks - mddev->degraded);
1724} 1722}
1725 1723
1726/* 1724/*
@@ -5391,7 +5389,8 @@ static int raid5_resize(mddev_t *mddev, sector_t sectors)
5391 return -EINVAL; 5389 return -EINVAL;
5392 set_capacity(mddev->gendisk, mddev->array_sectors); 5390 set_capacity(mddev->gendisk, mddev->array_sectors);
5393 revalidate_disk(mddev->gendisk); 5391 revalidate_disk(mddev->gendisk);
5394 if (sectors > mddev->dev_sectors && mddev->recovery_cp == MaxSector) { 5392 if (sectors > mddev->dev_sectors &&
5393 mddev->recovery_cp > mddev->dev_sectors) {
5395 mddev->recovery_cp = mddev->dev_sectors; 5394 mddev->recovery_cp = mddev->dev_sectors;
5396 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); 5395 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
5397 } 5396 }