io_uring: use unpin_user_pages() where appropriate
authorJens Axboe <axboe@kernel.dk>
Wed, 13 Mar 2024 21:01:03 +0000 (15:01 -0600)
committerJens Axboe <axboe@kernel.dk>
Mon, 15 Apr 2024 14:10:26 +0000 (08:10 -0600)
There are a few cases of open-rolled loops around unpin_user_page(), use
the generic helper instead.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
io_uring/io_uring.c
io_uring/kbuf.c

index 50e859da59e127ed109e988cc9b08006e80875f9..37066ea98f0b8b89d3d69f095544ee05a9982fb3 100644 (file)
@@ -2630,13 +2630,11 @@ void io_pages_unmap(void *ptr, struct page ***pages, unsigned short *npages,
 static void io_pages_free(struct page ***pages, int npages)
 {
        struct page **page_array = *pages;
-       int i;
 
        if (!page_array)
                return;
 
-       for (i = 0; i < npages; i++)
-               unpin_user_page(page_array[i]);
+       unpin_user_pages(page_array, npages);
        kvfree(page_array);
        *pages = NULL;
 }
index 820ac599d003e463fb46e8b13f9a1bfa191b07cd..10d5c98c1c562b186e3400d7d12b128e314f6f55 100644 (file)
@@ -455,8 +455,8 @@ static int io_pin_pbuf_ring(struct io_uring_buf_reg *reg,
                            struct io_buffer_list *bl)
 {
        struct io_uring_buf_ring *br = NULL;
-       int nr_pages, ret, i;
        struct page **pages;
+       int nr_pages, ret;
 
        pages = io_pin_pages(reg->ring_addr,
                             flex_array_size(br, bufs, reg->ring_entries),
@@ -492,8 +492,7 @@ static int io_pin_pbuf_ring(struct io_uring_buf_reg *reg,
        bl->is_mmap = 0;
        return 0;
 error_unpin:
-       for (i = 0; i < nr_pages; i++)
-               unpin_user_page(pages[i]);
+       unpin_user_pages(pages, nr_pages);
        kvfree(pages);
        vunmap(br);
        return ret;