pr_err("pSCSI: blk_make_request() failed\n");
goto fail;
}
-
- if (task->task_sg_bidi) {
- /*
- * If present, set up the extra BIDI-COMMAND SCSI READ
- * struct request and payload.
- */
- ret = pscsi_map_sg(task, task->task_sg_bidi, &hbio);
- if (ret < 0) {
- /* XXX: free the main request? */
- return PYX_TRANSPORT_LU_COMM_FAILURE;
- }
-
- /*
- * Setup the secondary pt->pscsi_req->next_rq used for the extra
- * BIDI READ payload.
- */
- req->next_rq = blk_make_request(pdv->pdv_sd->request_queue,
- hbio, GFP_KERNEL);
- if (!req) {
- pr_err("pSCSI: blk_make_request() failed for BIDI\n");
- /* XXX: free the main request? */
- goto fail;
- }
-
- req->next_rq->cmd_type = REQ_TYPE_BLOCK_PC;
- }
}
req->cmd_type = REQ_TYPE_BLOCK_PC;
pt->pscsi_resid = req->resid_len;
pscsi_process_SAM_status(task, pt);
- /*
- * Release BIDI-READ if present
- */
- if (req->next_rq != NULL)
- __blk_put_request(req->q, req->next_rq);
-
__blk_put_request(req->q, req);
}
size = transport_get_size(sectors, cdb, cmd);
cmd->t_task_lba = transport_lba_32(cdb);
cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
- passthrough = (dev->transport->transport_type ==
- TRANSPORT_PLUGIN_PHBA_PDEV);
- /*
- * Skip the remaining assignments for TCM/PSCSI passthrough
- */
- if (passthrough)
- break;
+
+ if (dev->transport->transport_type ==
+ TRANSPORT_PLUGIN_PHBA_PDEV)
+ goto out_unsupported_cdb;
/*
* Setup BIDI XOR callback to be run after I/O completion.
*/
cmd->t_task_lba = transport_lba_64_ext(cdb);
cmd->se_cmd_flags |= SCF_SCSI_DATA_SG_IO_CDB;
- /*
- * Skip the remaining assignments for TCM/PSCSI passthrough
- */
if (passthrough)
- break;
-
+ goto out_unsupported_cdb;
/*
* Setup BIDI XOR callback to be run during after I/O
* completion.
*/
del_timer_sync(&task->task_timer);
- kfree(task->task_sg_bidi);
kfree(task->task_sg);
list_del(&task->t_list);