All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/5] blkdebug: fix racing condition when iterating on
@ 2021-04-08 15:59 Emanuele Giuseppe Esposito
  2021-04-08 15:59 ` [PATCH 1/5] blkdebug: refactor removal of a suspended request Emanuele Giuseppe Esposito
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Emanuele Giuseppe Esposito @ 2021-04-08 15:59 UTC (permalink / raw)
  To: qemu-block; +Cc: Kevin Wolf, Paolo Bonzini, qemu-devel, Max Reitz

When qemu_coroutine_enter is executed in a loop
(even QEMU_FOREACH_SAFE), the new routine can modify the list,
for example removing an element, causing problem when control
is given back to the caller that continues iterating on the same list. 

Patch 1 solves the issue in blkdebug_debug_resume by restarting
the list walk after every coroutine_enter if list has to be fully iterated.
Patches 2,3,4 aim to fix blkdebug_debug_event by gathering
all actions that the rules make in a counter and invoking 
the respective coroutine_yeld only after processing all requests.
Patch 5 adds a lock to protect rules and suspended_reqs.

Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>

Emanuele Giuseppe Esposito (5):
  blkdebug: refactor removal of a suspended request
  blkdebug: move post-resume handling to resume_req_by_tag
  blkdebug: track all actions
  blkdebug: do not suspend in the middle of QLIST_FOREACH_SAFE
  blkdebug: protect rules and suspended_reqs with a lock

 block/blkdebug.c | 113 +++++++++++++++++++++++++++++++++--------------
 1 file changed, 79 insertions(+), 34 deletions(-)

-- 
2.30.2



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2021-04-13  7:52 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-08 15:59 [PATCH 0/5] blkdebug: fix racing condition when iterating on Emanuele Giuseppe Esposito
2021-04-08 15:59 ` [PATCH 1/5] blkdebug: refactor removal of a suspended request Emanuele Giuseppe Esposito
2021-04-08 15:59 ` [PATCH 2/5] blkdebug: move post-resume handling to resume_req_by_tag Emanuele Giuseppe Esposito
2021-04-08 15:59 ` [PATCH 3/5] blkdebug: track all actions Emanuele Giuseppe Esposito
2021-04-08 15:59 ` [PATCH 4/5] blkdebug: do not suspend in the middle of QLIST_FOREACH_SAFE Emanuele Giuseppe Esposito
2021-04-13  7:48   ` Paolo Bonzini
2021-04-08 15:59 ` [PATCH 5/5] blkdebug: protect rules and suspended_reqs with a lock Emanuele Giuseppe Esposito
2021-04-13  7:50 ` [PATCH 0/5] blkdebug: fix racing condition when iterating on Paolo Bonzini

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.