diff options
| author | 2021-04-01 19:53:29 -0600 | |
|---|---|---|
| committer | 2021-04-11 19:30:25 -0600 | |
| commit | c7aab1a7c52b82d9afd7e03c398eb03dc2aa0507 (patch) | |
| tree | 5747e9fde43bf6665d6a82d1f29640a4b966d676 /include/linux/task_work.h | |
| parent | io_uring: fix race around poll update and poll triggering (diff) | |
| download | linux-dev-c7aab1a7c52b82d9afd7e03c398eb03dc2aa0507.tar.xz linux-dev-c7aab1a7c52b82d9afd7e03c398eb03dc2aa0507.zip | |
task_work: add helper for more targeted task_work canceling
The only exported helper we have right now is task_work_cancel(), which
cancels any task_work from a given task where func matches the queued
work item. This is a bit too coarse for some use cases. Add a
task_work_cancel_match() that allows to more specifically target
individual work items outside of purely the callback function used.
task_work_cancel() can be trivially implemented on top of that, hence do
so.
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'include/linux/task_work.h')
| -rw-r--r-- | include/linux/task_work.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/task_work.h b/include/linux/task_work.h index 0d848a1e9e62..5b8a93f288bb 100644 --- a/include/linux/task_work.h +++ b/include/linux/task_work.h @@ -22,6 +22,8 @@ enum task_work_notify_mode { int task_work_add(struct task_struct *task, struct callback_head *twork, enum task_work_notify_mode mode); +struct callback_head *task_work_cancel_match(struct task_struct *task, + bool (*match)(struct callback_head *, void *data), void *data); struct callback_head *task_work_cancel(struct task_struct *, task_work_func_t); void task_work_run(void); |
