[libvirt] [PATCH] Fix directory removal in virStorageBackendFileSystemVolDelete

Daniel P. Berrange berrange at redhat.com
Wed Jul 11 11:51:31 UTC 2012


On Wed, Jul 11, 2012 at 01:25:34PM +0200, Sascha Peilicke wrote:
> ---
>  src/storage/storage_backend_fs.c |   11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/src/storage/storage_backend_fs.c b/src/storage/storage_backend_fs.c
> index 4894994..8e93aaa 100644
> --- a/src/storage/storage_backend_fs.c
> +++ b/src/storage/storage_backend_fs.c
> @@ -1138,6 +1138,17 @@ virStorageBackendFileSystemVolDelete(virConnectPtr conn ATTRIBUTE_UNUSED,
>      virCheckFlags(0, -1);
>  
>      if (unlink(vol->target.path) < 0) {
> +        if (errno == EISDIR /* linux */ ||
> +            errno == EPERM /* posix */) {
> +            if (rmdir(vol->target.path) < 0) {
> +                virReportSystemError(errno,
> +                                     _("cannot remove directory '%s'"),
> +                                     vol->target.path);
> +                return -1;
> +            } else {
> +                return 0;
> +            }
> +        }

The vol->type field should already tell us whether the volume is a FILE,
BLOCK, NETWORK or DIR object. We should make this code switch(vol->type)
and use unlink or rmdir as appropriate, and raise an error for BLOCK
or NETWORK types


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