[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [Qemu-devel] [PATCH v0 0/2] Postponed actions

From: Denis Plotnikov
Subject: Re: [Qemu-block] [Qemu-devel] [PATCH v0 0/2] Postponed actions
Date: Mon, 13 Aug 2018 11:32:22 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

Ping ping!

On 16.07.2018 21:59, John Snow wrote:

On 07/16/2018 11:01 AM, Denis Plotnikov wrote:

I never saw a reply to Stefan's question on July 2nd, did you reply

Yes, I did. I talked to Stefan why the patch set appeared.

On 29.06.2018 15:40, Denis Plotnikov wrote:
There are cases when a request to a block driver state shouldn't have
appeared producing dangerous race conditions.
This misbehaviour is usually happens with storage devices emulated
without eventfd for guest to host notifications like IDE.

The issue arises when the context is in the "drained" section
and doesn't expect the request to come, but request comes from the
device not using iothread and which context is processed by the main

The main loop apart of the iothread event loop isn't blocked by the
"drained" section.
The request coming and processing while in "drained" section can spoil
block driver state consistency.

This behavior can be observed in the following KVM-based case:

1. Setup a VM with an IDE disk.
2. Inside a VM start a disk writing load for the IDE device
    e.g: dd if=<file> of=<file> bs=X count=Y oflag=direct
3. On the host create a mirroring block job for the IDE device
    e.g: drive_mirror <your_IDE> <your_path>
4. On the host finish the block job
    e.g: block_job_complete <your_IDE>
   Having done the 4th action, you could get an assert:
assert(QLIST_EMPTY(&bs->tracked_requests)) from mirror_run.
On my setup, the assert is 1/3 reproducible.

The patch series introduces the mechanism to postpone the requests
until the BDS leaves "drained" section for the devices not using
Also, it modifies the asynchronous block backend infrastructure to use
that mechanism to release the assert bug for IDE devices.

Denis Plotnikov (2):
    async: add infrastructure for postponed actions
    block: postpone the coroutine executing if the BDS's is drained

   block/block-backend.c | 58 ++++++++++++++++++++++++++++++---------
   include/block/aio.h   | 63 +++++++++++++++++++++++++++++++++++++++++++
   util/async.c          | 33 +++++++++++++++++++++++
   3 files changed, 142 insertions(+), 12 deletions(-)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]