mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 23:00:21 +00:00
dm raid: fix inaccessible superblocks causing oops in configure_discard_support
Commit 48cf06bc5f ("dm raid: add discard support for RAID levels 4, 5 and 6") did not properly handle missing metadata device(s). A failing read of the superblock causes the metadata and data devices to be removed from the dev array in struct raid_set, setting references to both devices to NULL. configure_discard_support() nonetheless tries to access the data dev unconditionally causing an oops. Signed-off-by: Heinz Mauelshagen <heinzm@redhat.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
40d43c4b4c
commit
d20c4b08be
@ -1172,8 +1172,12 @@ static void configure_discard_support(struct dm_target *ti, struct raid_set *rs)
|
||||
raid456 = (rs->md.level == 4 || rs->md.level == 5 || rs->md.level == 6);
|
||||
|
||||
for (i = 0; i < rs->md.raid_disks; i++) {
|
||||
struct request_queue *q = bdev_get_queue(rs->dev[i].rdev.bdev);
|
||||
struct request_queue *q;
|
||||
|
||||
if (!rs->dev[i].rdev.bdev)
|
||||
continue;
|
||||
|
||||
q = bdev_get_queue(rs->dev[i].rdev.bdev);
|
||||
if (!q || !blk_queue_discard(q))
|
||||
return;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user