static inline void null_handle_cmd(struct nullb_cmd *cmd) { /* Complete IO by inline, softirq or timer */ switch (irqmode) { case NULL_IRQ_SOFTIRQ: switch (queue_mode) { case NULL_Q_MQ: blk_mq_complete_request(cmd->rq); break; case NULL_Q_RQ: blk_complete_request(cmd->rq); break; case NULL_Q_BIO: /* * XXX: no proper submitting cpu information available. */ end_cmd(cmd); break; } break; case NULL_IRQ_NONE: end_cmd(cmd); break; case NULL_IRQ_TIMER: null_cmd_end_timer(cmd); break; } }
/* * Complete the clone and the original request with the error status * through softirq context. */ static void dm_complete_request(struct request *rq, blk_status_t error) { struct dm_rq_target_io *tio = tio_from_request(rq); tio->error = error; if (!rq->q->mq_ops) blk_complete_request(rq); else blk_mq_complete_request(rq); }
void bsg_job_done(struct bsg_job *job, int result, unsigned int reply_payload_rcv_len) { struct request *req = job->req; struct request *rsp = req->next_rq; int err; err = job->req->errors = result; if (err < 0) job->req->sense_len = sizeof(u32); else job->req->sense_len = job->reply_len; req->resid_len = 0; if (rsp) { WARN_ON(reply_payload_rcv_len > rsp->resid_len); rsp->resid_len -= min(reply_payload_rcv_len, rsp->resid_len); } blk_complete_request(req); }
/** * bsg_job_done - completion routine for bsg requests * @job: bsg_job that is complete * @result: job reply result * @reply_payload_rcv_len: length of payload recvd * * The LLD should call this when the bsg job has completed. */ void bsg_job_done(struct bsg_job *job, int result, unsigned int reply_payload_rcv_len) { struct request *req = job->req; struct request *rsp = req->next_rq; int err; err = job->req->errors = result; if (err < 0) /* we're only returning the result field in the reply */ job->req->sense_len = sizeof(u32); else job->req->sense_len = job->reply_len; /* we assume all request payload was transferred, residual == 0 */ req->resid_len = 0; if (rsp) { WARN_ON(reply_payload_rcv_len > rsp->resid_len); /* set reply (bidi) residual */ rsp->resid_len -= min(reply_payload_rcv_len, rsp->resid_len); } blk_complete_request(req); }