On 07/11/2012 01:51 PM, Daniel P. Berrange wrote:
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
Sounds reasonable, I'll adjust the patch.
--
With kind regards,
Sascha Peilicke
SUSE Linux GmbH, Maxfeldstr. 5, D-90409 Nuernberg, Germany
GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer HRB 16746 (AG Nürnberg)