lxc/0067-lxc-report-error-when-remove-directory-failed.patch
LiFeng 7b470b3cde lxc: internal change at 1.6
Change-Id: I5821dc8a44f724e59cee65e356dfae4fbae04f76
Signed-off-by: LiFeng <lifeng68@huawei.com>
2020-01-05 22:20:49 -05:00

73 lines
2.2 KiB
Diff

From 44a5db6680dd81a11cd1afe87fae9ad63dc30f34 Mon Sep 17 00:00:00 2001
From: tanyifeng <tanyifeng1@huawei.com>
Date: Sat, 16 Mar 2019 10:06:13 +0800
Subject: [PATCH 067/138] lxc: report error when remove directory failed
Signed-off-by: tanyifeng <tanyifeng1@huawei.com>
Signed-off-by: LiFeng <lifeng68@huawei.com>
---
src/lxc/lxccontainer.c | 3 +++
src/lxc/utils.c | 9 ++++++++-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/src/lxc/lxccontainer.c b/src/lxc/lxccontainer.c
index bfbf223..3fd1a66 100644
--- a/src/lxc/lxccontainer.c
+++ b/src/lxc/lxccontainer.c
@@ -3148,8 +3148,11 @@ static bool container_destroy(struct lxc_container *c,
else
ret = lxc_rmdir_onedev(path, "snaps");
if (ret < 0) {
+ char msg[BUFSIZ] = { 0 };
ERROR("Failed to destroy directory \"%s\" for \"%s\"", path,
c->name);
+ sprintf(msg, "Failed to destroy directory \"%s\": %s", path, errno ? strerror(errno) : "error");
+ c->error_string = strdup(msg);
goto out;
}
INFO("Destroyed directory \"%s\" for \"%s\"", path, c->name);
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index 91ba493..480e6d0 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -88,6 +88,7 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev,
int ret, failed = 0;
char pathname[PATH_MAX];
bool hadexclude = false;
+ int saved_errno = 0;
dir = opendir(dirname);
if (!dir) {
@@ -153,6 +154,9 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev,
failed=1;
} else {
if (unlink(pathname) < 0) {
+ if (saved_errno == 0) {
+ saved_errno = errno;
+ }
SYSERROR("Failed to delete \"%s\"", pathname);
failed=1;
}
@@ -160,6 +164,9 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev,
}
if (rmdir(dirname) < 0 && !btrfs_try_remove_subvol(dirname) && !hadexclude) {
+ if (saved_errno == 0) {
+ saved_errno = errno;
+ }
SYSERROR("Failed to delete \"%s\"", dirname);
failed=1;
}
@@ -169,7 +176,7 @@ static int _recursive_rmdir(const char *dirname, dev_t pdev,
SYSERROR("Failed to close directory \"%s\"", dirname);
failed=1;
}
-
+ errno = saved_errno;
return failed ? -1 : 0;
}
--
1.8.3.1