mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
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 <raeburn@redhat.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org> Signed-off-by: Matthew Sakai <msakai@redhat.com>
This commit is contained in:
parent
cd1227dd83
commit
e752e5c33b
1 changed files with 2 additions and 6 deletions
|
@ -129,10 +129,8 @@ void vdo_waitq_dequeue_matching_waiters(struct vdo_wait_queue *waitq,
|
||||||
void *match_context,
|
void *match_context,
|
||||||
struct vdo_wait_queue *matched_waitq)
|
struct vdo_wait_queue *matched_waitq)
|
||||||
{
|
{
|
||||||
// FIXME: copying a waitq just to iterate it, with matching, is unfortunate
|
struct vdo_wait_queue iteration_waitq;
|
||||||
struct vdo_wait_queue matched_waiters, iteration_waitq;
|
|
||||||
|
|
||||||
vdo_waitq_init(&matched_waiters);
|
|
||||||
vdo_waitq_init(&iteration_waitq);
|
vdo_waitq_init(&iteration_waitq);
|
||||||
vdo_waitq_transfer_all_waiters(waitq, &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);
|
struct vdo_waiter *waiter = vdo_waitq_dequeue_next_waiter(&iteration_waitq);
|
||||||
|
|
||||||
vdo_waitq_enqueue_waiter((waiter_match(waiter, match_context) ?
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Add table
Reference in a new issue