diff options
author | Caleb Sander Mateos <csander@purestorage.com> | 2025-02-28 16:59:12 -0700 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2025-03-04 07:17:15 -0700 |
commit | 13f7f9686e928dae352972a1a95b50b2d5e80d42 (patch) | |
tree | 4c98a4d5a5d53efa261974bfb3aa3cdd185e575b | |
parent | a387b96d2a9687201318826d23c770eb794c778e (diff) |
io_uring/rsrc: call io_free_node() on io_sqe_buffer_register() failure
io_sqe_buffer_register() currently calls io_put_rsrc_node() if it fails
to fully set up the io_rsrc_node. io_put_rsrc_node() is more involved
than necessary, since we already know the reference count will reach 0
and no io_mapped_ubuf has been attached to the node yet.
So just call io_free_node() to release the node's memory. This also
avoids the need to temporarily set the node's buf pointer to NULL.
Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Link: https://lore.kernel.org/r/20250228235916.670437-3-csander@purestorage.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
-rw-r--r-- | io_uring/rsrc.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c index 19e9de040a20..8c1717c53d67 100644 --- a/io_uring/rsrc.c +++ b/io_uring/rsrc.c @@ -782,7 +782,6 @@ static struct io_rsrc_node *io_sqe_buffer_register(struct io_ring_ctx *ctx, node = io_rsrc_node_alloc(ctx, IORING_RSRC_BUFFER); if (!node) return ERR_PTR(-ENOMEM); - node->buf = NULL; ret = -ENOMEM; pages = io_pin_pages((unsigned long) iov->iov_base, iov->iov_len, @@ -839,7 +838,7 @@ done: if (imu) io_free_imu(ctx, imu); if (node) - io_put_rsrc_node(ctx, node); + io_free_node(ctx, node); node = ERR_PTR(ret); } kvfree(pages); |