From: Pavel Begunkov Date: Tue, 16 Sep 2025 14:27:54 +0000 (+0100) Subject: io_uring/zcrx: set sgt for umem area X-Git-Tag: v6.18-rc1~137^2~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5d93f7bade0b1eb60d0f395ad72b35581d28a896;p=thirdparty%2Fkernel%2Fstable.git io_uring/zcrx: set sgt for umem area Set struct io_zcrx_mem::sgt for umem areas as well to simplify looking up the current sg table. Signed-off-by: Pavel Begunkov Signed-off-by: Jens Axboe --- diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c index bcefb302aadf2..764723bf04d61 100644 --- a/io_uring/zcrx.c +++ b/io_uring/zcrx.c @@ -52,9 +52,9 @@ static inline struct page *io_zcrx_iov_page(const struct net_iov *niov) } static int io_populate_area_dma(struct io_zcrx_ifq *ifq, - struct io_zcrx_area *area, - struct sg_table *sgt) + struct io_zcrx_area *area) { + struct sg_table *sgt = area->mem.sgt; struct scatterlist *sg; unsigned i, niov_idx = 0; @@ -197,6 +197,7 @@ static int io_import_umem(struct io_zcrx_ifq *ifq, if (ret < 0) mem->account_pages = 0; + mem->sgt = &mem->page_sg_table; mem->pages = pages; mem->nr_folios = nr_pages; mem->size = area_reg->len; @@ -211,7 +212,8 @@ static void io_release_area_mem(struct io_zcrx_mem *mem) } if (mem->pages) { unpin_user_pages(mem->pages, mem->nr_folios); - sg_free_table(&mem->page_sg_table); + sg_free_table(mem->sgt); + mem->sgt = NULL; kvfree(mem->pages); } } @@ -263,7 +265,6 @@ static void io_zcrx_unmap_area(struct io_zcrx_ifq *ifq, static int io_zcrx_map_area(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) { - struct sg_table *sgt; int ret; guard(mutex)(&ifq->dma_lock); @@ -275,12 +276,9 @@ static int io_zcrx_map_area(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) DMA_FROM_DEVICE, IO_DMA_ATTR); if (ret < 0) return ret; - sgt = &area->mem.page_sg_table; - } else { - sgt = area->mem.sgt; } - ret = io_populate_area_dma(ifq, area, sgt); + ret = io_populate_area_dma(ifq, area); if (ret == 0) area->is_mapped = true; return ret; diff --git a/io_uring/zcrx.h b/io_uring/zcrx.h index 24ed473632c61..27d7cf28a04e9 100644 --- a/io_uring/zcrx.h +++ b/io_uring/zcrx.h @@ -16,10 +16,10 @@ struct io_zcrx_mem { unsigned long nr_folios; struct sg_table page_sg_table; unsigned long account_pages; + struct sg_table *sgt; struct dma_buf_attachment *attach; struct dma_buf *dmabuf; - struct sg_table *sgt; }; struct io_zcrx_area {