md: Fix integrity registration error when no devices are capable
We incorrectly returned -EINVAL when none of the devices in the array had an integrity profile. This in turn prevented mdadm from starting the metadevice. Fix this so we only return errors on mismatched profiles and memory allocation failures. Reported-by: Giacomo Catenazzi <cate@cateee.net> Reported-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
7de8e5737d
Коммит
89078d572e
|
@ -1777,12 +1777,6 @@ int md_integrity_register(mddev_t *mddev)
|
||||||
continue;
|
continue;
|
||||||
if (rdev->raid_disk < 0)
|
if (rdev->raid_disk < 0)
|
||||||
continue;
|
continue;
|
||||||
/*
|
|
||||||
* If at least one rdev is not integrity capable, we can not
|
|
||||||
* enable data integrity for the md device.
|
|
||||||
*/
|
|
||||||
if (!bdev_get_integrity(rdev->bdev))
|
|
||||||
return -EINVAL;
|
|
||||||
if (!reference) {
|
if (!reference) {
|
||||||
/* Use the first rdev as the reference */
|
/* Use the first rdev as the reference */
|
||||||
reference = rdev;
|
reference = rdev;
|
||||||
|
@ -1793,6 +1787,8 @@ int md_integrity_register(mddev_t *mddev)
|
||||||
rdev->bdev->bd_disk) < 0)
|
rdev->bdev->bd_disk) < 0)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
if (!reference || !bdev_get_integrity(reference->bdev))
|
||||||
|
return 0;
|
||||||
/*
|
/*
|
||||||
* All component devices are integrity capable and have matching
|
* All component devices are integrity capable and have matching
|
||||||
* profiles, register the common profile for the md device.
|
* profiles, register the common profile for the md device.
|
||||||
|
|
Загрузка…
Ссылка в новой задаче