[libvirt] [PATCH 1/1] Add trigger of host rescan

Daniel P. Berrange berrange at redhat.com
Tue Apr 7 09:21:37 UTC 2009


On Mon, Apr 06, 2009 at 11:41:48AM -0400, Dave Allan wrote:
> >> static int
> >>+virStorageBackendSCSIStartPool(virConnectPtr conn ATTRIBUTE_UNUSED,
> >>+                               virStoragePoolObjPtr pool 
> >>ATTRIBUTE_UNUSED)
> >>+{
> >>+    int retval = 0;
> >>+
> >>+    return retval;
> >>+}
> >>+
> >>+
> >>+static int
> >>+virStorageBackendSCSIStopPool(virConnectPtr conn ATTRIBUTE_UNUSED,
> >>+                              virStoragePoolObjPtr pool ATTRIBUTE_UNUSED)
> >>+{
> >>+    int retval = 0;
> >>+
> >>+    return retval;
> >>+}
> >
> >  Is that really better than suggesting the operation is not supported ?
> 
> These two functions are, of course, not required for this patch. 
> They're there because I had started to implement NPIV support and then 
> thought I should submit this patch before the NPIV patch.  I can take 
> them out if you'd like and add them to the subsequent patch where they 
> will have contents.

Yep, prefer to leave them out if they're unrelated to this patch.

> 
> >[...]
> >>+    if (virAsprintf(&path, "/sys/class/scsi_host/host%u/scan", host) < 
> >>0) {
> >>+        virReportOOMError(conn);
> >>+        retval = -1;
> >>+        goto out;
> >>+    }
> >>+
> >>+    VIR_DEBUG(_("Scan trigger path is '%s'"), path);
> >>+
> >>+    fd = open(path, O_WRONLY);
> >>+
> >>+    if (fd < 0) {
> >>+        virReportSystemError(conn, errno,
> >>+                             _("Could not open '%s' to trigger host 
> >>scan"),
> >>+                             path);
> >>+        retval = -1;
> >>+        goto cleanup;
> >>+    }
> >>+
> >>+    if (write(fd,
> >>+              LINUX_SYSFS_SCSI_HOST_SCAN_STRING,
> >>+              sizeof(LINUX_SYSFS_SCSI_HOST_SCAN_STRING)) < 0) {
> >>+
> >>+        virReportSystemError(conn, errno,
> >>+                             _("Write to '%s' to trigger host scan 
> >>failed"),
> >>+                             path);
> >>+        retval = -1;
> >>+        goto cleanup;
> >>+    }
> >>+
> >>+    goto out;
> >
> >  Seems to me that goto should be suppressed, it just generate a leak of 
> >  path
> >On the other hand fd is leaked for sure ... This really need some
> >double-checking ;-)
> 
> Ugh, sorry about that.  Fixed, thanks.
> 
> >>+cleanup:
> >>+    VIR_FREE(path);
> >>+
> >>+out:
> >>+    VIR_DEBUG(_("Rescan of host %d complete"), host);
> >>+    return retval;
> >>+}
> >
> >  Otherwise, sounds fine, as long as this doesn't generate a bus reset.
> 
> It doesn't generate a bus reset.  As I mentioned above, this code is not 
> IO disruptive.  I haven't decided on what I think is the right way to do 
> scans that are IO disruptive.
> 
> I've attached a patch with a fix for the leaks.  It also adds \n to the 
> scan string.
> 
> Dave
> 

> >From 7f2c35b22fbce4ee28d276d870a6eacdfd207c3f Mon Sep 17 00:00:00 2001
> From: David Allan <dallan at redhat.com>
> Date: Mon, 6 Apr 2009 11:16:03 -0400
> Subject: [PATCH 2/2] Fix bugs per DV
> 
> Removed goto causing fd and memory leak.
> 
> Added \n to scan string.
> ---
>  src/storage_backend_scsi.c |    9 +++------
>  1 files changed, 3 insertions(+), 6 deletions(-)
> 
> diff --git a/src/storage_backend_scsi.c b/src/storage_backend_scsi.c
> index e30b3ce..bb945dc 100644
> --- a/src/storage_backend_scsi.c
> +++ b/src/storage_backend_scsi.c
> @@ -524,7 +524,7 @@ virStorageBackendSCSITriggerRescan(virConnectPtr conn,
>                               _("Could not open '%s' to trigger host scan"),
>                               path);
>          retval = -1;
> -        goto cleanup;
> +        goto free_path;
>      }
>  
>      if (write(fd,
> @@ -535,14 +535,11 @@ virStorageBackendSCSITriggerRescan(virConnectPtr conn,
>                               _("Write to '%s' to trigger host scan failed"),
>                               path);
>          retval = -1;
> -        goto cleanup;
>      }
>  
> -    goto out;
> -
> -cleanup:
> +    close(fd);
> +free_path:
>      VIR_FREE(path);
> -
>  out:
>      VIR_DEBUG(_("Rescan of host %d complete"), host);
>      return retval;

ACK

Daniel
-- 
|: Red Hat, Engineering, London   -o-   http://people.redhat.com/berrange/ :|
|: http://libvirt.org  -o-  http://virt-manager.org  -o-  http://ovirt.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505  -o-  F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|




More information about the libvir-list mailing list