Lines Matching refs:pending_req
219 struct vscsibk_pend *pending_req)
221 struct scsiback_tpg *tpg = pending_req->v2p->tpg;
224 tpg->tport->tport_name, pending_req->v2p->lun,
225 pending_req->cmnd[0], errors & 0xff, COMMAND_COMPLETE,
386 uint32_t resid, struct vscsibk_pend *pending_req)
388 scsiback_send_response(pending_req->info, sense_buffer, result,
389 resid, pending_req->rqid);
391 if (pending_req->v2p)
392 kref_put(&pending_req->v2p->kref,
396 static void scsiback_cmd_done(struct vscsibk_pend *pending_req)
398 struct vscsibk_info *info = pending_req->info;
403 sense_buffer = pending_req->sense_buffer;
404 resid = pending_req->se_cmd.residual_count;
405 errors = pending_req->result;
408 scsiback_print_status(sense_buffer, errors, pending_req);
410 scsiback_fast_flush_area(pending_req);
411 scsiback_do_resp_with_sense(sense_buffer, errors, resid, pending_req);
418 target_put_sess_cmd(&pending_req->se_cmd);
421 static void scsiback_cmd_exec(struct vscsibk_pend *pending_req)
423 struct se_cmd *se_cmd = &pending_req->se_cmd;
424 struct se_session *sess = pending_req->v2p->tpg->tpg_nexus->tvn_se_sess;
426 scsiback_get(pending_req->info);
427 se_cmd->tag = pending_req->rqid;
428 target_init_cmd(se_cmd, sess, pending_req->sense_buffer,
429 pending_req->v2p->lun, pending_req->data_len, 0,
430 pending_req->sc_data_direction, TARGET_SCF_ACK_KREF);
432 if (target_submit_prep(se_cmd, pending_req->cmnd, pending_req->sgl,
433 pending_req->n_sg, NULL, 0, NULL, 0, GFP_KERNEL))
462 static int scsiback_gnttab_data_map_list(struct vscsibk_pend *pending_req,
468 struct vscsibk_info *info = pending_req->info;
484 pending_req->n_grants += mapcount;
490 pending_req->n_grants += mapcount;
495 struct vscsibk_pend *pending_req)
507 pending_req->n_sg = 0;
508 pending_req->n_grants = 0;
509 pending_req->data_len = 0;
522 err = scsiback_gnttab_data_map_list(pending_req, ring_req->seg,
523 pending_req->pages, pending_req->grant_handles,
546 pending_req->sgl = kmalloc_array(nr_segments,
548 if (!pending_req->sgl)
551 sg_init_table(pending_req->sgl, nr_segments);
552 pending_req->n_sg = nr_segments;
555 if (pending_req->sc_data_direction == DMA_TO_DEVICE)
558 pg = pending_req->pages + nr_sgl;
559 grant = pending_req->grant_handles + nr_sgl;
562 err = scsiback_gnttab_data_map_list(pending_req, seg,
569 vaddr(pending_req, i) + ring_req->seg[i].offset);
572 err = scsiback_gnttab_data_map_list(pending_req, seg,
579 end_seg = vaddr(pending_req, 0) + ring_req->seg[0].offset;
582 pg = pending_req->pages + nr_sgl;
585 for_each_sg(pending_req->sgl, sg, nr_segments, i) {
587 pending_req->data_len += seg->length;
591 end_seg = vaddr(pending_req, i_seg) +
615 static void scsiback_device_action(struct vscsibk_pend *pending_req,
618 struct scsiback_tpg *tpg = pending_req->v2p->tpg;
620 struct se_cmd *se_cmd = &pending_req->se_cmd;
621 u64 unpacked_lun = pending_req->v2p->lun;
624 init_completion(&pending_req->tmr_done);
626 rc = target_submit_tmr(&pending_req->se_cmd, nexus->tvn_se_sess,
627 &pending_req->sense_buffer[0],
633 wait_for_completion(&pending_req->tmr_done);
638 scsiback_do_resp_with_sense(NULL, err, 0, pending_req);
639 transport_generic_free_cmd(&pending_req->se_cmd, 0);
643 scsiback_do_resp_with_sense(NULL, err, 0, pending_req);
702 struct vscsibk_pend *pending_req;
732 pending_req = scsiback_get_pend_req(ring, v2p);
733 if (IS_ERR(pending_req)) {
737 pending_req->rqid = ring_req->rqid;
738 pending_req->info = info;
739 pending_req->v2p = v2p;
740 pending_req->sc_data_direction = ring_req->sc_data_direction;
741 pending_req->cmd_len = ring_req->cmd_len;
742 memcpy(pending_req->cmnd, ring_req->cmnd, pending_req->cmd_len);
744 return pending_req;
752 struct vscsibk_pend *pending_req;
777 pending_req = prepare_pending_reqs(info, ring, &ring_req);
778 if (IS_ERR(pending_req)) {
779 switch (PTR_ERR(pending_req)) {
794 if (scsiback_gnttab_data_map(&ring_req, pending_req)) {
795 scsiback_fast_flush_area(pending_req);
797 DID_ERROR << 16, 0, pending_req);
798 transport_generic_free_cmd(&pending_req->se_cmd, 0);
800 scsiback_cmd_exec(pending_req);
804 scsiback_device_action(pending_req, TMR_ABORT_TASK,
808 scsiback_device_action(pending_req, TMR_LUN_RESET, 0);
813 pending_req);
814 transport_generic_free_cmd(&pending_req->se_cmd, 0);
1430 struct vscsibk_pend *pending_req = container_of(se_cmd,
1433 pending_req->result = SAM_STAT_GOOD;
1434 scsiback_cmd_done(pending_req);
1440 struct vscsibk_pend *pending_req = container_of(se_cmd,
1446 pending_req->result = SAM_STAT_CHECK_CONDITION;
1448 pending_req->result = se_cmd->scsi_status;
1450 scsiback_cmd_done(pending_req);
1456 struct vscsibk_pend *pending_req = container_of(se_cmd,
1459 complete(&pending_req->tmr_done);