]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
io_uring: properly mark async work as bounded vs unbounded
authorJens Axboe <axboe@kernel.dk>
Thu, 7 Nov 2019 17:57:36 +0000 (10:57 -0700)
committerJens Axboe <axboe@kernel.dk>
Thu, 7 Nov 2019 18:57:17 +0000 (11:57 -0700)
Now that io-wq supports separating the two request lifetime types, mark
the following IO as having unbounded runtimes:

- Any read/write to a non-regular file
- Any specific networked IO
- Any poll command

Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c

index 831bea0fbc75bff4197ef1011850e455735807ca..02a4f5e8a6e4bb6d303740ef7227f4b6c92a564b 100644 (file)
@@ -506,6 +506,20 @@ static inline bool io_prep_async_work(struct io_kiocb *req)
                case IORING_OP_WRITEV:
                case IORING_OP_WRITE_FIXED:
                        do_hashed = true;
+                       /* fall-through */
+               case IORING_OP_READV:
+               case IORING_OP_READ_FIXED:
+               case IORING_OP_SENDMSG:
+               case IORING_OP_RECVMSG:
+               case IORING_OP_ACCEPT:
+               case IORING_OP_POLL_ADD:
+                       /*
+                        * We know REQ_F_ISREG is not set on some of these
+                        * opcodes, but this enables us to keep the check in
+                        * just one place.
+                        */
+                       if (!(req->flags & REQ_F_ISREG))
+                               req->work.flags |= IO_WQ_WORK_UNBOUND;
                        break;
                }
                if (io_sqe_needs_user(req->submit.sqe))
@@ -3745,7 +3759,7 @@ static int io_sq_offload_start(struct io_ring_ctx *ctx,
 
        /* Do QD, or 4 * CPUS, whatever is smallest */
        concurrency = min(ctx->sq_entries, 4 * num_online_cpus());
-       ctx->io_wq = io_wq_create(concurrency, ctx->sqo_mm, NULL);
+       ctx->io_wq = io_wq_create(concurrency, ctx->sqo_mm, ctx->user);
        if (IS_ERR(ctx->io_wq)) {
                ret = PTR_ERR(ctx->io_wq);
                ctx->io_wq = NULL;