qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH for-6.0? 0/3] job: Add job_wait_unpaused() for block-job-complete
@ 2021-04-08 16:20 Max Reitz
  2021-04-08 16:20 ` [PATCH for-6.0? 1/3] " Max Reitz
                   ` (3 more replies)
  0 siblings, 4 replies; 18+ messages in thread
From: Max Reitz @ 2021-04-08 16:20 UTC (permalink / raw)
  To: qemu-block
  Cc: Kevin Wolf, Vladimir Sementsov-Ogievskiy, John Snow, qemu-devel,
	Max Reitz

Hi,

See patch 1 for a detailed explanation of the problem.

The gist is: Draining a READY job makes it transition to STANDBY, and
jobs on STANDBY cannot be completed.  Ending the drained section will
schedule the job (so it is then resumed), but not wait until it is
actually running again.

Therefore, it can happen that issuing block-job-complete fails when you
issue it right after some draining operation.

I tried to come up with an iotest reproducer, but in the end I only got
something that reproduced the issue like 2/10 times, and it required
heavy I/O, so it is nothing I would like to have as part of the iotests.
Instead, I opted for a unit test, which allows me to cheat a bit
(specifically, locking the job IO thread before ending the drained
section).


Max Reitz (3):
  job: Add job_wait_unpaused() for block-job-complete
  test-blockjob: Test job_wait_unpaused()
  iotests/041: block-job-complete on user-paused job

 include/qemu/job.h         |  15 ++++
 blockdev.c                 |   3 +
 job.c                      |  42 +++++++++++
 tests/unit/test-blockjob.c | 140 +++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/041     |  13 +++-
 5 files changed, 212 insertions(+), 1 deletion(-)

-- 
2.29.2



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

end of thread, other threads:[~2021-04-09 16:55 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-04-08 16:20 [PATCH for-6.0? 0/3] job: Add job_wait_unpaused() for block-job-complete Max Reitz
2021-04-08 16:20 ` [PATCH for-6.0? 1/3] " Max Reitz
2021-04-08 16:55   ` John Snow
2021-04-09  9:31     ` Max Reitz
2021-04-09 10:17       ` Kevin Wolf
2021-04-09  9:44     ` Kevin Wolf
2021-04-09  9:57       ` Max Reitz
2021-04-09 16:54         ` John Snow
2021-04-08 16:58   ` Vladimir Sementsov-Ogievskiy
2021-04-08 17:04     ` John Snow
2021-04-08 17:26       ` Vladimir Sementsov-Ogievskiy
2021-04-09  9:51         ` Max Reitz
2021-04-09 10:07           ` Vladimir Sementsov-Ogievskiy
2021-04-09 10:18             ` Max Reitz
2021-04-09  9:38     ` Max Reitz
2021-04-08 16:20 ` [PATCH for-6.0? 2/3] test-blockjob: Test job_wait_unpaused() Max Reitz
2021-04-08 16:20 ` [PATCH for-6.0? 3/3] iotests/041: block-job-complete on user-paused job Max Reitz
2021-04-08 17:09 ` [PATCH for-6.0? 0/3] job: Add job_wait_unpaused() for block-job-complete John Snow

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).