diff options
-rw-r--r-- | glusterfsd/src/glusterfsd.c | 26 | ||||
-rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 2 |
2 files changed, 25 insertions, 3 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 4ad47ec621a..8fbbb2f8d40 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -206,6 +206,8 @@ create_fuse_mount (glusterfs_ctx_t *ctx) int ret = 0; cmd_args_t *cmd_args = NULL; xlator_t *master = NULL; + char *mount_point = NULL; + char cwd[PATH_MAX] = {0,}; cmd_args = &ctx->cmd_args; @@ -242,8 +244,28 @@ create_fuse_mount (glusterfs_ctx_t *ctx) if (!master->options) goto err; - ret = dict_set_static_ptr (master->options, ZR_MOUNTPOINT_OPT, - cmd_args->mount_point); + /* Check if mount-point is absolute path, + * if not convert to absolute path by concating with CWD + */ + if (cmd_args->mount_point[0] != '/') { + if (getcwd (cwd, PATH_MAX) != NULL) { + ret = gf_asprintf (&mount_point, "%s/%s", cwd, + cmd_args->mount_point); + if (ret == -1) { + gf_log ("glusterfsd", GF_LOG_ERROR, + "Could not create absolute mountpoint " + "path"); + goto err; + } + } else { + gf_log ("glusterfsd", GF_LOG_ERROR, + "Could not get current working directory"); + goto err; + } + } else + mount_point = gf_strdup (cmd_args->mount_point); + + ret = dict_set_dynstr (master->options, ZR_MOUNTPOINT_OPT, mount_point); if (ret < 0) { gf_log ("glusterfsd", GF_LOG_ERROR, "failed to set mount-point to options dictionary"); diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 0b9ee176588..e2cdbe14112 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -4648,9 +4648,9 @@ fini (xlator_t *this_xl) gf_log (this_xl->name, GF_LOG_INFO, "Unmounting '%s'.", mount_point); - dict_del (this_xl->options, ZR_MOUNTPOINT_OPT); gf_fuse_unmount (mount_point, priv->fd); close (priv->fuse_dump_fd); + dict_del (this_xl->options, ZR_MOUNTPOINT_OPT); } /* Process should terminate once fuse xlator is finished. * Required for AUTH_FAILED event. |