examples: iscsi-dd add option to ignore errors

Signed-off-by: Peter Lieven <pl@kamp.de>
This commit is contained in:
Peter Lieven
2014-06-16 18:29:24 +02:00
parent c2a285760d
commit 8e7b0a71bb

View File

@@ -44,6 +44,7 @@ struct client {
uint64_t dst_num_blocks; uint64_t dst_num_blocks;
int use_16_for_rw; int use_16_for_rw;
int progress; int progress;
int ignore_errors;
}; };
@@ -65,10 +66,13 @@ void write_cb(struct iscsi_context *iscsi, int status, void *command_data, void
scsi_free_scsi_task(task); scsi_free_scsi_task(task);
exit(10); exit(10);
} }
if (status != SCSI_STATUS_GOOD) { if (status != SCSI_STATUS_GOOD) {
printf("Write10/16 failed with %s\n", iscsi_get_error(iscsi)); printf("Write10/16 failed with %s\n", iscsi_get_error(iscsi));
scsi_free_scsi_task(task); if (!client->ignore_errors) {
exit(10); scsi_free_scsi_task(task);
exit(10);
}
} }
client->in_flight--; client->in_flight--;
@@ -100,9 +104,18 @@ void read_cb(struct iscsi_context *iscsi _U_, int status, void *command_data, vo
if (status == SCSI_STATUS_CHECK_CONDITION) { if (status == SCSI_STATUS_CHECK_CONDITION) {
printf("Read10/16 failed with sense key:%d ascq:%04x\n", task->sense.key, task->sense.ascq); printf("Read10/16 failed with sense key:%d ascq:%04x\n", task->sense.key, task->sense.ascq);
scsi_free_scsi_task(task);
exit(10); exit(10);
} }
if (status != SCSI_STATUS_GOOD) {
printf("Read10/16 failed with %s\n", iscsi_get_error(iscsi));
if (!client->ignore_errors) {
scsi_free_scsi_task(task);
exit(10);
}
}
wt = malloc(sizeof(struct write_task)); wt = malloc(sizeof(struct write_task));
wt->rt = task; wt->rt = task;
wt->client = client; wt->client = client;
@@ -190,13 +203,14 @@ int main(int argc, char *argv[])
{"16", no_argument, NULL, '6'}, {"16", no_argument, NULL, '6'},
{"max", required_argument, NULL, 'm'}, {"max", required_argument, NULL, 'm'},
{"blocks", required_argument, NULL, 'b'}, {"blocks", required_argument, NULL, 'b'},
{"ignore-errors", no_argument, NULL, 'n'},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
int option_index; int option_index;
memset(&client, 0, sizeof(client)); memset(&client, 0, sizeof(client));
while ((c = getopt_long(argc, argv, "d:s:i:m:b:p6", long_options, while ((c = getopt_long(argc, argv, "d:s:i:m:b:p6n", long_options,
&option_index)) != -1) { &option_index)) != -1) {
switch (c) { switch (c) {
case 'd': case 'd':
@@ -220,6 +234,9 @@ int main(int argc, char *argv[])
case 'b': case 'b':
blocks_per_io = atoi(optarg); blocks_per_io = atoi(optarg);
break; break;
case 'n':
client.ignore_errors = 1;
break;
default: default:
fprintf(stderr, "Unrecognized option '%c'\n\n", c); fprintf(stderr, "Unrecognized option '%c'\n\n", c);
exit(1); exit(1);