Loading io_uring/kbuf.c +3 −4 Original line number Diff line number Diff line Loading @@ -171,9 +171,8 @@ static void __user *io_ring_buffer_select(struct io_kiocb *req, size_t *len, * the transfer completes (or if we get -EAGAIN and must poll of * retry). */ req->flags &= ~REQ_F_BUFFERS_COMMIT; io_kbuf_commit(req, bl, 1); req->buf_list = NULL; bl->head++; } return u64_to_user_ptr(buf->addr); } Loading Loading @@ -297,8 +296,8 @@ int io_buffers_select(struct io_kiocb *req, struct buf_sel_arg *arg, * committed them, they cannot be put back in the queue. */ if (ret > 0) { req->flags |= REQ_F_BL_NO_RECYCLE; bl->head += ret; req->flags |= REQ_F_BUFFERS_COMMIT | REQ_F_BL_NO_RECYCLE; io_kbuf_commit(req, bl, ret); } } else { ret = io_provided_buffers_select(req, &arg->out_len, bl, arg->iovs); Loading io_uring/kbuf.h +10 −4 Original line number Diff line number Diff line Loading @@ -121,15 +121,21 @@ static inline bool io_kbuf_recycle(struct io_kiocb *req, unsigned issue_flags) return false; } static inline void io_kbuf_commit(struct io_kiocb *req, struct io_buffer_list *bl, int nr) { if (unlikely(!(req->flags & REQ_F_BUFFERS_COMMIT))) return; bl->head += nr; req->flags &= ~REQ_F_BUFFERS_COMMIT; } static inline void __io_put_kbuf_ring(struct io_kiocb *req, int nr) { struct io_buffer_list *bl = req->buf_list; if (bl) { if (req->flags & REQ_F_BUFFERS_COMMIT) { bl->head += nr; req->flags &= ~REQ_F_BUFFERS_COMMIT; } io_kbuf_commit(req, bl, nr); req->buf_index = bl->bgid; } req->flags &= ~REQ_F_BUFFER_RING; Loading Loading
io_uring/kbuf.c +3 −4 Original line number Diff line number Diff line Loading @@ -171,9 +171,8 @@ static void __user *io_ring_buffer_select(struct io_kiocb *req, size_t *len, * the transfer completes (or if we get -EAGAIN and must poll of * retry). */ req->flags &= ~REQ_F_BUFFERS_COMMIT; io_kbuf_commit(req, bl, 1); req->buf_list = NULL; bl->head++; } return u64_to_user_ptr(buf->addr); } Loading Loading @@ -297,8 +296,8 @@ int io_buffers_select(struct io_kiocb *req, struct buf_sel_arg *arg, * committed them, they cannot be put back in the queue. */ if (ret > 0) { req->flags |= REQ_F_BL_NO_RECYCLE; bl->head += ret; req->flags |= REQ_F_BUFFERS_COMMIT | REQ_F_BL_NO_RECYCLE; io_kbuf_commit(req, bl, ret); } } else { ret = io_provided_buffers_select(req, &arg->out_len, bl, arg->iovs); Loading
io_uring/kbuf.h +10 −4 Original line number Diff line number Diff line Loading @@ -121,15 +121,21 @@ static inline bool io_kbuf_recycle(struct io_kiocb *req, unsigned issue_flags) return false; } static inline void io_kbuf_commit(struct io_kiocb *req, struct io_buffer_list *bl, int nr) { if (unlikely(!(req->flags & REQ_F_BUFFERS_COMMIT))) return; bl->head += nr; req->flags &= ~REQ_F_BUFFERS_COMMIT; } static inline void __io_put_kbuf_ring(struct io_kiocb *req, int nr) { struct io_buffer_list *bl = req->buf_list; if (bl) { if (req->flags & REQ_F_BUFFERS_COMMIT) { bl->head += nr; req->flags &= ~REQ_F_BUFFERS_COMMIT; } io_kbuf_commit(req, bl, nr); req->buf_index = bl->bgid; } req->flags &= ~REQ_F_BUFFER_RING; Loading