diff options
author | Jens Axboe <axboe@kernel.dk> | 2024-01-11 13:34:33 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2024-01-11 13:37:31 -0700 |
commit | 3f302388d45855c0b24802e7b414e3fb29f172e3 (patch) | |
tree | 073876c607431fdab4f0ff5f267c821bf96a0fcc /io_uring/io_uring.c | |
parent | fe80eb15dea5125ea64845c9de0dd7f8478dd267 (diff) | |
download | linux-stable-3f302388d45855c0b24802e7b414e3fb29f172e3.tar.gz linux-stable-3f302388d45855c0b24802e7b414e3fb29f172e3.tar.bz2 linux-stable-3f302388d45855c0b24802e7b414e3fb29f172e3.zip |
io_uring/rsrc: improve code generation for fixed file assignment
For the normal read/write path, we have already locked the ring
submission side when assigning the file. This causes branch
mispredictions when we then check and try and lock again in
io_req_set_rsrc_node(). As this is a very hot path, this matters.
Add a basic helper that already assumes we already have it locked,
and use that in io_file_get_fixed().
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/io_uring.c')
-rw-r--r-- | io_uring/io_uring.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 4afb911fc042..50c9f04bc193 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2000,9 +2000,10 @@ inline struct file *io_file_get_fixed(struct io_kiocb *req, int fd, goto out; fd = array_index_nospec(fd, ctx->nr_user_files); slot = io_fixed_file_slot(&ctx->file_table, fd); - file = io_slot_file(slot); + if (!req->rsrc_node) + __io_req_set_rsrc_node(req, ctx); req->flags |= io_slot_flags(slot); - io_req_set_rsrc_node(req, ctx, 0); + file = io_slot_file(slot); out: io_ring_submit_unlock(ctx, issue_flags); return file; |