X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=io_uring%2Fkbuf.c;h=acc37e5a6d4e1d3852ebf31c5fb963bc7fe6e80e;hb=83454c2bfacdd5c13bb1b5e40a979cfb1088613a;hp=e2c46889d5fab614dbeb6b26a8a696d778709b8d;hpb=4312098baf37ee17a8350725e6e0d0e8590252d4;p=platform%2Fkernel%2Flinux-starfive.git diff --git a/io_uring/kbuf.c b/io_uring/kbuf.c index e2c4688..acc37e5 100644 --- a/io_uring/kbuf.c +++ b/io_uring/kbuf.c @@ -228,17 +228,18 @@ static int __io_remove_buffers(struct io_ring_ctx *ctx, return i; } - /* the head kbuf is the list itself */ + /* protects io_buffers_cache */ + lockdep_assert_held(&ctx->uring_lock); + while (!list_empty(&bl->buf_list)) { struct io_buffer *nxt; nxt = list_first_entry(&bl->buf_list, struct io_buffer, list); - list_del(&nxt->list); + list_move(&nxt->list, &ctx->io_buffers_cache); if (++i == nbufs) return i; cond_resched(); } - i++; return i; } @@ -509,7 +510,7 @@ int io_register_pbuf_ring(struct io_ring_ctx *ctx, void __user *arg) } pages = io_pin_pages(reg.ring_addr, - struct_size(br, bufs, reg.ring_entries), + flex_array_size(br, bufs, reg.ring_entries), &nr_pages); if (IS_ERR(pages)) { kfree(free_bl);