• Pavel Begunkov's avatar
    io_uring: refactor rsrc refnode allocation · 8dd03afe
    Pavel Begunkov authored
    There are two problems:
    1) we always allocate refnodes in advance and free them if those
    haven't been used. It's expensive, takes two allocations, where one of
    them is percpu. And it may be pretty common not actually using them.
    
    2) Current API with allocating a refnode and setting some of the fields
    is error prone, we don't ever want to have a file node runninng fixed
    buffer callback...
    
    Solve both with pre-init/get API. Pre-init just leaves the node for
    later if not used, and for get (i.e. io_rsrc_refnode_get()), you need to
    explicitly pass all arguments setting callbacks/etc., so it's more
    resilient.
    Signed-off-by: default avatarPavel Begunkov <asml.silence@gmail.com>
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    8dd03afe
io_uring.c 244 KB