qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/1] block: Workaround for the iotests errors
@ 2017-11-23 17:57 Fam Zheng
  2017-11-23 17:57 ` [Qemu-devel] [PATCH 1/1] block: Don't poll for drain end Fam Zheng
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Fam Zheng @ 2017-11-23 17:57 UTC (permalink / raw)
  To: qemu-devel
  Cc: qemu-block, Fam Zheng, Kevin Wolf, Max Reitz, pbonzini,
	Stefan Hajnoczi, jcody

Jeff's block job patch made the latent drain bug visible, and I find this
patch, which by itself also makes some sense, can hide it again. :) With it
applied we are at least back to the ground where patchew's iotests (make
docker-test-block@fedora) can pass.

The real bug is that in the middle of bdrv_parent_drained_end(), bs's parent
list changes. One drained_end call before the mirror_exit() already did one
blk_root_drained_end(), a second drained_end on an updated parent node can do
another same blk_root_drained_end(), making it unbalanced with
blk_root_drained_begin(). This is shown by the following three backtraces as
captured by rr with a crashed "qemu-img commit", essentially the same as in
the failed iotest 020:

* Backtrace 1, where drain begins:

(rr) bt

* Backtrace 2, in the early phase of bdrv_parent_drained_end(), before
  mirror_exit happend:

(rr) bt

* Backtrace 3, in a later phase of the same bdrv_parent_drained_end(), after
  mirror_exit() which changed the node graph:

(rr) bt

IMO we should rethink bdrv_parent_drained_begin/end to avoid such complications
and maybe in the long term get rid of the nested BDRV_POLL_WHILE() if possible.

It's late for me so I'm posting the patch anyway in case we could use it for
-rc3.

Note this doesn't fix the hanging 056, which I haven't debugged yet.

Fam

Fam Zheng (1):
  block: Don't poll for drain end

 block/io.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

-- 
2.14.3

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

end of thread, other threads:[~2017-11-28 12:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-23 17:57 [Qemu-devel] [PATCH 0/1] block: Workaround for the iotests errors Fam Zheng
2017-11-23 17:57 ` [Qemu-devel] [PATCH 1/1] block: Don't poll for drain end Fam Zheng
2017-11-24  6:12 ` [Qemu-devel] [PATCH 0/1] block: Workaround for the iotests errors Jeff Cody
2017-11-24  8:41   ` Fam Zheng
2017-11-24 16:39 ` Kevin Wolf
2017-11-28  2:53   ` Fam Zheng
2017-11-27 23:29 ` Kevin Wolf
2017-11-28  0:21   ` [Qemu-devel] [Qemu-block] " John Snow
2017-11-28  5:43   ` [Qemu-devel] " Jeff Cody
2017-11-28 11:42     ` Kevin Wolf
2017-11-28 12:28       ` [Qemu-devel] [Qemu-block] " Kevin Wolf

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).