]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
oracleasm: Report logical block size
authorMartin K. Petersen <martin.petersen@oracle.com>
Fri, 21 Mar 2014 19:20:19 +0000 (15:20 -0400)
committerSantosh Shilimkar <santosh.shilimkar@oracle.com>
Mon, 29 Jun 2015 15:34:53 +0000 (08:34 -0700)
Report the device's logical block size in the qd_feature variable. This
allows ASM to determine whether a disk group can be imported should a
storage device change its physical block size reporting.

Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/block/oracleasm/driver.c
include/linux/oracleasm/abi.h

index 0695c55ebdffd9045525df3c12d9ac65083acb44..5de7c4a193e38b257b0383e010cc802bcfaeb123 100644 (file)
@@ -69,6 +69,7 @@
 #include <linux/parser.h>
 #include <linux/backing-dev.h>
 #include <linux/compat.h>
+#include <linux/log2.h>
 
 #include <asm/uaccess.h>
 #include <linux/spinlock.h>
@@ -2343,6 +2344,7 @@ static ssize_t asmfs_svc_query_disk(struct file *file, char *buf, size_t size)
        struct oracleasm_query_disk_v2 *qd_info;
        struct file *filp;
        struct block_device *bdev;
+       unsigned int lsecsz;
        int ret;
 
        mlog_entry("(0x%p, 0x%p, %u)\n", file, buf, (unsigned int)size);
@@ -2377,14 +2379,16 @@ static ssize_t asmfs_svc_query_disk(struct file *file, char *buf, size_t size)
 
        bdev = I_BDEV(filp->f_mapping->host);
 
+       lsecsz = ilog2(bdev_logical_block_size(bdev));
        qd_info->qd_max_sectors = compute_max_sectors(bdev);
        qd_info->qd_hardsect_size = asm_block_size(bdev);
        qd_info->qd_feature = asm_integrity_format(bdev) &
                ASM_INTEGRITY_QDF_MASK;
+       qd_info->qd_feature |=  lsecsz << ASM_LSECSZ_SHIFT & ASM_LSECSZ_MASK;
        mlog(ML_ABI|ML_DISK,
             "Querydisk returning qd_max_sectors = %u and "
-            "qd_hardsect_size = %u, qd_integrity = %u\n",
-            qd_info->qd_max_sectors, qd_info->qd_hardsect_size,
+            "qd_hardsect_size = %u, lsecsz = %u, qd_integrity = %u\n",
+            qd_info->qd_max_sectors, lsecsz, qd_info->qd_hardsect_size,
             asm_integrity_format(bdev));
 
        ret = 0;
index 3de3abd0c38e3c28b7a8384f8df10e11c63549df..0733eed823df69bd2c6294007c3353cc1a521add 100644 (file)
@@ -185,6 +185,11 @@ enum oracleasm_feature_integrity {
        ASM_INTEGRITY_QDF_MASK          = 0xff, /* Querydisk feature mask */
 };
 
+enum oracleasm_feature_blk_size {
+       ASM_LSECSZ_SHIFT                = 24,
+       ASM_LSECSZ_MASK                 = 0xff << ASM_LSECSZ_SHIFT,
+};
+
 struct oracleasm_open_disk_v2
 {
 /*00*/ struct oracleasm_abi_info       od_abi;