[sheepdog] [PATCH] sheep/md: temp file cannot be removed

Ruoyu liangry at ucweb.com
Wed Jul 2 10:59:27 CEST 2014


d_name is only the file's name without absolute path. To unlink it
successfully, we must give the full name.

Signed-off-by: Ruoyu <liangry at ucweb.com>
---
 sheep/md.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/sheep/md.c b/sheep/md.c
index 538f696..f6d3b8e 100644
--- a/sheep/md.c
+++ b/sheep/md.c
@@ -185,6 +185,7 @@ static int for_each_object_in_path(const char *path,
 	struct dirent *d;
 	uint64_t oid;
 	int ret = SD_RES_SUCCESS;
+	char file_name[PATH_MAX];
 
 	dir = opendir(path);
 	if (unlikely(!dir)) {
@@ -208,8 +209,12 @@ static int for_each_object_in_path(const char *path,
 		/* don't call callback against temporary objects */
 		if (is_tmp_dentry(d->d_name)) {
 			if (cleanup) {
-				sd_debug("remove tmp object %s", d->d_name);
-				unlink(d->d_name);
+				snprintf(file_name, sizeof(file_name),
+						"%s/%s", path, d->d_name);
+				sd_debug("remove tmp object %s", file_name);
+				if (unlink(file_name) < 0)
+					sd_err("failed to unlink %s: %m",
+							file_name);
 			}
 			continue;
 		}
-- 
1.8.3.2





More information about the sheepdog mailing list