summaryrefslogtreecommitdiffstats
path: root/xlators/mount/fuse/src/fuse-bridge.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/mount/fuse/src/fuse-bridge.c')
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c34
1 files changed, 31 insertions, 3 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index a0a09a4ec57..03f766082e2 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -5150,7 +5150,7 @@ fuse_thread_proc (void *data)
ZR_MOUNTPOINT_OPT));
if (mount_point) {
gf_log (this->name, GF_LOG_INFO,
- "unmounting %s", mount_point);
+ "initating unmount of %s", mount_point);
}
/* Kill the whole process, not just this thread. */
@@ -5779,6 +5779,24 @@ init (xlator_t *this_xl)
if (!mnt_args)
goto cleanup_exit;
+ {
+ char *mnt_tok = NULL;
+ token_iter_t tit = {0,};
+ gf_boolean_t iter_end = _gf_false;
+
+ for (mnt_tok = token_iter_init (mnt_args, ',', &tit) ;;) {
+ iter_end = next_token (&mnt_tok, &tit);
+
+ if (strcmp (mnt_tok, "auto_unmount") == 0) {
+ priv->auto_unmount = _gf_true;
+ drop_token (mnt_tok, &tit);
+ }
+
+ if (iter_end)
+ break;
+ }
+ }
+
if (pipe(priv->status_pipe) < 0) {
gf_log (this_xl->name, GF_LOG_ERROR,
"could not create pipe to separate mount process");
@@ -5790,6 +5808,11 @@ init (xlator_t *this_xl)
priv->status_pipe[1]);
if (priv->fd == -1)
goto cleanup_exit;
+ if (priv->auto_unmount) {
+ ret = gf_fuse_unmount_daemon (priv->mount_point, priv->fd);
+ if (ret ==-1)
+ goto cleanup_exit;
+ }
event = eh_new (FUSE_EVENT_HISTORY_SIZE, _gf_false, NULL);
if (!event) {
@@ -5867,10 +5890,15 @@ fini (xlator_t *this_xl)
mount_point = data_to_str (dict_get (this_xl->options,
ZR_MOUNTPOINT_OPT));
if (mount_point != NULL) {
+ if (!priv->auto_unmount) {
+ gf_log (this_xl->name, GF_LOG_INFO,
+ "Unmounting '%s'.", mount_point);
+ gf_fuse_unmount (mount_point, priv->fd);
+ }
+
gf_log (this_xl->name, GF_LOG_INFO,
- "Unmounting '%s'.", mount_point);
+ "Closing fuse connection to '%s'.", mount_point);
- gf_fuse_unmount (mount_point, priv->fd);
sys_close (priv->fuse_dump_fd);
dict_del (this_xl->options, ZR_MOUNTPOINT_OPT);
}