qemu-devel
[Top][All Lists]
Advanced

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

Re: [PATCH v8 4/8] scsi: Propagate unrealize() callback to scsi-hd


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH v8 4/8] scsi: Propagate unrealize() callback to scsi-hd
Date: Tue, 22 Oct 2019 12:23:04 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.1

On 10/16/19 6:41 PM, Sam Eiderman wrote:
From: Sam Eiderman <address@hidden>

We will need to add LCHS removal logic to scsi-hd's unrealize() in the
next commit.

Reviewed-by: Karl Heubaum <address@hidden>
Reviewed-by: Arbel Moshe <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Signed-off-by: Sam Eiderman <address@hidden>
Signed-off-by: Sam Eiderman <address@hidden>
---
  hw/scsi/scsi-bus.c     | 16 ++++++++++++++++
  include/hw/scsi/scsi.h |  1 +
  2 files changed, 17 insertions(+)

diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
index bccb7cc4c6..359d50d6d0 100644
--- a/hw/scsi/scsi-bus.c
+++ b/hw/scsi/scsi-bus.c
@@ -59,6 +59,14 @@ static void scsi_device_realize(SCSIDevice *s, Error **errp)
      }
  }
+static void scsi_device_unrealize(SCSIDevice *s, Error **errp)
+{
+    SCSIDeviceClass *sc = SCSI_DEVICE_GET_CLASS(s);
+    if (sc->unrealize) {
+        sc->unrealize(s, errp);
+    }
+}
+
  int scsi_bus_parse_cdb(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf,
                         void *hba_private)
  {
@@ -217,12 +225,20 @@ static void scsi_qdev_realize(DeviceState *qdev, Error 
**errp)
  static void scsi_qdev_unrealize(DeviceState *qdev, Error **errp)
  {
      SCSIDevice *dev = SCSI_DEVICE(qdev);
+    Error *local_err = NULL;
if (dev->vmsentry) {
          qemu_del_vm_change_state_handler(dev->vmsentry);
      }
scsi_device_purge_requests(dev, SENSE_CODE(NO_SENSE));
+
+    scsi_device_unrealize(dev, &local_err);
+    if (local_err) {
+        error_propagate(errp, local_err);
+        return;
+    }
+
      blockdev_mark_auto_del(dev->conf.blk);
  }
diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
index d77a92361b..332ef602f4 100644
--- a/include/hw/scsi/scsi.h
+++ b/include/hw/scsi/scsi.h
@@ -59,6 +59,7 @@ struct SCSIRequest {
  typedef struct SCSIDeviceClass {
      DeviceClass parent_class;
      void (*realize)(SCSIDevice *dev, Error **errp);
+    void (*unrealize)(SCSIDevice *dev, Error **errp);
      int (*parse_cdb)(SCSIDevice *dev, SCSICommand *cmd, uint8_t *buf,
                       void *hba_private);
      SCSIRequest *(*alloc_req)(SCSIDevice *s, uint32_t tag, uint32_t lun,


Tested-by: Philippe Mathieu-Daudé <address@hidden>



reply via email to

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