]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
io_uring: add missing item types for various requests
authorJens Axboe <axboe@kernel.dk>
Wed, 22 Jun 2022 20:05:49 +0000 (14:05 -0600)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 25 Jun 2022 13:16:09 +0000 (15:16 +0200)
Any read/write should grab current->nsproxy, denoted by IO_WQ_WORK_FILES
as it refers to current->files as well, and connect and recv/recvmsg,
send/sendmsg should grab current->fs which is denoted by IO_WQ_WORK_FS.

No upstream commit exists for this issue.

Reported-by: Bing-Jhong Billy Jheng <billy@starlabs.sg>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/io_uring.c

index 871475d3fca2c4e91b557843c9f3a6d7c621b7e3..40ac37beca47df53fb264aade581db7a439377d5 100644 (file)
@@ -773,7 +773,8 @@ static const struct io_op_def io_op_defs[] = {
                .buffer_select          = 1,
                .needs_async_data       = 1,
                .async_size             = sizeof(struct io_async_rw),
-               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG,
+               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
+                                         IO_WQ_WORK_FILES,
        },
        [IORING_OP_WRITEV] = {
                .needs_file             = 1,
@@ -783,7 +784,7 @@ static const struct io_op_def io_op_defs[] = {
                .needs_async_data       = 1,
                .async_size             = sizeof(struct io_async_rw),
                .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
-                                               IO_WQ_WORK_FSIZE,
+                                         IO_WQ_WORK_FSIZE | IO_WQ_WORK_FILES,
        },
        [IORING_OP_FSYNC] = {
                .needs_file             = 1,
@@ -794,7 +795,8 @@ static const struct io_op_def io_op_defs[] = {
                .unbound_nonreg_file    = 1,
                .pollin                 = 1,
                .async_size             = sizeof(struct io_async_rw),
-               .work_flags             = IO_WQ_WORK_BLKCG | IO_WQ_WORK_MM,
+               .work_flags             = IO_WQ_WORK_BLKCG | IO_WQ_WORK_MM |
+                                         IO_WQ_WORK_FILES,
        },
        [IORING_OP_WRITE_FIXED] = {
                .needs_file             = 1,
@@ -803,7 +805,7 @@ static const struct io_op_def io_op_defs[] = {
                .pollout                = 1,
                .async_size             = sizeof(struct io_async_rw),
                .work_flags             = IO_WQ_WORK_BLKCG | IO_WQ_WORK_FSIZE |
-                                               IO_WQ_WORK_MM,
+                                         IO_WQ_WORK_MM | IO_WQ_WORK_FILES,
        },
        [IORING_OP_POLL_ADD] = {
                .needs_file             = 1,
@@ -857,7 +859,7 @@ static const struct io_op_def io_op_defs[] = {
                .pollout                = 1,
                .needs_async_data       = 1,
                .async_size             = sizeof(struct io_async_connect),
-               .work_flags             = IO_WQ_WORK_MM,
+               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_FS,
        },
        [IORING_OP_FALLOCATE] = {
                .needs_file             = 1,
@@ -885,7 +887,8 @@ static const struct io_op_def io_op_defs[] = {
                .pollin                 = 1,
                .buffer_select          = 1,
                .async_size             = sizeof(struct io_async_rw),
-               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG,
+               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
+                                         IO_WQ_WORK_FILES,
        },
        [IORING_OP_WRITE] = {
                .needs_file             = 1,
@@ -894,7 +897,7 @@ static const struct io_op_def io_op_defs[] = {
                .pollout                = 1,
                .async_size             = sizeof(struct io_async_rw),
                .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
-                                               IO_WQ_WORK_FSIZE,
+                                         IO_WQ_WORK_FSIZE | IO_WQ_WORK_FILES,
        },
        [IORING_OP_FADVISE] = {
                .needs_file             = 1,
@@ -907,14 +910,16 @@ static const struct io_op_def io_op_defs[] = {
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
                .pollout                = 1,
-               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG,
+               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
+                                         IO_WQ_WORK_FS,
        },
        [IORING_OP_RECV] = {
                .needs_file             = 1,
                .unbound_nonreg_file    = 1,
                .pollin                 = 1,
                .buffer_select          = 1,
-               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG,
+               .work_flags             = IO_WQ_WORK_MM | IO_WQ_WORK_BLKCG |
+                                         IO_WQ_WORK_FS,
        },
        [IORING_OP_OPENAT2] = {
                .work_flags             = IO_WQ_WORK_FILES | IO_WQ_WORK_FS |