dm raid: constructor fails on non-zero incompat_features
authorHeinz Mauelshagen <heinzm@redhat.com>
Wed, 3 Aug 2016 15:47:04 +0000 (17:47 +0200)
committerMike Snitzer <snitzer@redhat.com>
Wed, 3 Aug 2016 16:36:54 +0000 (12:36 -0400)
When lvm2 userspace requests a RaidLV repair, it sets the rebuild
constructor flag on the new replacement DataLVs but does not clear the
respective MetaLVs.  Hence the superblock that is loaded from such new
MetaLVs may have a non-zero incompat_features member and the constructor
will fail with false-positive on incompat_features.

Solve by initializing the incompat_features member properly.

Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-raid.c

index 5ef6b5af3fb468fe6ecf794b951fbccd9536828c..7b403ab41bd3885c66e9e6dae736632038bd7596 100644 (file)
@@ -1960,6 +1960,7 @@ static void super_sync(struct mddev *mddev, struct md_rdev *rdev)
        sb->data_offset = cpu_to_le64(rdev->data_offset);
        sb->new_data_offset = cpu_to_le64(rdev->new_data_offset);
        sb->sectors = cpu_to_le64(rdev->sectors);
+       sb->incompat_features = cpu_to_le32(0);
 
        /* Zero out the rest of the payload after the size of the superblock */
        memset(sb + 1, 0, rdev->sb_size - sizeof(*sb));