{
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;
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 */
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