diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c index 08f9fba..498e481 100644 --- a/test-tool/iscsi-support.c +++ b/test-tool/iscsi-support.c @@ -2074,6 +2074,35 @@ read6_lbaoutofrange(struct iscsi_context *iscsi, int lun, uint32_t lba, return 0; } +struct scsi_task* +read10_task(struct iscsi_context *iscsi, int lun, uint32_t lba, + uint32_t datalen, int blocksize, int rdprotect, + int dpo, int fua, int fua_nv, int group, + unsigned char *data) +{ + struct scsi_task *task; + + logging(LOG_VERBOSE, "Send READ10 LBA:%d blocks:%d rdprotect:%d " + "dpo:%d fua:%d fua_nv:%d group:%d", + lba, datalen / blocksize, rdprotect, + dpo, fua, fua_nv, group); + + task = iscsi_read10_sync(iscsi, lun, lba, datalen, blocksize, + rdprotect, dpo, fua, fua_nv, group); + if (task == NULL) { + logging(LOG_NORMAL, "[FAILED] Failed to send READ10 command: %s", + iscsi_get_error(iscsi)); + return NULL; + } + + if (data != NULL) { + memcpy(data, task->datain.data, task->datain.size); + } + + logging(LOG_VERBOSE, "[OK] READ10 returned SUCCESS."); + return task; +} + int read10(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h index a2ac902..8c087cd 100644 --- a/test-tool/iscsi-support.h +++ b/test-tool/iscsi-support.h @@ -243,6 +243,7 @@ int prefetch16_nomedium(struct iscsi_context *iscsi, int lun, uint64_t lba, int int preventallow(struct iscsi_context *iscsi, int lun, int prevent); int read6(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, unsigned char *data); int read6_lbaoutofrange(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, unsigned char *data); +struct scsi_task *read10_task(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); int read10(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); int read10_invalidfieldincdb(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); int read10_lbaoutofrange(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int blocksize, int rdprotect, int dpo, int fua, int fua_nv, int group, unsigned char *data); diff --git a/test-tool/test_sanitize_block_erase.c b/test-tool/test_sanitize_block_erase.c index 1477303..0ea9f97 100644 --- a/test-tool/test_sanitize_block_erase.c +++ b/test-tool/test_sanitize_block_erase.c @@ -33,15 +33,8 @@ check_wabereq(void) struct scsi_task *task_ret; logging(LOG_VERBOSE, "Read one block from LBA 0"); - task_ret = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task_ret); - memset(task_ret, 0, sizeof(struct scsi_task)); - task_ret->cdb[0] = SCSI_OPCODE_READ10; - task_ret->cdb[8] = 1; - task_ret->cdb_size = 10; - task_ret->xfer_dir = SCSI_XFER_READ; - task_ret->expxferlen = 0; - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task_ret, NULL); + task_ret = read10_task(iscsic, tgt_lun, 0, block_size, block_size, + 0, 0, 0, 0, 0, NULL); CU_ASSERT_PTR_NOT_NULL(task_ret); CU_ASSERT_NOT_EQUAL(task_ret->status, SCSI_STATUS_CANCELLED); diff --git a/test-tool/test_sanitize_crypto_erase.c b/test-tool/test_sanitize_crypto_erase.c index 3592bf6..dee6ae1 100644 --- a/test-tool/test_sanitize_crypto_erase.c +++ b/test-tool/test_sanitize_crypto_erase.c @@ -32,15 +32,8 @@ check_wacereq(void) struct scsi_task *task_ret; logging(LOG_VERBOSE, "Read one block from LBA 0"); - task_ret = malloc(sizeof(struct scsi_task)); - CU_ASSERT_PTR_NOT_NULL(task_ret); - memset(task_ret, 0, sizeof(struct scsi_task)); - task_ret->cdb[0] = SCSI_OPCODE_READ10; - task_ret->cdb[8] = 1; - task_ret->cdb_size = 10; - task_ret->xfer_dir = SCSI_XFER_READ; - task_ret->expxferlen = 0; - task_ret = iscsi_scsi_command_sync(iscsic, tgt_lun, task_ret, NULL); + task_ret = read10_task(iscsic, tgt_lun, 0, block_size, block_size, + 0, 0, 0, 0, 0, NULL); CU_ASSERT_PTR_NOT_NULL(task_ret); CU_ASSERT_NOT_EQUAL(task_ret->status, SCSI_STATUS_CANCELLED);