[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