]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
oracleasm: Honor ASM_IFLAG_FORMAT_NOCHECK flag
authorMartin K. Petersen <martin.petersen@oracle.com>
Tue, 6 Nov 2018 02:44:51 +0000 (21:44 -0500)
committerBrian Maly <brian.maly@oracle.com>
Wed, 14 Nov 2018 18:23:38 +0000 (13:23 -0500)
If ASMLib supports the QUERY HANDLE operation, it will set the
ASM_IFLAG_FORMAT_NOCHECK flag on the ioc. This signals to the kernel
driver that the integrity information does not depend on the contents
of the it_format field and the ASM disk handle.

Orabug: 28650922

Reviewed-by: Sajid Zia <sajid.zia@oracle.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Rajan Shanmugavelu <rajan.shanmugavelu@oracle.com>
Signed-off-by: Brian Maly <brian.maly@oracle.com>
drivers/block/oracleasm/integrity.c
include/linux/oracleasm/abi.h

index ed5adaa4442fa2b49f0b72d1b1e48057a081cc09..228e4ef1d657f29af4e2048e17a97ee0a614a5a6 100644 (file)
@@ -85,23 +85,11 @@ int asm_integrity_check(struct oracleasm_integrity_v2 *it, struct block_device *
 {
        unsigned int dev_format;
 
-       /* Strip feature flags */
-       dev_format = asm_integrity_format(bdev) & ASM_INTEGRITY_HANDLE_MASK;
-
-       if (!dev_format)
-               return 0;
-
        if (unlikely(it->it_magic != ASM_INTEGRITY_MAGIC)) {
                pr_err("%s: Bad integrity magic %x!\n", __func__, it->it_magic);
                return -EINVAL;
        }
 
-       if (unlikely(it->it_format != dev_format)) {
-               pr_err("%s: incorrect format for %s (%u != %u)\n", __func__,
-                      bdev->bd_disk->disk_name, it->it_format, dev_format);
-               return -EINVAL;
-       }
-
        if (unlikely(it->it_bytes == 0)) {
                pr_err("%s: zero length integrity buffer\n", __func__);
                return -EINVAL;
@@ -112,6 +100,20 @@ int asm_integrity_check(struct oracleasm_integrity_v2 *it, struct block_device *
                return -EINVAL;
        }
 
+       if (it->it_flags & ASM_IFLAG_FORMAT_NOCHECK)
+               return 0;
+
+       dev_format = asm_integrity_format(bdev) & ASM_INTEGRITY_HANDLE_MASK;
+
+       if (!dev_format)
+               return -EINVAL;
+
+       if (unlikely(it->it_format != dev_format)) {
+               pr_err("%s: incorrect format for %s (%u != %u)\n", __func__,
+                      bdev->bd_disk->disk_name, it->it_format, dev_format);
+               return -EINVAL;
+       }
+
        return 0;
 } /* asm_integrity_check */
 
index c0ac30bfca44e20353b006ebedd9af4de7ce7f1b..7884f98a1a1e925ae452b8a388c4167be1f13067 100644 (file)
@@ -165,6 +165,7 @@ enum oracleasm_integrity_handling_flags {
        ASM_IFLAG_IP_CHECKSUM           = 2,    /* IP checksum instead of CRC */
        ASM_IFLAG_CTRL_NOCHECK          = 4,    /* Disable HBA PI checks */
        ASM_IFLAG_DISK_NOCHECK          = 8,    /* Disable disk PI checks */
+       ASM_IFLAG_FORMAT_NOCHECK        = 16,   /* Disable IT format check */
 };
 
 struct oracleasm_query_disk_v2