REQ_F_POLL_NO_LAZY_BIT,
        REQ_F_CANCEL_SEQ_BIT,
        REQ_F_CAN_POLL_BIT,
+       REQ_F_BL_EMPTY_BIT,
 
        /* not a real bit, just to check we're not overflowing the space */
        __REQ_F_LAST_BIT,
        REQ_F_CANCEL_SEQ        = IO_REQ_FLAG(REQ_F_CANCEL_SEQ_BIT),
        /* file is pollable */
        REQ_F_CAN_POLL          = IO_REQ_FLAG(REQ_F_CAN_POLL_BIT),
+       /* buffer list was empty after selection of buffer */
+       REQ_F_BL_EMPTY          = IO_REQ_FLAG(REQ_F_BL_EMPTY_BIT),
 };
 
 typedef void (*io_req_tw_func_t)(struct io_kiocb *req, struct io_tw_state *ts);
 
                list_del(&kbuf->list);
                if (*len == 0 || *len > kbuf->len)
                        *len = kbuf->len;
+               if (list_empty(&bl->buf_list))
+                       req->flags |= REQ_F_BL_EMPTY;
                req->flags |= REQ_F_BUFFER_SELECTED;
                req->kbuf = kbuf;
                req->buf_index = kbuf->bid;
                                          unsigned int issue_flags)
 {
        struct io_uring_buf_ring *br = bl->buf_ring;
+       __u16 tail, head = bl->head;
        struct io_uring_buf *buf;
-       __u16 head = bl->head;
 
-       if (unlikely(smp_load_acquire(&br->tail) == head))
+       tail = smp_load_acquire(&br->tail);
+       if (unlikely(tail == head))
                return NULL;
 
+       if (head + 1 == tail)
+               req->flags |= REQ_F_BL_EMPTY;
+
        head &= bl->mask;
        /* mmaped buffers are always contig */
        if (bl->is_mmap || head < IO_BUFFER_LIST_BUF_PER_PAGE) {