[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 1/3] blkdebug: fix one shot rule processing
From: |
Dongli Zhang |
Subject: |
Re: [Qemu-devel] [PATCH v3 1/3] blkdebug: fix one shot rule processing |
Date: |
Mon, 12 Nov 2018 19:15:28 +0800 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.3.0 |
Hi Marc,
When I play with the v3 patch set, the qemu hangs again and I need to kill it
with "kill -9".
I got below from guest:
[ 104.828127] nvme nvme0: I/O 52 QID 1 timeout, aborting
[ 104.828470] nvme nvme0: Abort status: 0x4001
nvme abort is not supported by qemu and therefore 0x4001 (NVME_INVALID_OPCODE |
NVME_DNR) is returned. qemu does not restart the device.
Below is the environment:
host: most recent qemu (master branch) with 3 patches applied, on top of Ubuntu
16.04.4 with 4.15.0-36-generic
guest: Ubuntu 16.04.4 with 4.13.0-39-generic.
The image to emulate nvme is a 128MB raw image (ext4). I randomly run "dd
if=/dev/zero of=output bs=1M count=30" on the nvme raw image to hit the
sector="40960" with "inject-delay" enabled as shown below:
[inject-delay]
event = "write_aio"
latency = "9999999999"
sector = "40960"
sudo ./x86_64-softmmu/qemu-system-x86_64 \
-drive file=os.img,format=raw,if=none,id=disk0 \
-device
virtio-blk-pci,drive=disk0,id=device0,num-queues=2,iothread=io1,bootindex=0 \
-object iothread,id=io1 \
-smp 2 -m 2000M -enable-kvm -vnc :0 -monitor stdio \
-device nvme,drive=nvmedrive,serial=deadbeaf1 \
-drive file=blkdebug:blkdebug.config:nvme.img,format=raw,if=none,id=nvmedrive \
-net nic -net user,hostfwd=tcp::5022-:22
I will debug where it hangs.
Dongli Zhang
On 11/12/2018 03:06 PM, Marc Olson via Qemu-devel wrote:
> If 'once' is specified, the rule should execute just once, regardless if
> it is supposed to return an error or not. Take the example where you
> want the first IO to an LBA to succeed, but subsequent IOs to fail. You
> could either use state transitions, or create two rules, one with
> error = 0 and once set to true, and one with a non-zero error.
>
> Signed-off-by: Marc Olson <address@hidden>
> ---
> block/blkdebug.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/block/blkdebug.c b/block/blkdebug.c
> index 0759452..327049b 100644
> --- a/block/blkdebug.c
> +++ b/block/blkdebug.c
> @@ -488,7 +488,7 @@ static int rule_check(BlockDriverState *bs, uint64_t
> offset, uint64_t bytes)
> }
> }
>
> - if (!rule || !rule->options.inject.error) {
> + if (!rule) {
> return 0;
> }
>
> @@ -500,7 +500,7 @@ static int rule_check(BlockDriverState *bs, uint64_t
> offset, uint64_t bytes)
> remove_rule(rule);
> }
>
> - if (!immediately) {
> + if (error && !immediately) {
> aio_co_schedule(qemu_get_current_aio_context(),
> qemu_coroutine_self());
> qemu_coroutine_yield();
> }
>