scsi_add_cmd_to_list(cmd);
 }
 
-static int scsi_setup_scsi_cmnd(struct scsi_device *sdev, struct request *req)
+static inline blk_status_t prep_to_mq(int ret)
+{
+       switch (ret) {
+       case BLKPREP_OK:
+               return BLK_STS_OK;
+       case BLKPREP_DEFER:
+               return BLK_STS_RESOURCE;
+       default:
+               return BLK_STS_IOERR;
+       }
+}
+
+static blk_status_t scsi_setup_scsi_cmnd(struct scsi_device *sdev,
+               struct request *req)
 {
        struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 
        if (req->bio) {
                int ret = scsi_init_io(cmd);
                if (unlikely(ret))
-                       return ret;
+                       return prep_to_mq(ret);
        } else {
                BUG_ON(blk_rq_bytes(req));
 
        cmd->cmnd = scsi_req(req)->cmd;
        cmd->transfersize = blk_rq_bytes(req);
        cmd->allowed = scsi_req(req)->retries;
-       return BLKPREP_OK;
+       return BLK_STS_OK;
 }
 
 /*
  * Setup a normal block command.  These are simple request from filesystems
  * that still need to be translated to SCSI CDBs from the ULD.
  */
-static int scsi_setup_fs_cmnd(struct scsi_device *sdev, struct request *req)
+static blk_status_t scsi_setup_fs_cmnd(struct scsi_device *sdev,
+               struct request *req)
 {
        struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 
        if (unlikely(sdev->handler && sdev->handler->prep_fn)) {
                int ret = sdev->handler->prep_fn(sdev, req);
                if (ret != BLKPREP_OK)
-                       return ret;
+                       return prep_to_mq(ret);
        }
 
        cmd->cmnd = scsi_req(req)->cmd = scsi_req(req)->__cmd;
        memset(cmd->cmnd, 0, BLK_MAX_CDB);
-       return scsi_cmd_to_driver(cmd)->init_command(cmd);
+       return prep_to_mq(scsi_cmd_to_driver(cmd)->init_command(cmd));
 }
 
-static int scsi_setup_cmnd(struct scsi_device *sdev, struct request *req)
+static blk_status_t scsi_setup_cmnd(struct scsi_device *sdev,
+               struct request *req)
 {
        struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
 
        return 0;
 }
 
-static inline blk_status_t prep_to_mq(int ret)
-{
-       switch (ret) {
-       case BLKPREP_OK:
-               return BLK_STS_OK;
-       case BLKPREP_DEFER:
-               return BLK_STS_RESOURCE;
-       default:
-               return BLK_STS_IOERR;
-       }
-}
-
 /* Size in bytes of the sg-list stored in the scsi-mq command-private data. */
 static unsigned int scsi_mq_sgl_size(struct Scsi_Host *shost)
 {
                sizeof(struct scatterlist);
 }
 
-static int scsi_mq_prep_fn(struct request *req)
+static blk_status_t scsi_mq_prep_fn(struct request *req)
 {
        struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(req);
        struct scsi_device *sdev = req->q->queuedata;
                goto out_dec_target_busy;
 
        if (!(req->rq_flags & RQF_DONTPREP)) {
-               ret = prep_to_mq(scsi_mq_prep_fn(req));
+               ret = scsi_mq_prep_fn(req);
                if (ret != BLK_STS_OK)
                        goto out_dec_host_busy;
                req->rq_flags |= RQF_DONTPREP;