Commit 7faaa681 authored by Jens Axboe's avatar Jens Axboe
Browse files

io_uring/futex: ensure partial wakes are appropriately dequeued



If a FUTEX_WAITV vectored operation is only partially woken, we
should call __futex_wake_mark() on the queue to account for that.
If not, then a later wakeup will wake the same entry, rather than
the next one in line.

Fixes: 8f350194 ("io_uring: add support for vectored futex waits")
Reviewed-by: default avatarGabriel Krisman Bertazi <krisman@suse.de>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 79968834
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -159,8 +159,10 @@ static void io_futex_wakev_fn(struct wake_q_head *wake_q, struct futex_q *q)
	struct io_kiocb *req = q->wake_data;
	struct io_futexv_data *ifd = req->async_data;

	if (!io_futexv_claim(ifd))
	if (!io_futexv_claim(ifd)) {
		__futex_wake_mark(q);
		return;
	}
	if (unlikely(!__futex_wake_mark(q)))
		return;