mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 19:49:33 -04:00
io_uring: add IO_URING_F_INLINE issue flag
Set when the execution of the request is done inline from the system call itself. Any deferred issue will never have this flag set. Reviewed-by: Caleb Sander Mateos <csander@purestorage.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
@@ -26,6 +26,8 @@ enum io_uring_cmd_flags {
|
||||
IO_URING_F_MULTISHOT = 4,
|
||||
/* executed by io-wq */
|
||||
IO_URING_F_IOWQ = 8,
|
||||
/* executed inline from syscall */
|
||||
IO_URING_F_INLINE = 16,
|
||||
/* int's last bit, sign checks are usually faster than a bit test */
|
||||
IO_URING_F_NONBLOCK = INT_MIN,
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ static bool io_uring_try_cancel_requests(struct io_ring_ctx *ctx,
|
||||
bool cancel_all,
|
||||
bool is_sqpoll_thread);
|
||||
|
||||
static void io_queue_sqe(struct io_kiocb *req);
|
||||
static void io_queue_sqe(struct io_kiocb *req, unsigned int extra_flags);
|
||||
static void __io_req_caches_free(struct io_ring_ctx *ctx);
|
||||
|
||||
static __read_mostly DEFINE_STATIC_KEY_FALSE(io_key_has_sqarray);
|
||||
@@ -1377,7 +1377,7 @@ void io_req_task_submit(struct io_kiocb *req, io_tw_token_t tw)
|
||||
else if (req->flags & REQ_F_FORCE_ASYNC)
|
||||
io_queue_iowq(req);
|
||||
else
|
||||
io_queue_sqe(req);
|
||||
io_queue_sqe(req, 0);
|
||||
}
|
||||
|
||||
void io_req_task_queue_fail(struct io_kiocb *req, int ret)
|
||||
@@ -1960,12 +1960,14 @@ static void io_queue_async(struct io_kiocb *req, int ret)
|
||||
}
|
||||
}
|
||||
|
||||
static inline void io_queue_sqe(struct io_kiocb *req)
|
||||
static inline void io_queue_sqe(struct io_kiocb *req, unsigned int extra_flags)
|
||||
__must_hold(&req->ctx->uring_lock)
|
||||
{
|
||||
unsigned int issue_flags = IO_URING_F_NONBLOCK |
|
||||
IO_URING_F_COMPLETE_DEFER | extra_flags;
|
||||
int ret;
|
||||
|
||||
ret = io_issue_sqe(req, IO_URING_F_NONBLOCK|IO_URING_F_COMPLETE_DEFER);
|
||||
ret = io_issue_sqe(req, issue_flags);
|
||||
|
||||
/*
|
||||
* We async punt it if the file wasn't marked NOWAIT, or if the file
|
||||
@@ -2221,7 +2223,7 @@ static inline int io_submit_sqe(struct io_ring_ctx *ctx, struct io_kiocb *req,
|
||||
return 0;
|
||||
}
|
||||
|
||||
io_queue_sqe(req);
|
||||
io_queue_sqe(req, IO_URING_F_INLINE);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user