block: ublk_drv: add common exit handling
authorMing Lei <ming.lei@redhat.com>
Thu, 30 Mar 2023 11:36:20 +0000 (19:36 +0800)
committerJens Axboe <axboe@kernel.dk>
Mon, 3 Apr 2023 01:22:54 +0000 (19:22 -0600)
Simplify exit handling a bit, and prepare for supporting fused command.

Reviewed-by: Ziyang Zhang <ZiyangZhang@linux.alibaba.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c

index d1d1c8d..7b3d551 100644 (file)
@@ -655,14 +655,15 @@ static void ublk_complete_rq(struct request *req)
        struct ublk_queue *ubq = req->mq_hctx->driver_data;
        struct ublk_io *io = &ubq->ios[req->tag];
        unsigned int unmapped_bytes;
+       blk_status_t res = BLK_STS_OK;
 
        /* failed read IO if nothing is read */
        if (!io->res && req_op(req) == REQ_OP_READ)
                io->res = -EIO;
 
        if (io->res < 0) {
-               blk_mq_end_request(req, errno_to_blk_status(io->res));
-               return;
+               res = errno_to_blk_status(io->res);
+               goto exit;
        }
 
        /*
@@ -671,10 +672,8 @@ static void ublk_complete_rq(struct request *req)
         *
         * Both the two needn't unmap.
         */
-       if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE) {
-               blk_mq_end_request(req, BLK_STS_OK);
-               return;
-       }
+       if (req_op(req) != REQ_OP_READ && req_op(req) != REQ_OP_WRITE)
+               goto exit;
 
        /* for READ request, writing data in iod->addr to rq buffers */
        unmapped_bytes = ublk_unmap_io(ubq, req, io);
@@ -691,6 +690,10 @@ static void ublk_complete_rq(struct request *req)
                blk_mq_requeue_request(req, true);
        else
                __blk_mq_end_request(req, BLK_STS_OK);
+
+       return;
+exit:
+       blk_mq_end_request(req, res);
 }
 
 /*