hi, I spent some time to learn the history of buffer select feature, especially from https://lwn.net/Articles/813311/. According to the description in this link: when doing the same IORING_OP_RECV, no buffer is passed in with the request. Instead, it's flagged with IOSQE_BUFFER_SELECT, and sqe->buf_group is filled in with a valid group ID. When the kernel can satisfy the receive, a buffer is selected from the specified group ID pool. If none are available, the IO is terminated with -ENOBUFS. On success, the buffer ID is passed back through the (CQE) completion event. This tells the application what specific buffer was used. According to my understandings, buffer select feature is suggested to be used with fast-poll feature, then in example of io_read(), for the first nowait try, io_read() will always get one io_buffer even later there is no data ready, eagain is returned and this req will enter io_arm_poll_handler(). So it seems that this behaviour violates the rule that buffer is only selected when data is ready? And for ENOBUFS error, how should apps handle this error? Re-provide buffers and re-issue requests from user space again? Thanks. Regards, Xiaoguang Wang