[stgt] [PATCH 2/4] Support new fields in READ CAPACITY (16)

Andy Grover agrover at redhat.com
Fri Jan 6 01:53:54 CET 2012


Enable setting Logical Blocks per Physical Block Exponent and
Lowest Aligned LBA. This is needed to expose underlying device
properties in the iscsi lun.

Signed-off-by: Andy Grover <agrover at redhat.com>
---
 usr/sbc.c  |    4 ++++
 usr/spc.c  |   11 +++++++++++
 usr/tgtd.h |    3 +++
 3 files changed, 18 insertions(+), 0 deletions(-)

diff --git a/usr/sbc.c b/usr/sbc.c
index f6f0dfd..9666801 100644
--- a/usr/sbc.c
+++ b/usr/sbc.c
@@ -229,6 +229,7 @@ static int sbc_service_action(int host_no, struct scsi_cmd *cmd)
 	unsigned int bshift;
 	uint64_t size;
 	int len = 32;
+	int val;
 
 	if (cmd->scb[1] != SAI_READ_CAPACITY_16)
 		goto sense;
@@ -247,6 +248,9 @@ static int sbc_service_action(int host_no, struct scsi_cmd *cmd)
 	*((uint64_t *)(data)) = __cpu_to_be64(size - 1);
 	data[2] = __cpu_to_be32(1UL << bshift);
 
+	val = (cmd->dev->attrs.lbppbe << 16) | cmd->dev->attrs.la_lba;
+	data[3] = __cpu_to_be32(val);
+
 overflow:
 	scsi_set_in_resid_by_actual(cmd, len);
 	return SAM_STAT_GOOD;
diff --git a/usr/spc.c b/usr/spc.c
index 0490ed9..174d4b3 100644
--- a/usr/spc.c
+++ b/usr/spc.c
@@ -1612,6 +1612,7 @@ enum {
 	Opt_scsi_id, Opt_scsi_sn,
 	Opt_vendor_id, Opt_product_id,
 	Opt_product_rev, Opt_sense_format,
+	Opt_lbppbe, Opt_la_lba,
 	Opt_optimal_xfer_gran, Opt_optimal_xfer_len,
 	Opt_removable, Opt_readonly, Opt_online,
 	Opt_mode_page,
@@ -1627,6 +1628,8 @@ static match_table_t tokens = {
 	{Opt_product_id, "product_id=%s"},
 	{Opt_product_rev, "product_rev=%s"},
 	{Opt_sense_format, "sense_format=%s"},
+	{Opt_lbppbe, "lpbbpe=%s"},
+	{Opt_la_lba, "la_lba=%s"},
 	{Opt_optimal_xfer_gran, "optimal_xfer_gran=%s"},
 	{Opt_optimal_xfer_len, "optimal_xfer_len=%s"},
 	{Opt_removable, "removable=%s"},
@@ -1698,6 +1701,14 @@ int lu_config(struct scsi_lu *lu, char *params, match_fn_t *fn)
 			match_strncpy(buf, &args[0], sizeof(buf));
 			attrs->sense_format = atoi(buf);
 			break;
+		case Opt_lbppbe:
+			match_strncpy(buf, &args[0], sizeof(buf));
+			attrs->lbppbe = atoi(buf);
+			break;
+		case Opt_la_lba:
+			match_strncpy(buf, &args[0], sizeof(buf));
+			attrs->la_lba = atoi(buf);
+			break;
 		case Opt_optimal_xfer_gran:
 			match_strncpy(buf, &args[0], sizeof(buf));
 			update_b0_opt_xfer_gran(lu, atoi(buf));
diff --git a/usr/tgtd.h b/usr/tgtd.h
index c59f309..3550827 100644
--- a/usr/tgtd.h
+++ b/usr/tgtd.h
@@ -67,6 +67,9 @@ struct lu_phy_attr {
 	char readonly;          /* Read-Only media */
 	char online;		/* Logical Unit online */
 	char sense_format;	/* Descrptor format sense data supported */
+				/* For the following see READ CAPACITY (16) */
+	unsigned char lbppbe;	/* Logical blocks per physical block exponent */
+	uint16_t la_lba;	/* Lowest aligned LBA */
 
 	/* VPD pages 0x80 -> 0xff masked with 0x80*/
 	struct vpd *lu_vpd[1 << PCODE_SHIFT];
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the stgt mailing list