162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci 362306a36Sopenharmony_cistruct io_timeout_data { 462306a36Sopenharmony_ci struct io_kiocb *req; 562306a36Sopenharmony_ci struct hrtimer timer; 662306a36Sopenharmony_ci struct timespec64 ts; 762306a36Sopenharmony_ci enum hrtimer_mode mode; 862306a36Sopenharmony_ci u32 flags; 962306a36Sopenharmony_ci}; 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_cistruct io_kiocb *__io_disarm_linked_timeout(struct io_kiocb *req, 1262306a36Sopenharmony_ci struct io_kiocb *link); 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistatic inline struct io_kiocb *io_disarm_linked_timeout(struct io_kiocb *req) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci struct io_kiocb *link = req->link; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci if (link && link->opcode == IORING_OP_LINK_TIMEOUT) 1962306a36Sopenharmony_ci return __io_disarm_linked_timeout(req, link); 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci return NULL; 2262306a36Sopenharmony_ci} 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci__cold void io_flush_timeouts(struct io_ring_ctx *ctx); 2562306a36Sopenharmony_cistruct io_cancel_data; 2662306a36Sopenharmony_ciint io_timeout_cancel(struct io_ring_ctx *ctx, struct io_cancel_data *cd); 2762306a36Sopenharmony_ci__cold bool io_kill_timeouts(struct io_ring_ctx *ctx, struct task_struct *tsk, 2862306a36Sopenharmony_ci bool cancel_all); 2962306a36Sopenharmony_civoid io_queue_linked_timeout(struct io_kiocb *req); 3062306a36Sopenharmony_civoid io_disarm_next(struct io_kiocb *req); 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ciint io_timeout_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); 3362306a36Sopenharmony_ciint io_link_timeout_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); 3462306a36Sopenharmony_ciint io_timeout(struct io_kiocb *req, unsigned int issue_flags); 3562306a36Sopenharmony_ciint io_timeout_remove_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe); 3662306a36Sopenharmony_ciint io_timeout_remove(struct io_kiocb *req, unsigned int issue_flags); 37