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