summaryrefslogtreecommitdiffstats
path: root/xlators/storage
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/storage')
-rw-r--r--xlators/storage/posix/src/posix.c70
1 files changed, 59 insertions, 11 deletions
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index ab2dcc2905b..ad42d2e1c8f 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -25,6 +25,8 @@
#include <sys/stat.h>
#include <signal.h>
#include <sys/uio.h>
+#include <unistd.h>
+#include <ftw.h>
#ifndef GF_BSD_HOST_OS
#include <alloca.h>
@@ -6610,6 +6612,61 @@ out:
}
int32_t
+posix_delete_unlink_entry (const char *fpath, const struct stat *sb,
+ int typeflag, struct FTW *ftwbuf) {
+
+ int ret = 0;
+
+ if (!fpath)
+ goto out;
+
+ switch (typeflag) {
+ case FTW_SL:
+ case FTW_NS:
+ case FTW_F:
+ case FTW_SLN:
+ ret = sys_unlink(fpath);
+ break;
+ case FTW_D:
+ case FTW_DP:
+ case FTW_DNR:
+ if (ftwbuf->level != 0) {
+ ret = sys_rmdir(fpath);
+ }
+ break;
+ default:
+ break;
+ }
+ if (ret) {
+ gf_msg ("posix_delete_unlink_entry", GF_LOG_WARNING, errno,
+ P_MSG_HANDLE_CREATE,
+ "Deletion of entries %s failed"
+ "Please delete it manually",
+ fpath);
+ }
+out:
+ return 0;
+}
+
+int32_t
+posix_delete_unlink (const char *unlink_path) {
+
+ int ret = -1;
+ int flags = 0;
+
+ flags |= (FTW_DEPTH | FTW_PHYS);
+
+ ret = nftw(unlink_path, posix_delete_unlink_entry, 2, flags);
+ if (ret) {
+ gf_msg ("posix_delete_unlink", GF_LOG_ERROR, 0,
+ P_MSG_HANDLE_CREATE,
+ "Deleting files from %s failed",
+ unlink_path);
+ }
+ return ret;
+}
+
+int32_t
posix_create_unlink_dir (xlator_t *this) {
char *unlink_path = NULL;
@@ -6655,15 +6712,8 @@ posix_create_unlink_dir (xlator_t *this) {
unlink_path);
return -1;
}
- ret = sys_rename (unlink_path, landfill_path);
- if (ret) {
- gf_msg (this->name, GF_LOG_ERROR, errno,
- P_MSG_HANDLE_CREATE,
- "Can not delete directory %s ",
- unlink_path);
- return -1;
- }
- break;
+ ret = posix_delete_unlink (unlink_path);
+ return 0;
default:
break;
}
@@ -6679,8 +6729,6 @@ posix_create_unlink_dir (xlator_t *this) {
return 0;
}
-
-
/**
* init -
*/