diff --git a/test-tool/0180_writesame10_unmap.c b/test-tool/0180_writesame10_unmap.c index bc8e213..48295fa 100644 --- a/test-tool/0180_writesame10_unmap.c +++ b/test-tool/0180_writesame10_unmap.c @@ -25,7 +25,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) struct iscsi_context *iscsi; struct scsi_task *task; int full_size; - struct scsi_inquiry_logical_block_provisioning *inq_lbp; + struct scsi_inquiry_logical_block_provisioning *lbp; int ret, i, lun; printf("0180_writesame10_unmap:\n"); @@ -77,21 +77,16 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) } } - inq_lbp = scsi_datain_unmarshall(task); - if (inq_lbp == NULL) { + lbp = scsi_datain_unmarshall(task); + if (lbp == NULL) { printf("failed to unmarshall inquiry datain blob\n"); scsi_free_scsi_task(task); ret = -1; goto finished; } - - lbpws10 = inq_lbp->lbpws10; - anc_sup = inq_lbp->anc_sup; - - scsi_free_scsi_task(task); printf("[OK]\n"); - if (lbpws10 == 0) { + if (lbp->lbpws10 == 0) { printf("Device does not support WRITE_SAME10 for UNMAP. All WRITE_SAME10 commands to unmap should fail.\n"); } @@ -105,13 +100,13 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) /* unmap the first 1 - 256 blocks at the start of the LUN */ printf("Unmapping first 1-256 blocks ... "); - if (lbpws10 == 0) { + if (lbp->lbpws10 == 0) { printf("(Should all fail since LBPWS10 is 0) "); } for (i=1; i<=256; i++) { /* only try unmapping whole physical blocks, of if unmap using ws10 is not supported we test for all and they should all fail */ - if (lbpws10 == 1 && i % lbppb) { + if (lbp->lbpws10 == 1 && i % lbppb) { continue; } task = iscsi_writesame10_sync(iscsi, lun, 0, @@ -133,7 +128,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) ret = -2; goto finished; } - if (lbpws10) { + if (lbp->lbpws10) { if (task->status != SCSI_STATUS_GOOD) { printf("[FAILED]\n"); printf("WRITESAME10 command: failed with sense. %s\n", iscsi_get_error(iscsi)); @@ -160,13 +155,13 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) /* unmap the last 1 - 256 blocks at the end of the LUN */ printf("Unmapping last 1-256 blocks ... "); - if (lbpws10 == 0) { + if (lbp->lbpws10 == 0) { printf("(Should all fail since LBPWS10 is 0) "); } for (i=1; i<=256; i++) { /* only try unmapping whole physical blocks, of if unmap using ws10 is not supported we test for all and they should all fail */ - if (lbpws10 == 1 && i % lbppb) { + if (lbp->lbpws10 == 1 && i % lbppb) { continue; } @@ -180,7 +175,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) ret = -1; goto finished; } - if (lbpws10) { + if (lbp->lbpws10) { if (task->status != SCSI_STATUS_GOOD) { printf("[FAILED]\n"); printf("WRITESAME10 command: failed with sense. %s\n", iscsi_get_error(iscsi)); @@ -234,7 +229,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) /* Test UNMAP=1 and ANCHOR==1 */ printf("Try UNMAP==1 and ANCHOR==1 ... "); - if (anc_sup == 0) { + if (lbp->anc_sup == 0) { printf("(ANC_SUP==0 so check condition expected) "); } task = iscsi_writesame10_sync(iscsi, lun, 0, @@ -247,7 +242,7 @@ int T0180_writesame10_unmap(const char *initiator, const char *url) ret = -1; goto finished; } - if (anc_sup == 0) { + if (lbp->anc_sup == 0) { if (task->status != SCSI_STATUS_CHECK_CONDITION || task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST || task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) { diff --git a/test-tool/0190_writesame16_unmap.c b/test-tool/0190_writesame16_unmap.c index 889e740..73fb49d 100644 --- a/test-tool/0190_writesame16_unmap.c +++ b/test-tool/0190_writesame16_unmap.c @@ -25,7 +25,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) struct iscsi_context *iscsi; struct scsi_task *task; int full_size; - struct scsi_inquiry_logical_block_provisioning *inq_lbp; + struct scsi_inquiry_logical_block_provisioning *lbp; int ret, i, lun; printf("0190_writesame16_unmap:\n"); @@ -78,21 +78,16 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) } } - inq_lbp = scsi_datain_unmarshall(task); - if (inq_lbp == NULL) { + lbp = scsi_datain_unmarshall(task); + if (lbp == NULL) { printf("failed to unmarshall inquiry datain blob\n"); scsi_free_scsi_task(task); ret = -1; goto finished; } - - lbpws = inq_lbp->lbpws; - anc_sup = inq_lbp->anc_sup; - - scsi_free_scsi_task(task); printf("[OK]\n"); - if (lbpws == 0) { + if (lbp->lbpws == 0) { printf("Device does not support WRITE_SAME16 for UNMAP. All WRITE_SAME16 commands to unmap should fail.\n"); } @@ -107,13 +102,13 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) /* unmap the first 1 - 256 blocks at the start of the LUN */ printf("Unmapping first 1-256 blocks ... "); - if (lbpws == 0) { + if (lbp->lbpws == 0) { printf("(Should all fail since LBPWS is 0) "); } for (i=1; i<=256; i++) { /* only try unmapping whole physical blocks, of if unmap using ws16 is not supported we test for all and they should all fail */ - if (lbpws == 1 && i % lbppb) { + if (lbp->lbpws == 1 && i % lbppb) { continue; } task = iscsi_writesame16_sync(iscsi, lun, 0, @@ -135,7 +130,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) ret = -2; goto finished; } - if (lbpws) { + if (lbp->lbpws) { if (task->status != SCSI_STATUS_GOOD) { printf("[FAILED]\n"); printf("WRITESAME16 command: failed with sense. %s\n", iscsi_get_error(iscsi)); @@ -162,13 +157,13 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) /* unmap the last 1 - 256 blocks at the end of the LUN */ printf("Unmapping last 1-256 blocks ... "); - if (lbpws == 0) { + if (lbp->lbpws == 0) { printf("(Should all fail since LBPWS is 0) "); } for (i=1; i<=256; i++) { /* only try unmapping whole physical blocks, of if unmap using ws16 is not supported we test for all and they should all fail */ - if (lbpws == 1 && i % lbppb) { + if (lbp->lbpws == 1 && i % lbppb) { continue; } @@ -182,7 +177,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) ret = -1; goto finished; } - if (lbpws) { + if (lbp->lbpws) { if (task->status != SCSI_STATUS_GOOD) { printf("[FAILED]\n"); printf("WRITESAME16 command: failed with sense. %s\n", iscsi_get_error(iscsi)); @@ -233,7 +228,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) /* Test UNMAP=1 and ANCHOR==1 */ printf("Try UNMAP==1 and ANCHOR==1 ... "); - if (anc_sup == 0) { + if (lbp->anc_sup == 0) { printf("(ANC_SUP==0 so check condition expected) "); } task = iscsi_writesame16_sync(iscsi, lun, 0, @@ -246,7 +241,7 @@ int T0190_writesame16_unmap(const char *initiator, const char *url) ret = -1; goto finished; } - if (anc_sup == 0) { + if (lbp->anc_sup == 0) { if (task->status != SCSI_STATUS_CHECK_CONDITION || task->sense.key != SCSI_SENSE_ILLEGAL_REQUEST || task->sense.ascq != SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) { diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c index c566c34..80766e2 100644 --- a/test-tool/iscsi-support.c +++ b/test-tool/iscsi-support.c @@ -47,6 +47,7 @@ const char *initiatorname2 = const char *tgt_url; struct scsi_inquiry_standard *inq; +struct scsi_inquiry_logical_block_provisioning *inq_lbp; struct scsi_readcapacity16 *rc16; size_t block_size; @@ -54,9 +55,6 @@ uint64_t num_blocks; int lbppb; enum scsi_inquiry_peripheral_device_type device_type; int data_loss; -int anc_sup; -int lbpws10; -int lbpws; int readonly; int sbc3_support; int maximum_transfer_length; diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h index 292a919..c48414c 100644 --- a/test-tool/iscsi-support.h +++ b/test-tool/iscsi-support.h @@ -88,7 +88,7 @@ do { \ #define CHECK_FOR_LBPWS10 \ do { \ - if (lbpws10 == 0) { \ + if (inq_lbp->lbpws10 == 0) { \ logging(LOG_VERBOSE, "[SKIPPED] Logical unit does not" \ " have LBPWS10. Skipping test"); \ CU_PASS("[SKIPPED] Logical unit does not have LBPWS10." \ @@ -99,7 +99,7 @@ do { \ #define CHECK_FOR_LBPWS \ do { \ - if (lbpws == 0) { \ + if (inq_lbp->lbpws == 0) { \ logging(LOG_VERBOSE, "[SKIPPED] Logical unit does not" \ " have LBPWS. Skipping test"); \ CU_PASS("[SKIPPED] Logical unit does not have LBPWS." \ @@ -129,15 +129,13 @@ do { \ } while (0); extern struct scsi_inquiry_standard *inq; +extern struct scsi_inquiry_logical_block_provisioning *inq_lbp; extern struct scsi_readcapacity16 *rc16; extern size_t block_size; extern uint64_t num_blocks; extern int lbppb; extern int data_loss; -extern int anc_sup; -extern int lbpws10; -extern int lbpws; extern int readonly; extern int sbc3_support; extern int maximum_transfer_length; diff --git a/test-tool/iscsi-test-cu.c b/test-tool/iscsi-test-cu.c index 620a768..6c84642 100644 --- a/test-tool/iscsi-test-cu.c +++ b/test-tool/iscsi-test-cu.c @@ -861,6 +861,7 @@ main(int argc, char *argv[]) int res; struct scsi_readcapacity10 *rc10; struct scsi_task *inq_task; + struct scsi_task *inq_lbp_task = NULL; struct scsi_task *rc16_task; int full_size; int is_usb; @@ -1049,37 +1050,27 @@ main(int argc, char *argv[]) /* if thin provisioned we also need to read the VPD page for it */ if (rc16 && rc16->lbpme != 0){ - struct scsi_inquiry_logical_block_provisioning *inq_lbp; - - task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, 64); - if (task == NULL || task->status != SCSI_STATUS_GOOD) { + inq_lbp_task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, 64); + if (inq_lbp_task == NULL || inq_lbp_task->status != SCSI_STATUS_GOOD) { printf("Inquiry command failed : %s\n", iscsi_get_error(iscsic)); return -1; } - full_size = scsi_datain_getfullsize(task); - if (full_size > task->datain.size) { - scsi_free_scsi_task(task); + full_size = scsi_datain_getfullsize(inq_lbp_task); + if (full_size > inq_lbp_task->datain.size) { + scsi_free_scsi_task(inq_lbp_task); /* we need more data for the full list */ - if ((task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, full_size)) == NULL) { + if ((inq_lbp_task = iscsi_inquiry_sync(iscsic, lun, 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, full_size)) == NULL) { printf("Inquiry command failed : %s\n", iscsi_get_error(iscsic)); - scsi_free_scsi_task(task); return -1; } } - inq_lbp = scsi_datain_unmarshall(task); + inq_lbp = scsi_datain_unmarshall(inq_lbp_task); if (inq_lbp == NULL) { printf("failed to unmarshall inquiry datain blob\n"); - scsi_free_scsi_task(task); return -1; } - - lbpws10 = inq_lbp->lbpws10; - lbpws = inq_lbp->lbpws; - anc_sup = inq_lbp->anc_sup; - - scsi_free_scsi_task(task); } @@ -1145,6 +1136,7 @@ main(int argc, char *argv[]) free(discard_const(tgt_url)); scsi_free_scsi_task(inq_task); + scsi_free_scsi_task(inq_lbp_task); scsi_free_scsi_task(rc16_task); return 0; diff --git a/test-tool/test_inquiry_block_limits.c b/test-tool/test_inquiry_block_limits.c index 7e26460..f643b20 100644 --- a/test-tool/test_inquiry_block_limits.c +++ b/test-tool/test_inquiry_block_limits.c @@ -30,7 +30,7 @@ test_inquiry_block_limits(void) int ret, expected_pl; struct scsi_inquiry_block_limits *inq_bl; struct scsi_task *bl_task = NULL; - struct scsi_inquiry_logical_block_provisioning *inq_lbp = NULL; + struct scsi_inquiry_logical_block_provisioning *lbp = NULL; struct scsi_task *lbp_task = NULL; logging(LOG_VERBOSE, LOG_BLANK_LINE); @@ -97,14 +97,14 @@ test_inquiry_block_limits(void) 1, SCSI_INQUIRY_PAGECODE_LOGICAL_BLOCK_PROVISIONING, 64, &lbp_task); if (ret == 0) { - inq_lbp = scsi_datain_unmarshall(lbp_task); - if (inq_lbp == NULL) { + lbp = scsi_datain_unmarshall(lbp_task); + if (lbp == NULL) { logging(LOG_NORMAL, "[FAILURE] failed to unmarshall " "inquiry datain blob."); } } - if (inq_lbp && inq_lbp->lbpu) { + if (lbp && lbp->lbpu) { /* We support UNMAP so MAXIMUM UNMAP LBA COUNT and * MAXIMUM UNMAP BLOCK DESCRIPTOR COUNT. * They must be > 0. diff --git a/test-tool/test_writesame10_unmap.c b/test-tool/test_writesame10_unmap.c index b28a074..7d99cd1 100644 --- a/test-tool/test_writesame10_unmap.c +++ b/test-tool/test_writesame10_unmap.c @@ -104,7 +104,7 @@ test_writesame10_unmap(void) - if (anc_sup) { + if (inq_lbp->anc_sup) { logging(LOG_VERBOSE, "Test WRITESAME10 ANCHOR==1 + UNMAP==0"); ret = writesame10(iscsic, tgt_lun, 0, block_size, 1, diff --git a/test-tool/test_writesame16_unmap.c b/test-tool/test_writesame16_unmap.c index 6df98ea..1cf86b7 100644 --- a/test-tool/test_writesame16_unmap.c +++ b/test-tool/test_writesame16_unmap.c @@ -105,7 +105,7 @@ test_writesame16_unmap(void) - if (anc_sup) { + if (inq_lbp->anc_sup) { logging(LOG_VERBOSE, "Test WRITESAME16 ANCHOR==1 + UNMAP==0"); ret = writesame16(iscsic, tgt_lun, 0, block_size, 1,