From 10d101cf513a127b1a378f29657501815cea8def Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Sun, 26 May 2013 19:53:27 -0700 Subject: [PATCH] TESTS: Try reading the BlockDeviceCharacteristics VPD page on startup --- test-tool/iscsi-support.c | 1 + test-tool/iscsi-support.h | 1 + test-tool/iscsi-test-cu.c | 16 ++++++++++++++++ 3 files changed, 18 insertions(+) diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c index 110cd01..6915857 100644 --- a/test-tool/iscsi-support.c +++ b/test-tool/iscsi-support.c @@ -48,6 +48,7 @@ const char *tgt_url; struct scsi_inquiry_standard *inq; struct scsi_inquiry_logical_block_provisioning *inq_lbp; +struct scsi_inquiry_block_device_characteristics *inq_bdc; struct scsi_inquiry_block_limits *inq_bl; struct scsi_readcapacity16 *rc16; struct scsi_report_supported_op_codes *rsop; diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h index 90977af..38ffa8e 100644 --- a/test-tool/iscsi-support.h +++ b/test-tool/iscsi-support.h @@ -141,6 +141,7 @@ do { \ extern struct scsi_inquiry_standard *inq; extern struct scsi_inquiry_logical_block_provisioning *inq_lbp; +extern struct scsi_inquiry_block_device_characteristics *inq_bdc; extern struct scsi_inquiry_block_limits *inq_bl; extern struct scsi_readcapacity16 *rc16; extern struct scsi_report_supported_op_codes *rsop; diff --git a/test-tool/iscsi-test-cu.c b/test-tool/iscsi-test-cu.c index d08965b..dc1f362 100644 --- a/test-tool/iscsi-test-cu.c +++ b/test-tool/iscsi-test-cu.c @@ -894,6 +894,7 @@ main(int argc, char *argv[]) struct scsi_readcapacity10 *rc10; struct scsi_task *inq_task = NULL; struct scsi_task *inq_lbp_task = NULL; + struct scsi_task *inq_bdc_task = NULL; struct scsi_task *inq_bl_task = NULL; struct scsi_task *rc16_task = NULL; struct scsi_task *rsop_task = NULL; @@ -1110,6 +1111,18 @@ main(int argc, char *argv[]) } } + /* try reading block device characteristics vpd */ + inq_bdc_task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_BLOCK_DEVICE_CHARACTERISTICS, 255); + if (inq_bdc_task == NULL) { + printf("Failed to read Block Device Characteristics page\n"); + } + if (inq_bdc_task) { + inq_bdc = scsi_datain_unmarshall(inq_bdc_task); + if (inq_bdc == NULL) { + printf("failed to unmarshall inquiry datain blob\n"); + return -1; + } + } /* if thin provisioned we also need to read the VPD page for it */ if (rc16 && rc16->lbpme != 0){ @@ -1224,6 +1237,9 @@ main(int argc, char *argv[]) if (inq_lbp_task != NULL) { scsi_free_scsi_task(inq_lbp_task); } + if (inq_bdc_task != NULL) { + scsi_free_scsi_task(inq_bdc_task); + } if (rc16_task != NULL) { scsi_free_scsi_task(rc16_task); }