From e752e5c33b960085f1ae12e391b18dd8fc5ceef1 Mon Sep 17 00:00:00 2001 From: Mike Snitzer Date: Mon, 20 Nov 2023 17:29:18 -0500 Subject: [PATCH] dm vdo wait-queue: optimize vdo_waitq_dequeue_matching_waiters Remove temporary 'matched_waiters' waitq and just enqueue matched waiters directly to the caller provided 'matched_waitq'. Reviewed-by: Ken Raeburn Signed-off-by: Mike Snitzer Signed-off-by: Matthew Sakai --- drivers/md/dm-vdo/wait-queue.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/md/dm-vdo/wait-queue.c b/drivers/md/dm-vdo/wait-queue.c index 4231d3243fa17..7e4cf9f03249b 100644 --- a/drivers/md/dm-vdo/wait-queue.c +++ b/drivers/md/dm-vdo/wait-queue.c @@ -129,10 +129,8 @@ void vdo_waitq_dequeue_matching_waiters(struct vdo_wait_queue *waitq, void *match_context, struct vdo_wait_queue *matched_waitq) { - // FIXME: copying a waitq just to iterate it, with matching, is unfortunate - struct vdo_wait_queue matched_waiters, iteration_waitq; + struct vdo_wait_queue iteration_waitq; - vdo_waitq_init(&matched_waiters); vdo_waitq_init(&iteration_waitq); vdo_waitq_transfer_all_waiters(waitq, &iteration_waitq); @@ -140,10 +138,8 @@ void vdo_waitq_dequeue_matching_waiters(struct vdo_wait_queue *waitq, struct vdo_waiter *waiter = vdo_waitq_dequeue_next_waiter(&iteration_waitq); vdo_waitq_enqueue_waiter((waiter_match(waiter, match_context) ? - &matched_waiters : waitq), waiter); + matched_waitq : waitq), waiter); } - - vdo_waitq_transfer_all_waiters(&matched_waiters, matched_waitq); } /** -- 2.30.2