]> www.infradead.org Git - linux-platform-drivers-x86.git/commitdiff
io_uring: refactor io_sq_offload_create()
authorPavel Begunkov <asml.silence@gmail.com>
Tue, 20 Apr 2021 11:03:33 +0000 (12:03 +0100)
committerJens Axboe <axboe@kernel.dk>
Tue, 20 Apr 2021 18:55:28 +0000 (12:55 -0600)
Just a bit of code tossing in io_sq_offload_create(), so it looks a bit
better. No functional changes.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Link: https://lore.kernel.org/r/939776f90de8d2cdd0414e1baa29c8ec0926b561.1618916549.git.asml.silence@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index e621c9f5729ffc01396bc446e9c15a8dc03e9e5b..2d49197845e8240f214556e7ed8918dd85797b98 100644 (file)
@@ -7879,11 +7879,9 @@ static int io_sq_offload_create(struct io_ring_ctx *ctx,
                f = fdget(p->wq_fd);
                if (!f.file)
                        return -ENXIO;
-               if (f.file->f_op != &io_uring_fops) {
-                       fdput(f);
-                       return -EINVAL;
-               }
                fdput(f);
+               if (f.file->f_op != &io_uring_fops)
+                       return -EINVAL;
        }
        if (ctx->flags & IORING_SETUP_SQPOLL) {
                struct task_struct *tsk;
@@ -7902,13 +7900,11 @@ static int io_sq_offload_create(struct io_ring_ctx *ctx,
                if (!ctx->sq_thread_idle)
                        ctx->sq_thread_idle = HZ;
 
-               ret = 0;
                io_sq_thread_park(sqd);
                list_add(&ctx->sqd_list, &sqd->ctx_list);
                io_sqd_update_thread_idle(sqd);
                /* don't attach to a dying SQPOLL thread, would be racy */
-               if (attached && !sqd->thread)
-                       ret = -ENXIO;
+               ret = (attached && !sqd->thread) ? -ENXIO : 0;
                io_sq_thread_unpark(sqd);
 
                if (ret < 0)
@@ -7920,11 +7916,8 @@ static int io_sq_offload_create(struct io_ring_ctx *ctx,
                        int cpu = p->sq_thread_cpu;
 
                        ret = -EINVAL;
-                       if (cpu >= nr_cpu_ids)
-                               goto err_sqpoll;
-                       if (!cpu_online(cpu))
+                       if (cpu >= nr_cpu_ids || !cpu_online(cpu))
                                goto err_sqpoll;
-
                        sqd->sq_cpu = cpu;
                } else {
                        sqd->sq_cpu = -1;
@@ -7950,12 +7943,11 @@ static int io_sq_offload_create(struct io_ring_ctx *ctx,
        }
 
        return 0;
+err_sqpoll:
+       complete(&ctx->sq_data->exited);
 err:
        io_sq_thread_finish(ctx);
        return ret;
-err_sqpoll:
-       complete(&ctx->sq_data->exited);
-       goto err;
 }
 
 static inline void __io_unaccount_mem(struct user_struct *user,