test_write*_residuals: Fix overflow tests
RFC 3720 is not clear about whether a target should return SUCCESS
or CHECK CONDITION if SPDTL > EDTL. Hence accept both. See also
Fred Knight, Re: [Ips] Data Out residual overflow/underflow handling,
IETF mailing list archive, 21 September 2012
(http://www.ietf.org/mail-archive/web/ips/current/msg02756.html).
This patch reworks the changes introduced via commit
cfce944b35 and applies similar changes
to the other WRITE and WRITE VERIFY tests.
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
This commit is contained in:
committed by
Ronnie Sahlberg
parent
6a7135a9dd
commit
e3e4d8730c
@@ -33,7 +33,7 @@ test_write10_residuals(void)
|
|||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
struct iscsi_data data;
|
struct iscsi_data data;
|
||||||
int ret;
|
int ret, ok;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -170,15 +170,15 @@ test_write10_residuals(void)
|
|||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
if (task->status != SCSI_STATUS_GOOD
|
ok = task->status == SCSI_STATUS_GOOD ||
|
||||||
&& !(task->status == SCSI_STATUS_CHECK_CONDITION
|
(task->status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
&& task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST
|
task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
&& task->sense.ascq ==
|
task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT);
|
||||||
SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT)) {
|
if (!ok) {
|
||||||
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
||||||
iscsi_get_error(sd->iscsi_ctx));
|
iscsi_get_error(sd->iscsi_ctx));
|
||||||
CU_ASSERT(0);
|
|
||||||
}
|
}
|
||||||
|
CU_ASSERT(ok);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ test_write12_residuals(void)
|
|||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
struct iscsi_data data;
|
struct iscsi_data data;
|
||||||
int ret;
|
int ret, ok;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -170,16 +170,15 @@ test_write12_residuals(void)
|
|||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
if (task->status != SCSI_STATUS_GOOD
|
ok = task->status == SCSI_STATUS_GOOD ||
|
||||||
&& !(task->status == SCSI_STATUS_CHECK_CONDITION
|
(task->status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
&& task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST
|
task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
&& task->sense.ascq ==
|
task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT);
|
||||||
SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT))
|
if (!ok) {
|
||||||
{
|
|
||||||
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
||||||
iscsi_get_error(sd->iscsi_ctx));
|
iscsi_get_error(sd->iscsi_ctx));
|
||||||
CU_ASSERT(0);
|
|
||||||
}
|
}
|
||||||
|
CU_ASSERT(ok);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ test_write16_residuals(void)
|
|||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
struct iscsi_data data;
|
struct iscsi_data data;
|
||||||
int ret;
|
int ret, ok;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -170,11 +170,15 @@ test_write16_residuals(void)
|
|||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
ok = task->status == SCSI_STATUS_GOOD ||
|
||||||
|
(task->status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
|
task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
|
task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT);
|
||||||
|
if (!ok) {
|
||||||
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
||||||
iscsi_get_error(sd->iscsi_ctx));
|
iscsi_get_error(sd->iscsi_ctx));
|
||||||
}
|
}
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT(ok);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ test_writeverify10_residuals(void)
|
|||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
struct iscsi_data data;
|
struct iscsi_data data;
|
||||||
int ret;
|
int ret, ok;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -179,11 +179,15 @@ test_writeverify10_residuals(void)
|
|||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
ok = task->status == SCSI_STATUS_GOOD ||
|
||||||
|
(task->status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
|
task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
|
task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT);
|
||||||
|
if (!ok) {
|
||||||
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
||||||
iscsi_get_error(sd->iscsi_ctx));
|
iscsi_get_error(sd->iscsi_ctx));
|
||||||
}
|
}
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT(ok);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ test_writeverify12_residuals(void)
|
|||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
struct iscsi_data data;
|
struct iscsi_data data;
|
||||||
int ret;
|
int ret, ok;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -179,11 +179,15 @@ test_writeverify12_residuals(void)
|
|||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
ok = task->status == SCSI_STATUS_GOOD ||
|
||||||
|
(task->status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
|
task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
|
task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT);
|
||||||
|
if (!ok) {
|
||||||
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
||||||
iscsi_get_error(sd->iscsi_ctx));
|
iscsi_get_error(sd->iscsi_ctx));
|
||||||
}
|
}
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT(ok);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ test_writeverify16_residuals(void)
|
|||||||
struct scsi_task *task_ret;
|
struct scsi_task *task_ret;
|
||||||
unsigned char buf[10000];
|
unsigned char buf[10000];
|
||||||
struct iscsi_data data;
|
struct iscsi_data data;
|
||||||
int ret;
|
int ret, ok;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
logging(LOG_VERBOSE, LOG_BLANK_LINE);
|
||||||
@@ -188,11 +188,15 @@ test_writeverify16_residuals(void)
|
|||||||
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
CU_ASSERT_PTR_NOT_NULL(task_ret);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
logging(LOG_VERBOSE, "Verify that the target returned SUCCESS");
|
||||||
if (task->status != SCSI_STATUS_GOOD) {
|
ok = task->status == SCSI_STATUS_GOOD ||
|
||||||
|
(task->status == SCSI_STATUS_CHECK_CONDITION &&
|
||||||
|
task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST &&
|
||||||
|
task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_INFORMATION_UNIT);
|
||||||
|
if (!ok) {
|
||||||
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
logging(LOG_VERBOSE, "[FAILED] Target returned error %s",
|
||||||
iscsi_get_error(sd->iscsi_ctx));
|
iscsi_get_error(sd->iscsi_ctx));
|
||||||
}
|
}
|
||||||
CU_ASSERT_EQUAL(task->status, SCSI_STATUS_GOOD);
|
CU_ASSERT(ok);
|
||||||
|
|
||||||
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
logging(LOG_VERBOSE, "Verify residual overflow flag is set");
|
||||||
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
if (task->residual_status != SCSI_RESIDUAL_OVERFLOW) {
|
||||||
|
|||||||
Reference in New Issue
Block a user