summaryrefslogtreecommitdiff
path: root/include/linux/task_work.h
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2021-04-01 19:53:29 -0600
committerJens Axboe <axboe@kernel.dk>2021-04-11 19:30:25 -0600
commitc7aab1a7c52b82d9afd7e03c398eb03dc2aa0507 (patch)
tree5747e9fde43bf6665d6a82d1f29640a4b966d676 /include/linux/task_work.h
parentb2e720ace221f9be75fefdba7d0ebab9d05fc561 (diff)
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.h2
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);