Fix a segfault in the old T0184 WS10 test
This commit is contained in:
@@ -74,6 +74,12 @@ int T0184_writesame10_0blocks(const char *initiator, const char *url)
|
|||||||
ret = -2;
|
ret = -2;
|
||||||
goto finished;
|
goto finished;
|
||||||
}
|
}
|
||||||
|
if (inq_bl == NULL) {
|
||||||
|
printf("[SKIPPED]\n");
|
||||||
|
printf("Target does not support block limits VPD\n");
|
||||||
|
ret = -2;
|
||||||
|
goto finished;
|
||||||
|
}
|
||||||
if ((!inq_bl->wsnz && task->status != SCSI_STATUS_GOOD) ||
|
if ((!inq_bl->wsnz && task->status != SCSI_STATUS_GOOD) ||
|
||||||
(inq_bl->wsnz && task->status != SCSI_STATUS_CHECK_CONDITION)) {
|
(inq_bl->wsnz && task->status != SCSI_STATUS_CHECK_CONDITION)) {
|
||||||
printf("[FAILED]\n");
|
printf("[FAILED]\n");
|
||||||
|
|||||||
@@ -315,6 +315,7 @@ int main(int argc, char *argv[])
|
|||||||
struct iscsi_context *iscsi;
|
struct iscsi_context *iscsi;
|
||||||
struct scsi_task *task;
|
struct scsi_task *task;
|
||||||
struct scsi_task *inq_task;
|
struct scsi_task *inq_task;
|
||||||
|
struct scsi_task *inq_bl_task;
|
||||||
struct scsi_task *rc16_task;
|
struct scsi_task *rc16_task;
|
||||||
struct scsi_readcapacity10 *rc10;
|
struct scsi_readcapacity10 *rc10;
|
||||||
int full_size;
|
int full_size;
|
||||||
@@ -481,6 +482,30 @@ int main(int argc, char *argv[])
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* try reading block limits vpd */
|
||||||
|
inq_bl_task = iscsi_inquiry_sync(iscsi, lun, 1, SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, 64);
|
||||||
|
if (inq_bl_task && inq_bl_task->status != SCSI_STATUS_GOOD) {
|
||||||
|
scsi_free_scsi_task(inq_bl_task);
|
||||||
|
inq_bl_task = NULL;
|
||||||
|
}
|
||||||
|
if (inq_bl_task) {
|
||||||
|
full_size = scsi_datain_getfullsize(inq_bl_task);
|
||||||
|
if (full_size > inq_bl_task->datain.size) {
|
||||||
|
scsi_free_scsi_task(inq_bl_task);
|
||||||
|
|
||||||
|
if ((inq_bl_task = iscsi_inquiry_sync(iscsi, lun, 1, SCSI_INQUIRY_PAGECODE_BLOCK_LIMITS, full_size)) == NULL) {
|
||||||
|
printf("Inquiry command failed : %s\n", iscsi_get_error(iscsi));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inq_bl = scsi_datain_unmarshall(inq_bl_task);
|
||||||
|
if (inq_bl == NULL) {
|
||||||
|
printf("failed to unmarshall inquiry datain blob\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
num_failed = num_skipped = 0;
|
num_failed = num_skipped = 0;
|
||||||
for (test = &tests[0]; test->name; test++) {
|
for (test = &tests[0]; test->name; test++) {
|
||||||
@@ -518,6 +543,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
scsi_free_scsi_task(inq_task);
|
scsi_free_scsi_task(inq_task);
|
||||||
scsi_free_scsi_task(rc16_task);
|
scsi_free_scsi_task(rc16_task);
|
||||||
|
scsi_free_scsi_task(inq_bl_task);
|
||||||
iscsi_logout_sync(iscsi);
|
iscsi_logout_sync(iscsi);
|
||||||
iscsi_destroy_context(iscsi);
|
iscsi_destroy_context(iscsi);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user