[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-stable] [PATCH v2 0/2] mirror dead-lock
From: |
Kevin Wolf |
Subject: |
Re: [Qemu-stable] [PATCH v2 0/2] mirror dead-lock |
Date: |
Mon, 3 Dec 2018 17:06:54 +0100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
Am 29.11.2018 um 11:17 hat Vladimir Sementsov-Ogievskiy geschrieben:
> Hi all!
>
> v2: add fix:)
>
> We've faced the following mirror bug:
>
> Just run mirror on qcow2 image more than 1G, and qemu is in dead lock.
>
> Dead lock described in 01, in short, we have extra aio_context_acquire
> and aio_context_release around blk_aio_pwritev in mirror_read_complete.
> So, write may yield to the main loop, and aio context is acquired. Main
> loop than hangs on trying to lock BQL, which is locked by cpu thread,
> and the cpu thread hangs on trying to acquire aio context.
>
> Hm, now the thing looks fixed, by I still have a questions:
>
> Is it a common thing, that we can't yield inside
> aio_context_acquire/release ?
>
> Was commit b9e413dd3756
> "block: explicitly acquire aiocontext in aio callbacks that need it"
> wrong? Why it added these acquire/release, when it is written in
> multiple-iothreads.txt, that "Side note: the best way to schedule a function
> call across threads is to call aio_bh_schedule_oneshot(). No acquire/release
> or locking is needed."
>
> Can someone in short describe, what BQL and aio context lock means, what they
> protect, and haw they should cooperate?
Thanks, applied patch 1 to the block branch. (We'll use Max' v3 for the
test case.)
Kevin