io_uring: add helper calculating region byte size

There has been type related issues with region size calculation, add an
utility helper function that returns the size and handles type
conversions right.

Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
Pavel Begunkov 2025-11-10 13:04:49 +00:00 committed by Jens Axboe
parent 21bd7b14a3
commit 4aed5b4e6d
2 changed files with 7 additions and 2 deletions

View File

@ -134,7 +134,7 @@ static int io_region_init_ptr(struct io_mapped_region *mr)
static int io_region_pin_pages(struct io_mapped_region *mr, static int io_region_pin_pages(struct io_mapped_region *mr,
struct io_uring_region_desc *reg) struct io_uring_region_desc *reg)
{ {
unsigned long size = mr->nr_pages << PAGE_SHIFT; size_t size = io_region_size(mr);
struct page **pages; struct page **pages;
int nr_pages; int nr_pages;
@ -154,7 +154,7 @@ static int io_region_allocate_pages(struct io_mapped_region *mr,
unsigned long mmap_offset) unsigned long mmap_offset)
{ {
gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN; gfp_t gfp = GFP_KERNEL_ACCOUNT | __GFP_ZERO | __GFP_NOWARN;
size_t size = (size_t) mr->nr_pages << PAGE_SHIFT; size_t size = io_region_size(mr);
unsigned long nr_allocated; unsigned long nr_allocated;
struct page **pages; struct page **pages;

View File

@ -43,4 +43,9 @@ static inline void io_region_publish(struct io_ring_ctx *ctx,
*dst_region = *src_region; *dst_region = *src_region;
} }
static inline size_t io_region_size(struct io_mapped_region *mr)
{
return (size_t) mr->nr_pages << PAGE_SHIFT;
}
#endif #endif