> +/* > + * Return values: > + * 0: success > + * >0: nvme controller's cqe status response > + * <0: kernel error in lieu of controller response > + */ For better reading flow I'd reformat this as: /* * Return value: * 0: success * > 0: nvme controller's cqe status response * < 0: kernel error in lieu of controller response */ > +static int nvme_passthrough_status(struct request *rq, blk_status_t status) > +{ > + if (nvme_req(rq)->flags & NVME_REQ_CANCELLED) > + return -EINTR; > + else if (nvme_req(rq)->status) > + return nvme_req(rq)->status; > + return blk_status_to_errno(status); > +} I find this a little odd disconnected from the actual execure call. What about a helper like this instead: static int nvme_execute_rq(struct gendisk *disk, struct request *rq, bool at_head) { blk_status_t status; status = blk_execute_rq(disk, req, at_head); if (nvme_req(rq)->flags & NVME_REQ_CANCELLED) return -EINTR; if (nvme_req(rq)->status) return nvme_req(rq)->status; return blk_status_to_errno(status); } > - nvme_execute_passthru_rq(rq); > + status = nvme_execute_passthru_rq(rq); > > - status = nvme_req(rq)->status; > if (status == NVME_SC_SUCCESS && > req->cmd->common.opcode == nvme_admin_identify) { > switch (req->cmd->identify.cns) { > @@ -168,7 +167,8 @@ static void nvmet_passthru_execute_cmd_work(struct work_struct *w) > nvmet_passthru_override_id_ns(req); > break; > } > - } > + } else if (status < 0) > + status = NVME_SC_INTERNAL; Don't we need a better translation here?