• Jens Axboe's avatar
    io_uring/net: don't clear msg_inq before io_recv_buf_select() needs it · 6e92c646
    Jens Axboe authored
    For bundle receives to function properly, the previous iteration msg_inq
    value is needed to make a judgement call on how much data there is to
    receive. A previous fix ended up clearing it earlier as an error case
    would potentially errantly set IORING_CQE_F_SOCK_NONEMPTY if the request
    got failed.
    
    Move the assignment to post assigning buffers for the receive, but
    ensure that it's cleared for the buffer selection error case. With that,
    buffer selection has the right msg_inq value and can correctly bundle
    receives as designed.
    
    Noticed while testing where it was apparent than more than 1 buffer was
    never received. After fix was in place, multiple buffers are correctly
    picked for receive. This provides a 10x speedup for the test case, as
    the buffer size used was 64b.
    
    Fixes: 18414a4a ("io_uring/net: assign kmsg inq/flags before buffer selection")
    Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
    6e92c646
net.c 43.2 KB