dm vdo wait-queue: optimize vdo_waitq_dequeue_matching_waiters
authorMike Snitzer <snitzer@kernel.org>
Mon, 20 Nov 2023 22:29:18 +0000 (17:29 -0500)
committerMike Snitzer <snitzer@kernel.org>
Tue, 20 Feb 2024 18:43:16 +0000 (13:43 -0500)
Remove temporary 'matched_waiters' waitq and just enqueue matched
waiters directly to the caller provided 'matched_waitq'.

Reviewed-by: Ken Raeburn <raeburn@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Signed-off-by: Matthew Sakai <msakai@redhat.com>
drivers/md/dm-vdo/wait-queue.c

index 4231d3243fa17a2b7994cded9038aa93a199037d..7e4cf9f03249b889b5b5c2e91b179a00363deb96 100644 (file)
@@ -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);
 }
 
 /**