[libvirt] [PATCH] storage: Skip socket and fifo on pool-start

Daniel Veillard veillard at redhat.com
Fri Nov 25 02:38:11 UTC 2011


On Thu, Nov 24, 2011 at 03:22:10PM +0100, Michal Privoznik wrote:
> If pool directory contains special files like FIFO or sockets
> we want to skip those on pool-start or pool-refresh otherwise
> open() will get an error.
> ---
>  src/storage/storage_backend.c |   25 ++++++++++++++++---------
>  1 files changed, 16 insertions(+), 9 deletions(-)
> 
> diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
> index 93c98d6..d30829d 100644
> --- a/src/storage/storage_backend.c
> +++ b/src/storage/storage_backend.c
> @@ -1013,9 +1013,24 @@ virStorageBackendVolOpenCheckMode(const char *path, unsigned int flags)
>      struct stat sb;
>      char *base = last_component(path);
>  
> +    if (lstat(path, &sb) < 0) {
> +        virReportSystemError(errno,
> +                             _("cannot stat file '%s'"),
> +                             path);
> +        return -1;
> +    }
> +
> +    if (S_ISFIFO(sb.st_mode)) {
> +        VIR_WARN("ignoring FIFO '%s'", path);
> +        return -2;
> +    } else if (S_ISSOCK(sb.st_mode)) {
> +        VIR_WARN("ignoring socket '%s'", path);
> +        return -2;
> +    }
> +
>      if ((fd = open(path, O_RDONLY|O_NONBLOCK|O_NOCTTY)) < 0) {
>          if ((errno == ENOENT || errno == ELOOP) &&
> -            lstat(path, &sb) == 0) {
> +            S_ISLNK(sb.st_mode)) {
>              VIR_WARN("ignoring dangling symlink '%s'", path);
>              return -2;
>          }
> @@ -1026,14 +1041,6 @@ virStorageBackendVolOpenCheckMode(const char *path, unsigned int flags)
>          return -1;
>      }
>  
> -    if (fstat(fd, &sb) < 0) {
> -        virReportSystemError(errno,
> -                             _("cannot stat file '%s'"),
> -                             path);
> -        VIR_FORCE_CLOSE(fd);
> -        return -1;
> -    }
> -
>      if (S_ISREG(sb.st_mode))
>          mode = VIR_STORAGE_VOL_OPEN_REG;
>      else if (S_ISCHR(sb.st_mode))

  ACK,

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list