Commit aaf49388 authored by NeilBrown's avatar NeilBrown Committed by Greg Kroah-Hartman

md: bad block list should default to disabled.

commit 486adf72 upstream.

Maintenance of a bad-block-list currently defaults to 'enabled'
and is then disabled when it cannot be supported.
This is backwards and causes problem for dm-raid which didn't know
to disable it.

So fix the defaults, and only enabled for v1.x metadata which
explicitly has bad blocks enabled.

The problem with dm-raid has been present since badblock support was
added in v3.1, so this patch is suitable for any -stable from 3.1
onwards.
Reported-by: default avatarJonathan Brassow <jbrassow@redhat.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 17f978dd
...@@ -1564,8 +1564,8 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_ ...@@ -1564,8 +1564,8 @@ static int super_1_load(struct md_rdev *rdev, struct md_rdev *refdev, int minor_
sector, count, 1) == 0) sector, count, 1) == 0)
return -EINVAL; return -EINVAL;
} }
} else if (sb->bblog_offset == 0) } else if (sb->bblog_offset != 0)
rdev->badblocks.shift = -1; rdev->badblocks.shift = 0;
if (!refdev) { if (!refdev) {
ret = 1; ret = 1;
...@@ -3221,7 +3221,7 @@ int md_rdev_init(struct md_rdev *rdev) ...@@ -3221,7 +3221,7 @@ int md_rdev_init(struct md_rdev *rdev)
* be used - I wonder if that matters * be used - I wonder if that matters
*/ */
rdev->badblocks.count = 0; rdev->badblocks.count = 0;
rdev->badblocks.shift = 0; rdev->badblocks.shift = -1; /* disabled until explicitly enabled */
rdev->badblocks.page = kmalloc(PAGE_SIZE, GFP_KERNEL); rdev->badblocks.page = kmalloc(PAGE_SIZE, GFP_KERNEL);
seqlock_init(&rdev->badblocks.lock); seqlock_init(&rdev->badblocks.lock);
if (rdev->badblocks.page == NULL) if (rdev->badblocks.page == NULL)
...@@ -3293,9 +3293,6 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe ...@@ -3293,9 +3293,6 @@ static struct md_rdev *md_import_device(dev_t newdev, int super_format, int supe
goto abort_free; goto abort_free;
} }
} }
if (super_format == -1)
/* hot-add for 0.90, or non-persistent: so no badblocks */
rdev->badblocks.shift = -1;
return rdev; return rdev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment