Patch name: md-raid5-do-not-set-fullsync.patch Add new flag for struct mdk_rdev_s to indicate when recovery can use bitmap The version 2 superblock routines (device-mapper) can tell if a device is in-sync, in need of partial (bitmap aided) recovery, or in need of complete recovery. The raid5 code assumes that if a device is not in-sync, then it must undergo complete recovery - it does not honor the bitmap. The flag 'RecoverByBitmap' has been introduced to force raid5 not to set 'conf->fullsync' if the superblock routines have already determined that only a partial recovery is necessary. RFC-by: Jonathan Brassow <jbrassow@xxxxxxxxxx> Index: linux-2.6/drivers/md/raid5.c =================================================================== --- linux-2.6.orig/drivers/md/raid5.c +++ linux-2.6/drivers/md/raid5.c @@ -4858,7 +4858,7 @@ static raid5_conf_t *setup_conf(mddev_t printk(KERN_INFO "md/raid:%s: device %s operational as raid" " disk %d\n", mdname(mddev), bdevname(rdev->bdev, b), raid_disk); - } else + } else if (!test_bit(RecoverByBitmap, &rdev->flags)) /* Cannot rely on bitmap to complete recovery */ conf->fullsync = 1; } Index: linux-2.6/drivers/md/md.c =================================================================== --- linux-2.6.orig/drivers/md/md.c +++ linux-2.6/drivers/md/md.c @@ -2009,8 +2009,10 @@ static int super_2_validate(mddev_t *mdd if (test_bit(Faulty, &rdev->flags)) { clear_bit(Faulty, &rdev->flags); clear_bit(In_sync, &rdev->flags); + set_bit(RecoverByBitmap, &rdev->flags); rdev->recovery_offset = 0; - printk(KERN_INFO "md: %s: Dev #%d previously marked as failed\n", + printk(KERN_INFO + "md: %s: Dev #%d recovering from transient failure\n", mdname(mddev), rdev->raid_disk); } Index: linux-2.6/drivers/md/md.h =================================================================== --- linux-2.6.orig/drivers/md/md.h +++ linux-2.6/drivers/md/md.h @@ -79,6 +79,8 @@ struct mdk_rdev_s * until it is cleared */ #define FirstUse 9 /* Used by device-mapper interface when * initializing first-time devices. */ +#define RecoverByBitmap 10 /* Used by device-mapper to ensure + * this device is recovered by bitmap. */ wait_queue_head_t blocked_wait; int desc_nr; /* descriptor index in the superblock */ -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html