diff --git a/test-tool/iscsi-support.c b/test-tool/iscsi-support.c index aa9c73b..cba050f 100644 --- a/test-tool/iscsi-support.c +++ b/test-tool/iscsi-support.c @@ -172,6 +172,12 @@ static int check_result(const char *opcode, struct scsi_device *sdev, scsi_sense_ascq_str(ascq[0]), ascq[0]); return -1; } + if (status == SCSI_STATUS_RESERVATION_CONFLICT + && task->status != SCSI_STATUS_RESERVATION_CONFLICT) { + logging(LOG_NORMAL, "[FAILED] %s command should have failed " + "with RESERVATION_CONFLICT.", opcode); + return -1; + } /* did we get any of the expected ASCQs ?*/ if (status == SCSI_STATUS_CHECK_CONDITION) { int i; @@ -1259,41 +1265,6 @@ int sanitize(struct scsi_device *sdev, int immed, int ause, int sa, int param_le return ret; } -int sanitize_conflict(struct scsi_device *sdev, int immed, int ause, int sa, int param_len, struct iscsi_data *data) -{ - struct scsi_task *task; - - logging(LOG_VERBOSE, "Send SANITIZE (Expecting RESERVATION_CONFLICT) " - "IMMED:%d AUSE:%d SA:%d " - "PARAM_LEN:%d", - immed, ause, sa, param_len); - - task = iscsi_sanitize_sync(sdev->iscsi_ctx, sdev->iscsi_lun, immed, ause, sa, param_len, - data); - if (task == NULL) { - logging(LOG_NORMAL, - "[FAILED] Failed to send SANITIZE command: %s", - iscsi_get_error(sdev->iscsi_ctx)); - return -1; - } - if (task->status == SCSI_STATUS_GOOD) { - logging(LOG_NORMAL, - "[FAILED] SANITIZE successful but should have failed with RESERVATION_CONFLICT"); - scsi_free_scsi_task(task); - return -1; - } - - if (task->status != SCSI_STATUS_RESERVATION_CONFLICT) { - logging(LOG_NORMAL, "[FAILED] Expected RESERVATION CONFLICT. " - "Sense:%s", iscsi_get_error(sdev->iscsi_ctx)); - return -1; - } - - scsi_free_scsi_task(task); - logging(LOG_VERBOSE, "[OK] SANITIZE returned RESERVATION_CONFLICT."); - return 0; -} - int startstopunit(struct scsi_device *sdev, int immed, int pcm, int pc, int no_flush, int loej, int start, int status, enum scsi_sense_key key, int *ascq, int num_ascq) { struct scsi_task *task; diff --git a/test-tool/iscsi-support.h b/test-tool/iscsi-support.h index c9e4f28..cf6ae7c 100644 --- a/test-tool/iscsi-support.h +++ b/test-tool/iscsi-support.h @@ -41,6 +41,7 @@ extern const char *initiatorname2; #define EXPECT_WRITE_PROTECTED SCSI_STATUS_CHECK_CONDITION, SCSI_SENSE_DATA_PROTECTION, write_protect_ascqs, 3 #define EXPECT_SANITIZE SCSI_STATUS_CHECK_CONDITION, SCSI_SENSE_NOT_READY, sanitize_ascqs, 1 #define EXPECT_REMOVAL_PREVENTED SCSI_STATUS_CHECK_CONDITION, SCSI_SENSE_ILLEGAL_REQUEST, removal_ascqs, 1 +#define EXPECT_RESERVATION_CONFLICT SCSI_STATUS_RESERVATION_CONFLICT, 0, NULL, 0 int no_medium_ascqs[3]; int lba_oob_ascqs[1]; @@ -288,7 +289,6 @@ int release6(struct scsi_device *sdev); int reserve6(struct scsi_device *sdev); int reserve6_conflict(struct scsi_device *sdev); int sanitize(struct scsi_device *sdev, int immed, int ause, int sa, int param_len, struct iscsi_data *data, int status, enum scsi_sense_key key, int *ascq, int num_ascq); -int sanitize_conflict(struct scsi_device *sdev, int immed, int ause, int sa, int param_len, struct iscsi_data *data); int startstopunit(struct scsi_device *sdev, int immed, int pcm, int pc, int no_flush, int loej, int start, int status, enum scsi_sense_key key, int *ascq, int num_ascq); int synchronizecache10(struct scsi_device *sdev, uint32_t lba, int num_blocks, int sync_nv, int immed, int status, enum scsi_sense_key key, int *ascq, int num_ascq); int synchronizecache16(struct scsi_device *sdev, uint64_t lba, int num_blocks, int sync_nv, int immed, int status, enum scsi_sense_key key, int *ascq, int num_ascq); diff --git a/test-tool/test_sanitize_reservations.c b/test-tool/test_sanitize_reservations.c index 9a272a6..ce133e7 100644 --- a/test-tool/test_sanitize_reservations.c +++ b/test-tool/test_sanitize_reservations.c @@ -79,8 +79,9 @@ test_sanitize_reservations(void) data.data[1] = 0x00; data.data[2] = block_size >> 8; data.data[3] = block_size & 0xff; - ret = sanitize_conflict(sd, - 0, 0, SCSI_SANITIZE_OVERWRITE, data.size, &data); + ret = sanitize(sd, 0, 0, SCSI_SANITIZE_OVERWRITE, data.size, + &data, + EXPECT_RESERVATION_CONFLICT); CU_ASSERT_EQUAL(ret, 0); } @@ -94,8 +95,8 @@ test_sanitize_reservations(void) "implemented according to REPORT_SUPPORTED_OPCODES."); } else { logging(LOG_VERBOSE, "Test SANITIZE BLOCK_ERASE"); - ret = sanitize_conflict(sd, - 0, 0, SCSI_SANITIZE_BLOCK_ERASE, 0, NULL); + ret = sanitize(sd, 0, 0, SCSI_SANITIZE_BLOCK_ERASE, 0, NULL, + EXPECT_RESERVATION_CONFLICT); CU_ASSERT_EQUAL(ret, 0); } @@ -108,8 +109,8 @@ test_sanitize_reservations(void) "implemented according to REPORT_SUPPORTED_OPCODES."); } else { logging(LOG_VERBOSE, "Test SANITIZE CRYPTO_ERASE"); - ret = sanitize_conflict(sd, - 0, 0, SCSI_SANITIZE_CRYPTO_ERASE, 0, NULL); + ret = sanitize(sd, 0, 0, SCSI_SANITIZE_CRYPTO_ERASE, 0, NULL, + EXPECT_RESERVATION_CONFLICT); CU_ASSERT_EQUAL(ret, 0); }