Lines Matching refs:scmnd

1176 static void srp_unmap_data(struct scsi_cmnd *scmnd,
1185 if (!scsi_sglist(scmnd) ||
1186 (scmnd->sc_data_direction != DMA_TO_DEVICE &&
1187 scmnd->sc_data_direction != DMA_FROM_DEVICE))
1208 ib_dma_unmap_sg(ibdev, scsi_sglist(scmnd), scsi_sg_count(scmnd),
1209 scmnd->sc_data_direction);
1213 * srp_claim_req - Take ownership of the scmnd associated with a request.
1217 * @scmnd: If NULL, take ownership of @req->scmnd. If not NULL, only take
1218 * ownership of @req->scmnd if it equals @scmnd.
1226 struct scsi_cmnd *scmnd)
1231 if (req->scmnd &&
1232 (!sdev || req->scmnd->device == sdev) &&
1233 (!scmnd || req->scmnd == scmnd)) {
1234 scmnd = req->scmnd;
1235 req->scmnd = NULL;
1237 scmnd = NULL;
1241 return scmnd;
1248 * @scmnd: SCSI command associated with @req.
1252 struct scsi_cmnd *scmnd, s32 req_lim_delta)
1256 srp_unmap_data(scmnd, ch, req);
1266 struct scsi_cmnd *scmnd = srp_claim_req(ch, req, sdev, NULL);
1268 if (scmnd) {
1269 srp_free_req(ch, req, scmnd, 0);
1270 scmnd->result = result;
1271 scsi_done(scmnd);
1280 static bool srp_terminate_cmd(struct scsi_cmnd *scmnd, void *context_ptr)
1284 u32 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmnd));
1286 struct srp_request *req = scsi_cmd_priv(scmnd);
1464 dev_name(&req->scmnd->device->sdev_gendev), sg_nents,
1603 if (desc_len != scsi_bufflen(req->scmnd) ||
1604 mr_len > scsi_bufflen(req->scmnd))
1606 scsi_bufflen(req->scmnd), desc_len, mr_len,
1612 * @scmnd: SCSI command to map
1620 static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_rdma_ch *ch,
1638 if (!scsi_sglist(scmnd) || scmnd->sc_data_direction == DMA_NONE)
1641 if (scmnd->sc_data_direction != DMA_FROM_DEVICE &&
1642 scmnd->sc_data_direction != DMA_TO_DEVICE) {
1645 scmnd->sc_data_direction);
1649 nents = scsi_sg_count(scmnd);
1650 scat = scsi_sglist(scmnd);
1651 data_len = scsi_bufflen(scmnd);
1656 count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction);
1663 scmnd->sc_data_direction == DMA_TO_DEVICE) {
1783 if (scmnd->sc_data_direction == DMA_TO_DEVICE)
1792 if (scmnd->sc_data_direction == DMA_TO_DEVICE)
1800 srp_unmap_data(scmnd, ch, req);
1937 struct scsi_cmnd *scmnd;
1955 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag);
1956 if (scmnd) {
1957 req = scsi_cmd_priv(scmnd);
1958 scmnd = srp_claim_req(ch, req, NULL, scmnd);
1960 if (!scmnd) {
1962 "Null scmnd for RSP w/tag %#016llx received on ch %td / QP %#x\n",
1971 scmnd->result = rsp->status;
1974 memcpy(scmnd->sense_buffer, rsp->data +
1981 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_in_res_cnt));
1983 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_out_res_cnt));
1985 srp_free_req(ch, req, scmnd,
1988 scsi_done(scmnd);
2151 static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
2153 struct request *rq = scsi_cmd_to_rq(scmnd);
2156 struct srp_request *req = scsi_cmd_priv(scmnd);
2164 scmnd->result = srp_chkready(target->rport);
2165 if (unlikely(scmnd->result))
2187 int_to_scsilun(scmnd->device->lun, &cmd->lun);
2189 memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len);
2190 if (unlikely(scmnd->cmd_len > sizeof(cmd->cdb))) {
2191 cmd->add_cdb_len = round_up(scmnd->cmd_len - sizeof(cmd->cdb),
2197 req->scmnd = scmnd;
2200 len = srp_map_data(scmnd, ch, req);
2210 scmnd->result = len == -ENOMEM ?
2220 scmnd->result = DID_ERROR << 16;
2227 srp_unmap_data(scmnd, ch, req);
2236 req->scmnd = NULL;
2239 if (scmnd->result) {
2240 scsi_done(scmnd);
2780 static int srp_abort(struct scsi_cmnd *scmnd)
2782 struct srp_target_port *target = host_to_target(scmnd->device->host);
2783 struct srp_request *req = scsi_cmd_priv(scmnd);
2790 tag = blk_mq_unique_tag(scsi_cmd_to_rq(scmnd));
2795 if (!srp_claim_req(ch, req, NULL, scmnd))
2799 if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
2801 srp_free_req(ch, req, scmnd, 0);
2810 static int srp_reset_device(struct scsi_cmnd *scmnd)
2812 struct srp_target_port *target = host_to_target(scmnd->device->host);
2819 if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun,
2828 static int srp_reset_host(struct scsi_cmnd *scmnd)
2830 struct srp_target_port *target = host_to_target(scmnd->device->host);