#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>
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);
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;
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;