Merge pull request #86 from sitsofe/writesame
Update WRITESAME tests and fix a logging typo
This commit is contained in:
@@ -4848,6 +4848,7 @@ int
|
||||
writesame10(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen, int num, int anchor, int unmap_flag, int wrprotect, int group, unsigned char *data)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
uint64_t realdatalen;
|
||||
|
||||
logging(LOG_VERBOSE, "Send WRITESAME10 LBA:%d blocks:%d "
|
||||
"wrprotect:%d anchor:%d unmap:%d group:%d",
|
||||
@@ -4874,6 +4875,26 @@ writesame10(struct iscsi_context *iscsi, int lun, uint32_t lba, uint32_t datalen
|
||||
scsi_free_scsi_task(task);
|
||||
return -2;
|
||||
}
|
||||
if (task->status == SCSI_STATUS_CHECK_CONDITION
|
||||
&& task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST
|
||||
&& task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) {
|
||||
if (inq_bl->wsnz == 1 && datalen == 0) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] Target does not support WRITESAME10 with NUMBER OF LOGICAL BLOCKS == 0");
|
||||
scsi_free_scsi_task(task);
|
||||
return -3;
|
||||
}
|
||||
|
||||
if (datalen == 0) {
|
||||
realdatalen = num_blocks;
|
||||
} else {
|
||||
realdatalen = datalen;
|
||||
}
|
||||
if (inq_bl->max_ws_len > 0 && realdatalen > inq_bl->max_ws_len) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] Number of WRITESAME10 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH");
|
||||
scsi_free_scsi_task(task);
|
||||
return -4;
|
||||
}
|
||||
}
|
||||
if (task->status != SCSI_STATUS_GOOD) {
|
||||
logging(LOG_NORMAL, "[FAILED] WRITESAME10 command: "
|
||||
"failed with sense. %s", iscsi_get_error(iscsi));
|
||||
@@ -5100,6 +5121,7 @@ int
|
||||
writesame16(struct iscsi_context *iscsi, int lun, uint64_t lba, uint32_t datalen, int num, int anchor, int unmap_flag, int wrprotect, int group, unsigned char *data)
|
||||
{
|
||||
struct scsi_task *task;
|
||||
uint64_t realdatalen;
|
||||
|
||||
logging(LOG_VERBOSE, "Send WRITESAME16 LBA:%" PRIu64 " blocks:%d "
|
||||
"wrprotect:%d anchor:%d unmap:%d group:%d",
|
||||
@@ -5126,6 +5148,26 @@ writesame16(struct iscsi_context *iscsi, int lun, uint64_t lba, uint32_t datalen
|
||||
scsi_free_scsi_task(task);
|
||||
return -2;
|
||||
}
|
||||
if (task->status == SCSI_STATUS_CHECK_CONDITION
|
||||
&& task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST
|
||||
&& task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB) {
|
||||
if (inq_bl->wsnz == 1 && datalen == 0) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] Target does not support WRITESAME16 with NUMBER OF LOGICAL BLOCKS == 0");
|
||||
scsi_free_scsi_task(task);
|
||||
return -3;
|
||||
}
|
||||
|
||||
if (datalen == 0) {
|
||||
realdatalen = num_blocks;
|
||||
} else {
|
||||
realdatalen = datalen;
|
||||
}
|
||||
if (inq_bl->max_ws_len > 0 && realdatalen > inq_bl->max_ws_len) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] Number of WRITESAME16 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH");
|
||||
scsi_free_scsi_task(task);
|
||||
return -4;
|
||||
}
|
||||
}
|
||||
if (task->status != SCSI_STATUS_GOOD) {
|
||||
logging(LOG_NORMAL, "[FAILED] WRITESAME16 command: "
|
||||
"failed with sense. %s", iscsi_get_error(iscsi));
|
||||
|
||||
@@ -44,8 +44,13 @@ test_writesame10_0blocks(void)
|
||||
if (ret == -2) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME10. Skipping test");
|
||||
return;
|
||||
} else if (ret == -3) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME10 with NUMBER OF LOGICAL BLOCKS == 0");
|
||||
} else if (ret == -4) {
|
||||
CU_PASS("[SKIPPED] Number of WRITESAME10 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH");
|
||||
} else {
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME10 0-blocks one block past end-of-LUN");
|
||||
ret = writesame10_lbaoutofrange(iscsic, tgt_lun, num_blocks + 1,
|
||||
|
||||
@@ -37,11 +37,16 @@ test_writesame16_0blocks(void)
|
||||
block_size, 0,
|
||||
0, 0, 0, 0, NULL);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITEVERIFY16 is not implemented.");
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
} else if (ret == -3) {
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16 with NUMBER OF LOGICAL BLOCKS == 0");
|
||||
} else if (ret == -4) {
|
||||
CU_PASS("[SKIPPED] Number of WRITESAME16 logical blocks to be written exceeds MAXIMUM WRITE SAME LENGTH");
|
||||
} else {
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
}
|
||||
CU_ASSERT_EQUAL(ret, 0);
|
||||
|
||||
logging(LOG_VERBOSE, "Test WRITESAME16 0-blocks one block past end-of-LUN");
|
||||
ret = writesame16_lbaoutofrange(iscsic, tgt_lun, num_blocks + 1,
|
||||
|
||||
@@ -44,7 +44,7 @@ test_writesame16_simple(void)
|
||||
block_size, i,
|
||||
0, 0, 0, 0, buf);
|
||||
if (ret == -2) {
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITEVERIFY16 is not implemented.");
|
||||
logging(LOG_NORMAL, "[SKIPPED] WRITESAME16 is not implemented.");
|
||||
CU_PASS("[SKIPPED] Target does not support WRITESAME16. Skipping test");
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user