[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