mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 06:01:57 +00:00
io_uring/cancel: abstract out request match helper
We have different match code in a variety of spots. Start the cleanup of this by abstracting out a helper that can be used to check if a given request matches the cancelation criteria outlined in io_cancel_data. Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
faa9c0ee3c
commit
aa5cd116f3
@ -27,11 +27,11 @@ struct io_cancel {
|
||||
#define CANCEL_FLAGS (IORING_ASYNC_CANCEL_ALL | IORING_ASYNC_CANCEL_FD | \
|
||||
IORING_ASYNC_CANCEL_ANY | IORING_ASYNC_CANCEL_FD_FIXED)
|
||||
|
||||
static bool io_cancel_cb(struct io_wq_work *work, void *data)
|
||||
/*
|
||||
* Returns true if the request matches the criteria outlined by 'cd'.
|
||||
*/
|
||||
bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data *cd)
|
||||
{
|
||||
struct io_kiocb *req = container_of(work, struct io_kiocb, work);
|
||||
struct io_cancel_data *cd = data;
|
||||
|
||||
if (req->ctx != cd->ctx)
|
||||
return false;
|
||||
if (cd->flags & IORING_ASYNC_CANCEL_ANY) {
|
||||
@ -48,9 +48,18 @@ static bool io_cancel_cb(struct io_wq_work *work, void *data)
|
||||
return false;
|
||||
req->work.cancel_seq = cd->seq;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool io_cancel_cb(struct io_wq_work *work, void *data)
|
||||
{
|
||||
struct io_kiocb *req = container_of(work, struct io_kiocb, work);
|
||||
struct io_cancel_data *cd = data;
|
||||
|
||||
return io_cancel_req_match(req, cd);
|
||||
}
|
||||
|
||||
static int io_async_cancel_one(struct io_uring_task *tctx,
|
||||
struct io_cancel_data *cd)
|
||||
{
|
||||
|
@ -21,3 +21,4 @@ int io_try_cancel(struct io_uring_task *tctx, struct io_cancel_data *cd,
|
||||
void init_hash_table(struct io_hash_table *table, unsigned size);
|
||||
|
||||
int io_sync_cancel(struct io_ring_ctx *ctx, void __user *arg);
|
||||
bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data *cd);
|
||||
|
Loading…
Reference in New Issue
Block a user