On 12/20/2010 11:45 PM, Osier Yang wrote:
If there is a dangling symbolic link in filesystem pool, the pool
will fail to start or refresh, this patch is to fix it by ignoring
it with a warning log.
---
src/storage/storage_backend.c | 10 +++++++++-
src/storage/storage_backend_fs.c | 2 +-
2 files changed, 10 insertions(+), 2 deletions(-)
@@ -986,6 +987,13 @@ virStorageBackendVolOpenCheckMode(const char *path, unsigned int
flags)
struct stat sb;
if ((fd = open(path, O_RDONLY|O_NONBLOCK|O_NOCTTY)) < 0) {
+ if (stat(path, &sb) < 0 &&
+ (errno == ENOENT || errno == ELOOP)) {
+ VIR_WARN(_("cannot open volume '%s' :%s"), path,
+ strerror(errno));
+ return -2;
+ }
Given my comments here:
https://www.redhat.com/archives/libvir-list/2010-December/msg00826.html
I'm squashing this in, then pushing. Thanks for tackling this one.
diff --git i/src/storage/storage_backend.c w/src/storage/storage_backend.c
index efdd258..66775e9 100644
--- i/src/storage/storage_backend.c
+++ w/src/storage/storage_backend.c
@@ -987,8 +987,8 @@ virStorageBackendVolOpenCheckMode(const char *path,
unsigned int flags)
struct stat sb;
if ((fd = open(path, O_RDONLY|O_NONBLOCK|O_NOCTTY)) < 0) {
- if (stat(path, &sb) < 0 &&
- (errno == ENOENT || errno == ELOOP)) {
+ if ((errno == ENOENT || errno == ELOOP) &&
+ lstat(path, &sb) == 0) {
VIR_WARN(_("cannot open volume '%s' :%s"), path,
strerror(errno));
return -2;
--
Eric Blake eblake(a)redhat.com +1-801-349-2682
Libvirt virtualization library
http://libvirt.org