From: NeilBrown Date: Tue, 19 Nov 2013 23:49:14 +0000 (+1100) Subject: IMSM metadata really should be ignored when found on partitions. X-Git-Tag: mdadm-3.3.1~96 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=357ac1067835d1cdd5f80acc28501db0ffc64957;p=thirdparty%2Fmdadm.git IMSM metadata really should be ignored when found on partitions. commit b31df43682216d1c65813eae49ebdd8253db8907 changed load_super_imsm to not insist on finding a partition if ignore_hw_compat was set. Unfortunately this is set for '--assemble' so arrays could get assembled badly. The comment says this was to allow e.g. --examine of image files. A better fixes for this is to change test_partitions to not report a regular file as being a partition. The errors from the BLKPG ioctl are: ENOTTY : not a block device. EINVAL : not a whole device (probably a partition) ENXIO : partition doesn't exist (so not a partition) Reported-by: "David F." Signed-off-by: NeilBrown --- diff --git a/super-intel.c b/super-intel.c index 7b240686..c103ffdd 100644 --- a/super-intel.c +++ b/super-intel.c @@ -4423,7 +4423,7 @@ static int load_super_imsm(struct supertype *st, int fd, char *devname) struct intel_super *super; int rv; - if (!st->ignore_hw_compat && test_partition(fd)) + if (test_partition(fd)) /* IMSM not allowed on partitions */ return 1; diff --git a/util.c b/util.c index 5f95f1f9..b29a3ee7 100644 --- a/util.c +++ b/util.c @@ -307,7 +307,7 @@ int test_partition(int fd) if (ioctl(fd, BLKPG, &a) == 0) /* Very unlikely, but not a partition */ return 0; - if (errno == ENXIO) + if (errno == ENXIO || errno == ENOTTY) /* not a partition */ return 0;