Browse Source
This fixes a crash when attaching a disk to a SCSI device using iothreads, then detaching it and reattaching it again. Test case included. Signed-off-by: Alberto Garcia <berto@igalia.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>pull/78/head
committed by
Kevin Wolf
4 changed files with 114 additions and 0 deletions
@ -0,0 +1,89 @@ |
|||
#!/bin/bash |
|||
# |
|||
# Test hot plugging and unplugging with iothreads |
|||
# |
|||
# Copyright (C) 2019 Igalia, S.L. |
|||
# Author: Alberto Garcia <berto@igalia.com> |
|||
# |
|||
# This program is free software; you can redistribute it and/or modify |
|||
# it under the terms of the GNU General Public License as published by |
|||
# the Free Software Foundation; either version 2 of the License, or |
|||
# (at your option) any later version. |
|||
# |
|||
# This program is distributed in the hope that it will be useful, |
|||
# but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|||
# GNU General Public License for more details. |
|||
# |
|||
# You should have received a copy of the GNU General Public License |
|||
# along with this program. If not, see <http://www.gnu.org/licenses/>. |
|||
# |
|||
|
|||
# creator |
|||
owner=berto@igalia.com |
|||
|
|||
seq=`basename $0` |
|||
echo "QA output created by $seq" |
|||
|
|||
status=1 # failure is the default! |
|||
|
|||
# get standard environment, filters and checks |
|||
. ./common.rc |
|||
. ./common.filter |
|||
|
|||
_supported_fmt generic |
|||
_supported_proto generic |
|||
_supported_os Linux |
|||
|
|||
do_run_qemu() |
|||
{ |
|||
echo Testing: "$@" |
|||
$QEMU -nographic -qmp stdio -serial none "$@" |
|||
echo |
|||
} |
|||
|
|||
# Remove QMP events from (pretty-printed) output. Doesn't handle |
|||
# nested dicts correctly, but we don't get any of those in this test. |
|||
_filter_qmp_events() |
|||
{ |
|||
tr '\n' '\t' | sed -e \ |
|||
's/{\s*"timestamp":\s*{[^}]*},\s*"event":[^,}]*\(,\s*"data":\s*{[^}]*}\)\?\s*}\s*//g' \ |
|||
| tr '\t' '\n' |
|||
} |
|||
|
|||
run_qemu() |
|||
{ |
|||
do_run_qemu "$@" 2>&1 | _filter_qmp | _filter_qmp_events |
|||
} |
|||
|
|||
case "$QEMU_DEFAULT_MACHINE" in |
|||
s390-ccw-virtio) |
|||
virtio_scsi=virtio-scsi-ccw |
|||
;; |
|||
*) |
|||
virtio_scsi=virtio-scsi-pci |
|||
;; |
|||
esac |
|||
|
|||
echo |
|||
echo === Unplug a SCSI disk and then plug it again === |
|||
echo |
|||
|
|||
run_qemu <<EOF |
|||
{ "execute": "qmp_capabilities" } |
|||
{ "execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "hd0"}} |
|||
{ "execute": "object-add", "arguments": {"qom-type": "iothread", "id": "iothread0"}} |
|||
{ "execute": "device_add", "arguments": {"id": "scsi0", "driver": "${virtio_scsi}", "iothread": "iothread0"}} |
|||
{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}} |
|||
{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}} |
|||
{ "execute": "device_add", "arguments": {"id": "scsi-hd0", "driver": "scsi-hd", "drive": "hd0"}} |
|||
{ "execute": "device_del", "arguments": {"id": "scsi-hd0"}} |
|||
{ "execute": "device_del", "arguments": {"id": "scsi0"}} |
|||
{ "execute": "blockdev-del", "arguments": {"node-name": "hd0"}} |
|||
{ "execute": "quit"} |
|||
EOF |
|||
|
|||
# success, all done |
|||
echo "*** done" |
|||
rm -f $seq.full |
|||
status=0 |
|||
@ -0,0 +1,18 @@ |
|||
QA output created by 240 |
|||
|
|||
=== Unplug a SCSI disk and then plug it again === |
|||
|
|||
Testing: |
|||
QMP_VERSION |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
{"return": {}} |
|||
*** done |
|||
Loading…
Reference in new issue