]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ublk: add helper of __ublk_fetch()
authorMing Lei <ming.lei@redhat.com>
Fri, 21 Nov 2025 01:58:28 +0000 (09:58 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 28 Nov 2025 16:20:13 +0000 (09:20 -0700)
Add helper __ublk_fetch() for refactoring ublk_fetch().

Meantime move ublk_config_io_buf() out of __ublk_fetch() to make
the code structure cleaner.

Reviewed-by: Caleb Sander Mateos <csander@purestorage.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c

index f1b2f170146bad80176c1bd47ada973c177eb40a..c2250172de4c66f17bd81553bb51c83aa1b3d6f6 100644 (file)
@@ -2234,39 +2234,41 @@ static int ublk_check_fetch_buf(const struct ublk_device *ub, __u64 buf_addr)
        return 0;
 }
 
-static int ublk_fetch(struct io_uring_cmd *cmd, struct ublk_device *ub,
-                     struct ublk_io *io, __u64 buf_addr)
+static int __ublk_fetch(struct io_uring_cmd *cmd, struct ublk_device *ub,
+                       struct ublk_io *io)
 {
-       int ret = 0;
-
-       /*
-        * When handling FETCH command for setting up ublk uring queue,
-        * ub->mutex is the innermost lock, and we won't block for handling
-        * FETCH, so it is fine even for IO_URING_F_NONBLOCK.
-        */
-       mutex_lock(&ub->mutex);
        /* UBLK_IO_FETCH_REQ is only allowed before dev is setup */
-       if (ublk_dev_ready(ub)) {
-               ret = -EBUSY;
-               goto out;
-       }
+       if (ublk_dev_ready(ub))
+               return -EBUSY;
 
        /* allow each command to be FETCHed at most once */
-       if (io->flags & UBLK_IO_FLAG_ACTIVE) {
-               ret = -EINVAL;
-               goto out;
-       }
+       if (io->flags & UBLK_IO_FLAG_ACTIVE)
+               return -EINVAL;
 
        WARN_ON_ONCE(io->flags & UBLK_IO_FLAG_OWNED_BY_SRV);
 
        ublk_fill_io_cmd(io, cmd);
-       ret = ublk_config_io_buf(ub, io, cmd, buf_addr, NULL);
-       if (ret)
-               goto out;
 
        WRITE_ONCE(io->task, get_task_struct(current));
        ublk_mark_io_ready(ub);
-out:
+
+       return 0;
+}
+
+static int ublk_fetch(struct io_uring_cmd *cmd, struct ublk_device *ub,
+                     struct ublk_io *io, __u64 buf_addr)
+{
+       int ret;
+
+       /*
+        * When handling FETCH command for setting up ublk uring queue,
+        * ub->mutex is the innermost lock, and we won't block for handling
+        * FETCH, so it is fine even for IO_URING_F_NONBLOCK.
+        */
+       mutex_lock(&ub->mutex);
+       ret = __ublk_fetch(cmd, ub, io);
+       if (!ret)
+               ret = ublk_config_io_buf(ub, io, cmd, buf_addr, NULL);
        mutex_unlock(&ub->mutex);
        return ret;
 }