io-wq: ensure work->task_pid is cleared on init
authorJens Axboe <axboe@kernel.dk>
Tue, 25 Feb 2020 18:52:56 +0000 (11:52 -0700)
committerJens Axboe <axboe@kernel.dk>
Tue, 25 Feb 2020 20:23:48 +0000 (13:23 -0700)
We use ->task_pid for exit cancellation, but we need to ensure it's
cleared to zero for io_req_work_grab_env() to do the right thing. Take
a suggestion from Bart and clear the whole thing, just setting the
function passed in. This makes it more future proof as well.

Fixes: 36282881a795 ("io-wq: add io_wq_cancel_pid() to cancel based on a specific pid")
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io-wq.h

index ccc7d84af57de1a79206181139f8471b086fc5bc..33baba4370c5f26365e9f9ffc75cba71fb364a04 100644 (file)
@@ -79,16 +79,10 @@ struct io_wq_work {
        pid_t task_pid;
 };
 
-#define INIT_IO_WORK(work, _func)                      \
-       do {                                            \
-               (work)->list.next = NULL;               \
-               (work)->func = _func;                   \
-               (work)->files = NULL;                   \
-               (work)->mm = NULL;                      \
-               (work)->creds = NULL;                   \
-               (work)->fs = NULL;                      \
-               (work)->flags = 0;                      \
-       } while (0)                                     \
+#define INIT_IO_WORK(work, _func)                              \
+       do {                                                    \
+               *(work) = (struct io_wq_work){ .func = _func }; \
+       } while (0)                                             \
 
 typedef void (get_work_fn)(struct io_wq_work *);
 typedef void (put_work_fn)(struct io_wq_work *);