From patchwork Tue Apr 2 21:45:33 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Roth X-Patchwork-Id: 233170 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 874BB2C0164 for ; Wed, 3 Apr 2013 09:04:41 +1100 (EST) Received: from localhost ([::1]:60817 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UN9Jn-0001u1-Mz for incoming@patchwork.ozlabs.org; Tue, 02 Apr 2013 18:04:39 -0400 Received: from eggs.gnu.org ([208.118.235.92]:37348) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UN97g-0000k8-Kv for qemu-devel@nongnu.org; Tue, 02 Apr 2013 17:52:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UN97f-0000Sy-DV for qemu-devel@nongnu.org; Tue, 02 Apr 2013 17:52:08 -0400 Received: from mail-ye0-f171.google.com ([209.85.213.171]:42321) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UN97f-0000St-A4; Tue, 02 Apr 2013 17:52:07 -0400 Received: by mail-ye0-f171.google.com with SMTP id r10so140635yen.30 for ; Tue, 02 Apr 2013 14:52:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:sender:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references; bh=XyyIhJx1XaNQ9edzodBpdrOvc3hjNpiyyCdDnAMAcPA=; b=ifps2KKdcLfUepyZ2SWjrQbw+vKqy/re61LQCwuUBqecCB40S4WhFrFEuwbvH6KLkl MCFqFVCsUhkrVQnXycZzQaisyVJmDTeqBzgpO9MRKY/8b6GEiLPwsYS0icQN2qZO63+Q xk6ZmyvQ67dOPb4d+WqmxcCdk5ZbS+TDO191pKDr4qmLHvaKWzsptYwa47MBMqndTlzP 9hCuUkD+12V74mTg5dn51r1vFoTyWRD4vdfJjbD9i56ElWQBWBptUcn4KKhBI9BZfnsZ UCid2hy3529I7u1dTtJdonrZizAgXH+v4MhAr01jpxksV0892OQSpjVZx4jwVrYzahjM 7ihA== X-Received: by 10.236.117.226 with SMTP id j62mr16720937yhh.139.1364939526688; Tue, 02 Apr 2013 14:52:06 -0700 (PDT) Received: from localhost ([32.97.110.51]) by mx.google.com with ESMTPS id f70sm5761644yhi.12.2013.04.02.14.52.05 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Tue, 02 Apr 2013 14:52:06 -0700 (PDT) From: Michael Roth To: qemu-devel@nongnu.org Date: Tue, 2 Apr 2013 16:45:33 -0500 Message-Id: <1364939142-30066-29-git-send-email-mdroth@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1364939142-30066-1-git-send-email-mdroth@linux.vnet.ibm.com> References: <1364939142-30066-1-git-send-email-mdroth@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x [fuzzy] X-Received-From: 209.85.213.171 Cc: qemu-stable@nongnu.org Subject: [Qemu-devel] [PATCH 28/37] virtio-blk: fix unplug + virsh reboot X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Christian Borntraeger virtio-blk registers a vmstate change handler. Unfortunately this handler is not unregistered on unplug, leading to some random crashes if the system is restarted, e.g. via virsh reboot. Lets unregister the vmstate change handler if the device is removed. Signed-off-by: Christian Borntraeger Signed-off-by: Stefan Hajnoczi (cherry picked from commit 69b302b2044a9a0f6d157d25b39a91ff7124c61f) Signed-off-by: Michael Roth --- hw/virtio-blk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c index 34913ee..f5e6ee9 100644 --- a/hw/virtio-blk.c +++ b/hw/virtio-blk.c @@ -36,6 +36,7 @@ typedef struct VirtIOBlock VirtIOBlkConf *blk; unsigned short sector_mask; DeviceState *qdev; + VMChangeStateEntry *change; #ifdef CONFIG_VIRTIO_BLK_DATA_PLANE VirtIOBlockDataPlane *dataplane; #endif @@ -681,7 +682,7 @@ VirtIODevice *virtio_blk_init(DeviceState *dev, VirtIOBlkConf *blk) } #endif - qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s); + s->change = qemu_add_vm_change_state_handler(virtio_blk_dma_restart_cb, s); s->qdev = dev; register_savevm(dev, "virtio-blk", virtio_blk_id++, 2, virtio_blk_save, virtio_blk_load, s); @@ -702,6 +703,7 @@ void virtio_blk_exit(VirtIODevice *vdev) virtio_blk_data_plane_destroy(s->dataplane); s->dataplane = NULL; #endif + qemu_del_vm_change_state_handler(s->change); unregister_savevm(s->qdev, "virtio-blk", s); blockdev_mark_auto_del(s->bs); virtio_cleanup(vdev);