On 2/28/25 6:31 PM, Pavel Begunkov wrote: > On 2/28/25 23:59, Caleb Sander Mateos wrote: >> 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@xxxxxxxxxxxxxxx> >> --- >> io_uring/rsrc.c | 3 +-- >> 1 file changed, 1 insertion(+), 2 deletions(-) >> >> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c >> index 748a09cfaeaa..398c6f427bcc 100644 >> --- a/io_uring/rsrc.c >> +++ b/io_uring/rsrc.c >> @@ -780,11 +780,10 @@ static struct io_rsrc_node *io_sqe_buffer_register(struct io_ring_ctx *ctx, >> return NULL; >> node = io_rsrc_node_alloc(ctx, IORING_RSRC_BUFFER); >> if (!node) >> return ERR_PTR(-ENOMEM); >> - node->buf = NULL; > > It's better to have it zeroed than set to a freed / invalid > value, it's a slow path. Agree, let's leave the clear, I don't like passing uninitialized memory around. -- Jens Axboe