Lines Matching refs:cd

39 bool io_cancel_req_match(struct io_kiocb *req, struct io_cancel_data *cd)  in io_cancel_req_match()  argument
41 bool match_user_data = cd->flags & IORING_ASYNC_CANCEL_USERDATA; in io_cancel_req_match()
43 if (req->ctx != cd->ctx) in io_cancel_req_match()
46 if (!(cd->flags & (IORING_ASYNC_CANCEL_FD | IORING_ASYNC_CANCEL_OP))) in io_cancel_req_match()
49 if (cd->flags & IORING_ASYNC_CANCEL_ANY) in io_cancel_req_match()
51 if (cd->flags & IORING_ASYNC_CANCEL_FD) { in io_cancel_req_match()
52 if (req->file != cd->file) in io_cancel_req_match()
55 if (cd->flags & IORING_ASYNC_CANCEL_OP) { in io_cancel_req_match()
56 if (req->opcode != cd->opcode) in io_cancel_req_match()
59 if (match_user_data && req->cqe.user_data != cd->data) in io_cancel_req_match()
61 if (cd->flags & IORING_ASYNC_CANCEL_ALL) { in io_cancel_req_match()
63 if (io_cancel_match_sequence(req, cd->seq)) in io_cancel_req_match()
73 struct io_cancel_data *cd = data; in io_cancel_cb() local
75 return io_cancel_req_match(req, cd); in io_cancel_cb()
79 struct io_cancel_data *cd) in io_async_cancel_one() argument
88 all = cd->flags & (IORING_ASYNC_CANCEL_ALL|IORING_ASYNC_CANCEL_ANY); in io_async_cancel_one()
89 cancel_ret = io_wq_cancel_cb(tctx->io_wq, io_cancel_cb, cd, all); in io_async_cancel_one()
105 int io_try_cancel(struct io_uring_task *tctx, struct io_cancel_data *cd, in io_try_cancel() argument
108 struct io_ring_ctx *ctx = cd->ctx; in io_try_cancel()
113 ret = io_async_cancel_one(tctx, cd); in io_try_cancel()
121 ret = io_poll_cancel(ctx, cd, issue_flags); in io_try_cancel()
125 ret = io_waitid_cancel(ctx, cd, issue_flags); in io_try_cancel()
129 ret = io_futex_cancel(ctx, cd, issue_flags); in io_try_cancel()
134 if (!(cd->flags & IORING_ASYNC_CANCEL_FD)) in io_try_cancel()
135 ret = io_timeout_cancel(ctx, cd); in io_try_cancel()
167 static int __io_async_cancel(struct io_cancel_data *cd, in __io_async_cancel() argument
171 bool all = cd->flags & (IORING_ASYNC_CANCEL_ALL|IORING_ASYNC_CANCEL_ANY); in __io_async_cancel()
172 struct io_ring_ctx *ctx = cd->ctx; in __io_async_cancel()
177 ret = io_try_cancel(tctx, cd, issue_flags); in __io_async_cancel()
191 ret = io_async_cancel_one(node->task->io_uring, cd); in __io_async_cancel()
206 struct io_cancel_data cd = { in io_async_cancel() local
216 if (cd.flags & IORING_ASYNC_CANCEL_FD) { in io_async_cancel()
218 cd.flags & IORING_ASYNC_CANCEL_FD_FIXED) { in io_async_cancel()
229 cd.file = req->file; in io_async_cancel()
232 ret = __io_async_cancel(&cd, tctx, issue_flags); in io_async_cancel()
241 struct io_cancel_data *cd, int fd) in __io_sync_cancel() argument
243 struct io_ring_ctx *ctx = cd->ctx; in __io_sync_cancel()
246 if ((cd->flags & IORING_ASYNC_CANCEL_FD) && in __io_sync_cancel()
247 (cd->flags & IORING_ASYNC_CANCEL_FD_FIXED)) { in __io_sync_cancel()
253 cd->file = io_slot_file(node); in __io_sync_cancel()
254 if (!cd->file) in __io_sync_cancel()
258 return __io_async_cancel(cd, tctx, 0); in __io_sync_cancel()
264 struct io_cancel_data cd = { in io_sync_cancel() local
285 cd.data = sc.addr; in io_sync_cancel()
286 cd.flags = sc.flags; in io_sync_cancel()
287 cd.opcode = sc.opcode; in io_sync_cancel()
290 if ((cd.flags & IORING_ASYNC_CANCEL_FD) && in io_sync_cancel()
291 !(cd.flags & IORING_ASYNC_CANCEL_FD_FIXED)) { in io_sync_cancel()
295 cd.file = file; in io_sync_cancel()
298 ret = __io_sync_cancel(current->io_uring, &cd, sc.fd); in io_sync_cancel()
318 cd.seq = atomic_inc_return(&ctx->cancel_seq); in io_sync_cancel()
322 ret = __io_sync_cancel(current->io_uring, &cd, sc.fd); in io_sync_cancel()
371 int io_cancel_remove(struct io_ring_ctx *ctx, struct io_cancel_data *cd, in io_cancel_remove() argument
381 if (!io_cancel_req_match(req, cd)) in io_cancel_remove()
385 if (!(cd->flags & IORING_ASYNC_CANCEL_ALL)) in io_cancel_remove()