OSDN Git Service

io_uring: mark requests that we can do poll async in io_op_defs
authorJens Axboe <axboe@kernel.dk>
Thu, 20 Feb 2020 16:59:44 +0000 (09:59 -0700)
committerJens Axboe <axboe@kernel.dk>
Mon, 2 Mar 2020 21:06:37 +0000 (14:06 -0700)
Add a pollin/pollout field to the request table, and have commands that
we can safely poll for properly marked.

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

index a16b563..0d973de 100644 (file)
@@ -629,6 +629,9 @@ struct io_op_def {
        unsigned                file_table : 1;
        /* needs ->fs */
        unsigned                needs_fs : 1;
+       /* set if opcode supports polled "wait" */
+       unsigned                pollin : 1;
+       unsigned                pollout : 1;
 };
 
 static const struct io_op_def io_op_defs[] = {
@@ -638,6 +641,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_mm               = 1,
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollin                 = 1,
        },
        [IORING_OP_WRITEV] = {
                .async_ctx              = 1,
@@ -645,6 +649,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_file             = 1,
                .hash_reg_file          = 1,
                .unbound_nonreg_file    = 1,
+               .pollout                = 1,
        },
        [IORING_OP_FSYNC] = {
                .needs_file             = 1,
@@ -652,11 +657,13 @@ static const struct io_op_def io_op_defs[] = {
        [IORING_OP_READ_FIXED] = {
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollin                 = 1,
        },
        [IORING_OP_WRITE_FIXED] = {
                .needs_file             = 1,
                .hash_reg_file          = 1,
                .unbound_nonreg_file    = 1,
+               .pollout                = 1,
        },
        [IORING_OP_POLL_ADD] = {
                .needs_file             = 1,
@@ -672,6 +679,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
                .needs_fs               = 1,
+               .pollout                = 1,
        },
        [IORING_OP_RECVMSG] = {
                .async_ctx              = 1,
@@ -679,6 +687,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
                .needs_fs               = 1,
+               .pollin                 = 1,
        },
        [IORING_OP_TIMEOUT] = {
                .async_ctx              = 1,
@@ -690,6 +699,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
                .file_table             = 1,
+               .pollin                 = 1,
        },
        [IORING_OP_ASYNC_CANCEL] = {},
        [IORING_OP_LINK_TIMEOUT] = {
@@ -701,6 +711,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_mm               = 1,
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollout                = 1,
        },
        [IORING_OP_FALLOCATE] = {
                .needs_file             = 1,
@@ -729,11 +740,13 @@ static const struct io_op_def io_op_defs[] = {
                .needs_mm               = 1,
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollin                 = 1,
        },
        [IORING_OP_WRITE] = {
                .needs_mm               = 1,
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollout                = 1,
        },
        [IORING_OP_FADVISE] = {
                .needs_file             = 1,
@@ -745,11 +758,13 @@ static const struct io_op_def io_op_defs[] = {
                .needs_mm               = 1,
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollout                = 1,
        },
        [IORING_OP_RECV] = {
                .needs_mm               = 1,
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
+               .pollin                 = 1,
        },
        [IORING_OP_OPENAT2] = {
                .needs_file             = 1,