From e279bb4b4c4d012808fb21ff41183a2e76c26679 Mon Sep 17 00:00:00 2001 From: Pavel Begunkov Date: Wed, 12 Nov 2025 12:45:53 +0000 Subject: [PATCH] io_uring: refactor rings_size nosqarray handling A preparation patch inversing the IORING_SETUP_NO_SQARRAY check, this way there is only one successful return path from the function, which will be helpful later. Signed-off-by: Pavel Begunkov Signed-off-by: Jens Axboe --- io_uring/io_uring.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index c7535159ad6b..c1dc4bf3cf62 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2761,7 +2761,9 @@ unsigned long rings_size(unsigned int flags, unsigned int sq_entries, unsigned int cq_entries, size_t *sq_offset) { struct io_rings *rings; - size_t off, sq_array_size; + size_t off; + + *sq_offset = SIZE_MAX; off = struct_size(rings, cqes, cq_entries); if (off == SIZE_MAX) @@ -2785,20 +2787,18 @@ unsigned long rings_size(unsigned int flags, unsigned int sq_entries, return SIZE_MAX; #endif - if (flags & IORING_SETUP_NO_SQARRAY) { - *sq_offset = SIZE_MAX; - return off; + if (!(flags & IORING_SETUP_NO_SQARRAY)) { + size_t sq_array_size; + + *sq_offset = off; + + sq_array_size = array_size(sizeof(u32), sq_entries); + if (sq_array_size == SIZE_MAX) + return SIZE_MAX; + if (check_add_overflow(off, sq_array_size, &off)) + return SIZE_MAX; } - *sq_offset = off; - - sq_array_size = array_size(sizeof(u32), sq_entries); - if (sq_array_size == SIZE_MAX) - return SIZE_MAX; - - if (check_add_overflow(off, sq_array_size, &off)) - return SIZE_MAX; - return off; }