From: Pavel Begunkov Date: Wed, 12 Nov 2025 12:45:53 +0000 (+0000) Subject: io_uring: refactor rings_size nosqarray handling X-Git-Tag: v6.19-rc1~169^2~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e279bb4b4c4d012808fb21ff41183a2e76c26679;p=thirdparty%2Fkernel%2Flinux.git 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 --- diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index c7535159ad6b3..c1dc4bf3cf62e 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,19 +2787,17 @@ 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; - } - - *sq_offset = off; + if (!(flags & IORING_SETUP_NO_SQARRAY)) { + size_t sq_array_size; - sq_array_size = array_size(sizeof(u32), sq_entries); - if (sq_array_size == SIZE_MAX) - return SIZE_MAX; + *sq_offset = off; - if (check_add_overflow(off, sq_array_size, &off)) - return SIZE_MAX; + 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; }