• Jens Axboe's avatar
    io_wq: add get/put_work handlers to io_wq_create() · 7d723065
    Jens Axboe authored
    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: default avatarJens Axboe <axboe@kernel.dk>
    7d723065
io-wq.c 25.7 KB