Lines Matching refs:iTask
185 struct IscsiTask *iTask = opaque; in iscsi_co_generic_bh_cb() local
187 iTask->complete = 1; in iscsi_co_generic_bh_cb()
188 aio_co_wake(iTask->co); in iscsi_co_generic_bh_cb()
193 struct IscsiTask *iTask = opaque; in iscsi_retry_timer_expired() local
194 iTask->complete = 1; in iscsi_retry_timer_expired()
195 if (iTask->co) { in iscsi_retry_timer_expired()
196 aio_co_wake(iTask->co); in iscsi_retry_timer_expired()
240 struct IscsiTask *iTask = opaque; in iscsi_co_generic_cb() local
243 iTask->status = status; in iscsi_co_generic_cb()
244 iTask->do_retry = 0; in iscsi_co_generic_cb()
245 iTask->err_code = 0; in iscsi_co_generic_cb()
246 iTask->task = task; in iscsi_co_generic_cb()
249 iTask->err_code = -EIO; in iscsi_co_generic_cb()
250 if (iTask->retries++ < ISCSI_CMD_RETRIES) { in iscsi_co_generic_cb()
255 exp_random(iscsi_retry_times[iTask->retries - 1]); in iscsi_co_generic_cb()
260 iTask->iscsilun->request_timed_out = true; in iscsi_co_generic_cb()
264 iTask->retries, retry_time, in iscsi_co_generic_cb()
266 aio_timer_init(iTask->iscsilun->aio_context, in iscsi_co_generic_cb()
267 &iTask->retry_timer, QEMU_CLOCK_REALTIME, in iscsi_co_generic_cb()
268 SCALE_MS, iscsi_retry_timer_expired, iTask); in iscsi_co_generic_cb()
269 timer_mod(&iTask->retry_timer, in iscsi_co_generic_cb()
271 iTask->do_retry = 1; in iscsi_co_generic_cb()
278 iTask->do_retry = 1; in iscsi_co_generic_cb()
280 iTask->err_code = -error; in iscsi_co_generic_cb()
281 iTask->err_str = g_strdup(iscsi_get_error(iscsi)); in iscsi_co_generic_cb()
287 if (iTask->co) { in iscsi_co_generic_cb()
288 replay_bh_schedule_oneshot_event(iTask->iscsilun->aio_context, in iscsi_co_generic_cb()
289 iscsi_co_generic_bh_cb, iTask); in iscsi_co_generic_cb()
291 iTask->complete = 1; in iscsi_co_generic_cb()
296 iscsi_co_init_iscsitask(IscsiLun *iscsilun, struct IscsiTask *iTask) in iscsi_co_init_iscsitask() argument
298 *iTask = (struct IscsiTask) { in iscsi_co_init_iscsitask()
592 static void coroutine_fn iscsi_co_wait_for_task(IscsiTask *iTask, in iscsi_co_wait_for_task() argument
595 while (!iTask->complete) { in iscsi_co_wait_for_task()
608 struct IscsiTask iTask; in iscsi_co_writev() local
627 iscsi_co_init_iscsitask(iscsilun, &iTask); in iscsi_co_writev()
632 iTask.task = iscsi_write16_iov_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_writev()
635 iscsi_co_generic_cb, &iTask, in iscsi_co_writev()
638 iTask.task = iscsi_write10_iov_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_writev()
641 iscsi_co_generic_cb, &iTask, in iscsi_co_writev()
645 iTask.task = iscsi_write16_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_writev()
648 iscsi_co_generic_cb, &iTask); in iscsi_co_writev()
650 iTask.task = iscsi_write10_task(iscsilun->iscsi, iscsilun->lun, lba,
653 iscsi_co_generic_cb, &iTask);
656 if (iTask.task == NULL) {
661 scsi_task_set_iov_out(iTask.task, (struct scsi_iovec *) iov->iov,
664 iscsi_co_wait_for_task(&iTask, iscsilun);
666 if (iTask.task != NULL) {
667 scsi_free_scsi_task(iTask.task);
668 iTask.task = NULL;
671 if (iTask.do_retry) {
672 iTask.complete = 0;
676 if (iTask.status != SCSI_STATUS_GOOD) {
680 iTask.err_str);
681 r = iTask.err_code;
690 g_free(iTask.err_str);
705 struct IscsiTask iTask; in iscsi_co_block_status() local
709 iscsi_co_init_iscsitask(iscsilun, &iTask); in iscsi_co_block_status()
732 &iTask) == NULL) { in iscsi_co_block_status()
736 iscsi_co_wait_for_task(&iTask, iscsilun); in iscsi_co_block_status()
738 if (iTask.do_retry) { in iscsi_co_block_status()
739 if (iTask.task != NULL) { in iscsi_co_block_status()
740 scsi_free_scsi_task(iTask.task); in iscsi_co_block_status()
741 iTask.task = NULL; in iscsi_co_block_status()
743 iTask.complete = 0; in iscsi_co_block_status()
747 if (iTask.status != SCSI_STATUS_GOOD) { in iscsi_co_block_status()
753 lba, iTask.err_str); in iscsi_co_block_status()
757 lbas = scsi_datain_unmarshall(iTask.task); in iscsi_co_block_status()
788 g_free(iTask.err_str); in iscsi_co_block_status()
790 if (iTask.task != NULL) { in iscsi_co_block_status()
791 scsi_free_scsi_task(iTask.task); in iscsi_co_block_status()
804 struct IscsiTask iTask; in iscsi_co_readv() local
859 iscsi_co_init_iscsitask(iscsilun, &iTask); in iscsi_co_readv()
864 iTask.task = iscsi_read16_iov_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_readv()
867 iscsi_co_generic_cb, &iTask, in iscsi_co_readv()
870 iTask.task = iscsi_read10_iov_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_readv()
874 iscsi_co_generic_cb, &iTask, in iscsi_co_readv()
878 iTask.task = iscsi_read16_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_readv()
881 iscsi_co_generic_cb, &iTask); in iscsi_co_readv()
883 iTask.task = iscsi_read10_task(iscsilun->iscsi, iscsilun->lun, lba,
887 iscsi_co_generic_cb, &iTask);
890 if (iTask.task == NULL) {
895 scsi_task_set_iov_in(iTask.task, (struct scsi_iovec *) iov->iov, iov->niov);
898 iscsi_co_wait_for_task(&iTask, iscsilun);
899 if (iTask.task != NULL) {
900 scsi_free_scsi_task(iTask.task);
901 iTask.task = NULL;
904 if (iTask.do_retry) {
905 iTask.complete = 0;
909 if (iTask.status != SCSI_STATUS_GOOD) {
911 lba, iTask.err_str);
912 r = iTask.err_code;
916 g_free(iTask.err_str);
923 struct IscsiTask iTask; in iscsi_co_flush() local
926 iscsi_co_init_iscsitask(iscsilun, &iTask); in iscsi_co_flush()
930 0, iscsi_co_generic_cb, &iTask) == NULL) { in iscsi_co_flush()
935 iscsi_co_wait_for_task(&iTask, iscsilun); in iscsi_co_flush()
937 if (iTask.task != NULL) { in iscsi_co_flush()
938 scsi_free_scsi_task(iTask.task); in iscsi_co_flush()
939 iTask.task = NULL; in iscsi_co_flush()
942 if (iTask.do_retry) { in iscsi_co_flush()
943 iTask.complete = 0; in iscsi_co_flush()
947 if (iTask.status != SCSI_STATUS_GOOD) { in iscsi_co_flush()
948 error_report("iSCSI SYNCHRONIZECACHE10 failed: %s", iTask.err_str); in iscsi_co_flush()
949 r = iTask.err_code; in iscsi_co_flush()
953 g_free(iTask.err_str); in iscsi_co_flush()
1148 struct IscsiTask iTask; in iscsi_co_pdiscard() local
1170 iscsi_co_init_iscsitask(iscsilun, &iTask); in iscsi_co_pdiscard()
1174 iscsi_co_generic_cb, &iTask) == NULL) { in iscsi_co_pdiscard()
1179 iscsi_co_wait_for_task(&iTask, iscsilun); in iscsi_co_pdiscard()
1181 if (iTask.task != NULL) { in iscsi_co_pdiscard()
1182 scsi_free_scsi_task(iTask.task); in iscsi_co_pdiscard()
1183 iTask.task = NULL; in iscsi_co_pdiscard()
1186 if (iTask.do_retry) { in iscsi_co_pdiscard()
1187 iTask.complete = 0; in iscsi_co_pdiscard()
1193 if (iTask.status == SCSI_STATUS_CHECK_CONDITION) { in iscsi_co_pdiscard()
1200 if (iTask.status != SCSI_STATUS_GOOD) { in iscsi_co_pdiscard()
1202 list.lba, iTask.err_str); in iscsi_co_pdiscard()
1203 r = iTask.err_code; in iscsi_co_pdiscard()
1209 g_free(iTask.err_str); in iscsi_co_pdiscard()
1218 struct IscsiTask iTask; in iscsi_co_pwrite_zeroes() local
1257 iscsi_co_init_iscsitask(iscsilun, &iTask); in iscsi_co_pwrite_zeroes()
1265 iTask.task = iscsi_writesame16_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_pwrite_zeroes()
1268 0, 0, iscsi_co_generic_cb, &iTask); in iscsi_co_pwrite_zeroes()
1275 iTask.task = iscsi_writesame10_task(iscsilun->iscsi, iscsilun->lun, lba, in iscsi_co_pwrite_zeroes()
1278 0, 0, iscsi_co_generic_cb, &iTask); in iscsi_co_pwrite_zeroes()
1280 if (iTask.task == NULL) { in iscsi_co_pwrite_zeroes()
1285 iscsi_co_wait_for_task(&iTask, iscsilun); in iscsi_co_pwrite_zeroes()
1287 if (iTask.status == SCSI_STATUS_CHECK_CONDITION && in iscsi_co_pwrite_zeroes()
1288 iTask.task->sense.key == SCSI_SENSE_ILLEGAL_REQUEST && in iscsi_co_pwrite_zeroes()
1289 (iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_OPERATION_CODE || in iscsi_co_pwrite_zeroes()
1290 iTask.task->sense.ascq == SCSI_SENSE_ASCQ_INVALID_FIELD_IN_CDB)) { in iscsi_co_pwrite_zeroes()
1293 scsi_free_scsi_task(iTask.task); in iscsi_co_pwrite_zeroes()
1298 if (iTask.task != NULL) { in iscsi_co_pwrite_zeroes()
1299 scsi_free_scsi_task(iTask.task); in iscsi_co_pwrite_zeroes()
1300 iTask.task = NULL; in iscsi_co_pwrite_zeroes()
1303 if (iTask.do_retry) { in iscsi_co_pwrite_zeroes()
1304 iTask.complete = 0; in iscsi_co_pwrite_zeroes()
1308 if (iTask.status != SCSI_STATUS_GOOD) { in iscsi_co_pwrite_zeroes()
1311 lba, iTask.err_str); in iscsi_co_pwrite_zeroes()
1312 r = iTask.err_code; in iscsi_co_pwrite_zeroes()
1324 g_free(iTask.err_str); in iscsi_co_pwrite_zeroes()