summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlators/storage/posix/src/posix.c14
-rw-r--r--xlators/storage/posix/src/posix.h2
2 files changed, 15 insertions, 1 deletions
diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 1a5a52336e0..aad8a7350b1 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -4058,7 +4058,16 @@ init (xlator_t *this)
_private->janitor_sleep_duration = janitor_sleep;
}
-
+ /* performing open dir on brick dir locks the brick dir
+ * and prevents it from being unmounted
+ */
+ _private->mount_lock = opendir (dir_data->data);
+ if (!_private->mount_lock) {
+ ret = -1;
+ gf_log (this->name, GF_LOG_ERROR,
+ "Could not lock brick directory");
+ goto out;
+ }
#ifndef GF_DARWIN_HOST_OS
{
struct rlimit lim;
@@ -4104,6 +4113,9 @@ fini (xlator_t *this)
if (!priv)
return;
this->private = NULL;
+ /*unlock brick dir*/
+ if (priv->mount_lock)
+ closedir (priv->mount_lock);
GF_FREE (priv);
return;
}
diff --git a/xlators/storage/posix/src/posix.h b/xlators/storage/posix/src/posix.h
index 21170ea59f1..1733eadd1a8 100644
--- a/xlators/storage/posix/src/posix.h
+++ b/xlators/storage/posix/src/posix.h
@@ -114,6 +114,8 @@ struct posix_private {
pthread_t janitor;
gf_boolean_t janitor_present;
char * trash_path;
+/* lock for brick dir */
+ DIR *mount_lock;
};
#define POSIX_BASE_PATH(this) (((struct posix_private *)this->private)->base_path)