static int tcm_loop_write_pending(struct se_cmd *se_cmd) { /* * Since Linux/SCSI has already sent down a struct scsi_cmnd * sc->sc_data_direction of DMA_TO_DEVICE with struct scatterlist array * memory, and memory has already been mapped to struct se_cmd->t_mem_list * format with transport_generic_map_mem_to_cmd(). * * We now tell TCM to add this WRITE CDB directly into the TCM storage * object execution queue. */ target_execute_cmd(se_cmd); return 0; }
static int target_xcopy_issue_pt_cmd(struct xcopy_pt_cmd *xpt_cmd) { struct se_cmd *se_cmd = &xpt_cmd->se_cmd; sense_reason_t sense_rc; sense_rc = transport_generic_new_cmd(se_cmd); if (sense_rc) return -EINVAL; if (se_cmd->data_direction == DMA_TO_DEVICE) target_execute_cmd(se_cmd); wait_for_completion_interruptible(&xpt_cmd->xpt_passthrough_sem); pr_debug("target_xcopy_issue_pt_cmd(): SCSI status: 0x%02x\n", se_cmd->scsi_status); return (se_cmd->scsi_status) ? -EINVAL : 0; }
static void ft_execute_work(struct work_struct *work) { struct ft_cmd *cmd = container_of(work, struct ft_cmd, work); target_execute_cmd(&cmd->se_cmd); }