Merge pull request #86 from sitsofe/writesame

Update WRITESAME tests and fix a logging typo
This commit is contained in:
Ronnie Sahlberg
2014-01-26 08:25:15 -08:00
4 changed files with 56 additions and 4 deletions

View File

@@ -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));

View File

@@ -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,

View File

@@ -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,

View File

@@ -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;
}