io_wq: add get/put_work handlers to io_wq_create()
authorJens Axboe <axboe@kernel.dk>
Wed, 13 Nov 2019 05:31:31 +0000 (22:31 -0700)
committerJens Axboe <axboe@kernel.dk>
Wed, 13 Nov 2019 18:37:54 +0000 (11:37 -0700)
commit7d7230652e7c788ef908536fd79f4cca077f269f
tree111768c5fef3d709f65a336ba42aaefd772c1efe
parent15dff286d0e0087d4dcd7049911f179e4e4cfd94
io_wq: add get/put_work handlers to io_wq_create()

For cancellation, we need to ensure that the work item stays valid for
as long as ->cur_work is valid. Right now we can't safely dereference
the work item even under the wqe->lock, because while the ->cur_work
pointer will remain valid, the work could be completing and be freed
in parallel.

Only invoke ->get/put_work() on items we know that the caller queued
themselves. Add IO_WQ_WORK_INTERNAL for io-wq to use, which is needed
when we're queueing a flush item, for instance.

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