[libvirt] [PATCH] Fix directory removal in virStorageBackendFileSystemVolDelete

Daniel P. Berrange berrange at redhat.com
Wed Jul 11 15:42:48 UTC 2012


On Wed, Jul 11, 2012 at 03:21:27PM +0200, Sascha Peilicke wrote:
> ---
>  src/storage/storage_backend_fs.c |   28 +++++++++++++++++++++++-----
>  1 file changed, 23 insertions(+), 5 deletions(-)
> 
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 4894994..df0aaf8 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -1127,7 +1127,7 @@ virStorageBackendFileSystemVolBuildFrom(virConnectPtr conn,
>  }
>  
>  /**
> - * Remove a volume - just unlinks for now
> + * Remove a volume - no support for BLOCK and NETWORK yet
>   */
>  static int
>  virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
> @@ -1137,14 +1137,32 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
>  {
>      virCheckFlags(0, -1);
>  
> -    if (unlink(vol->target.path) < 0) {
> -        /* Silently ignore failures where the vol has already gone away */
> -        if (errno != ENOENT) {
> +    switch (vol->type) {
> +    case VIR_STORAGE_VOL_FILE:
> +        if (unlink(vol->target.path) < 0) {
> +            /* Silently ignore failures where the vol has already gone away */
> +            if (errno != ENOENT) {
> +                virReportSystemError(errno,
> +                                     _("cannot unlink file '%s'"),
> +                                     vol->target.path);
> +                return -1;
> +            }
> +        }
> +        break;
> +    case VIR_STORAGE_VOL_DIR:
> +        if (rmdir(vol->target.path) < 0) {
>              virReportSystemError(errno,
> -                                 _("cannot unlink file '%s'"),
> +                                 _("cannot remove directory '%s'"),
>                                   vol->target.path);
>              return -1;
>          }
> +        break;
> +    case VIR_STORAGE_VOL_BLOCK:
> +    case VIR_STORAGE_VOL_NETWORK:
> +    default:
> +        virStorageReportError(VIR_ERR_NO_SUPPORT,
> +                              _("removing block or network volumes is not supported: %s"),
> +                              vol->target.path);

Missing 'return -1' line here.

>      }
>      return 0;
>  }

I fixed that small bug and committed this patch to GIT, adding your
name to AUTHORS.

Regards,
Daniel
-- 
|: http://berrange.com      -o-    http://www.flickr.com/photos/dberrange/ :|
|: http://libvirt.org              -o-             http://virt-manager.org :|
|: http://autobuild.org       -o-         http://search.cpan.org/~danberr/ :|
|: http://entangle-photo.org       -o-       http://live.gnome.org/gtk-vnc :|




More information about the libvir-list mailing list