|
|
c401cc |
From c40bd80dcb6de62d1bd48af22a4dcbd73cf66506 Mon Sep 17 00:00:00 2001
|
|
|
c401cc |
Message-Id: <c40bd80dcb6de62d1bd48af22a4dcbd73cf66506@dist-git>
|
|
|
c401cc |
From: Eric Blake <eblake@redhat.com>
|
|
|
c401cc |
Date: Wed, 26 Feb 2014 14:54:27 +0100
|
|
|
c401cc |
Subject: [PATCH] storage: improve handling of symlinks in gluster
|
|
|
c401cc |
|
|
|
c401cc |
https://bugzilla.redhat.com/show_bug.cgi?id=1032370
|
|
|
c401cc |
|
|
|
c401cc |
With this patch, dangling and looping symlinks are silently
|
|
|
c401cc |
ignored, while links to files and directories are treated the
|
|
|
c401cc |
same as the underlying file or directory. This is the same
|
|
|
c401cc |
behavior as both 'directory' and 'netfs' pools.
|
|
|
c401cc |
|
|
|
c401cc |
* src/storage/storage_backend_gluster.c
|
|
|
c401cc |
(virStorageBackendGlusterRefreshVol): Treat symlinks similar to
|
|
|
c401cc |
directory and netfs pools.
|
|
|
c401cc |
|
|
|
c401cc |
Signed-off-by: Eric Blake <eblake@redhat.com>
|
|
|
c401cc |
(cherry picked from commit 79eb21f9765495841daecee2e3ec6bf402022327)
|
|
|
c401cc |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
c401cc |
---
|
|
|
c401cc |
src/storage/storage_backend_gluster.c | 11 +++++++++++
|
|
|
c401cc |
1 file changed, 11 insertions(+)
|
|
|
c401cc |
|
|
|
c401cc |
diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c
|
|
|
c401cc |
index 685ad57..f0ec357 100644
|
|
|
c401cc |
--- a/src/storage/storage_backend_gluster.c
|
|
|
c401cc |
+++ b/src/storage/storage_backend_gluster.c
|
|
|
c401cc |
@@ -166,6 +166,17 @@ virStorageBackendGlusterRefreshVol(virStorageBackendGlusterStatePtr state,
|
|
|
c401cc |
if (STREQ(name, ".") || STREQ(name, ".."))
|
|
|
c401cc |
return 0;
|
|
|
c401cc |
|
|
|
c401cc |
+ /* Follow symlinks; silently skip broken links and loops. */
|
|
|
c401cc |
+ if (S_ISLNK(st->st_mode) && glfs_stat(state->vol, name, st) < 0) {
|
|
|
c401cc |
+ if (errno == ENOENT || errno == ELOOP) {
|
|
|
c401cc |
+ VIR_WARN("ignoring dangling symlink '%s'", name);
|
|
|
c401cc |
+ ret = 0;
|
|
|
c401cc |
+ } else {
|
|
|
c401cc |
+ virReportSystemError(errno, _("cannot stat '%s'"), name);
|
|
|
c401cc |
+ }
|
|
|
c401cc |
+ return ret;
|
|
|
c401cc |
+ }
|
|
|
c401cc |
+
|
|
|
c401cc |
if (VIR_ALLOC(vol) < 0)
|
|
|
c401cc |
goto cleanup;
|
|
|
c401cc |
|
|
|
c401cc |
--
|
|
|
c401cc |
1.9.0
|
|
|
c401cc |
|