summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorKaushal M <kaushal@gluster.com>2011-11-02 11:27:30 +0530
committerVijay Bellur <vijay@gluster.com>2011-11-22 19:46:06 -0800
commit33477a140fb4e891a05dd9261013e83035155350 (patch)
treeae7ec0427517bdf516facd5450a6c398f86e2900 /xlators
parente1de01c3fdde2497cc4a24491b75579624467456 (diff)
fuse: enable kernel read-only mode
Enables kernel read-only mode on mounting with '-oro' and disables the gluster read-only translator from being loaded. As a result, '-oro' is reported correctly in the mount options. Change-Id: If94d97836b13668974cfac61b6e5d52e19880e10 BUG: 3742 Reviewed-on: http://review.gluster.com/655 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Jeff Darcy <jdarcy@redhat.com> Reviewed-by: Csaba Henk <csaba@gluster.com>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c31
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.h1
2 files changed, 20 insertions, 12 deletions
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 62726b38f..3e271ff69 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -3560,6 +3560,7 @@ init (xlator_t *this_xl)
int fsname_allocated = 0;
glusterfs_ctx_t *ctx = NULL;
gf_boolean_t sync_mtab = _gf_false;
+ char *mnt_args = NULL;
if (this_xl == NULL)
return -1;
@@ -3680,6 +3681,12 @@ init (xlator_t *this_xl)
if (priv->uid_map_root)
priv->acl = 1;
+ priv->read_only = 0;
+ ret = dict_get_str (options, "read-only", &value_string);
+ if (ret == 0) {
+ ret = gf_string2boolean (value_string, &priv->read_only);
+ GF_ASSERT (ret == 0);
+ }
priv->fuse_dump_fd = -1;
ret = dict_get_str (options, "dump-fuse", &value_string);
@@ -3729,19 +3736,14 @@ init (xlator_t *this_xl)
if (!fsname)
fsname = "glusterfs";
+ gf_asprintf (&mnt_args, "%s%sallow_other,max_read=131072",
+ priv->read_only ? "ro," : "",
+ priv->acl ? "" : "default_permissions,");
+ if (!mnt_args)
+ goto cleanup_exit;
- if (priv->acl) {
- priv->fd = gf_fuse_mount (priv->mount_point, fsname,
- "allow_other,"
- "max_read=131072",
- sync_mtab ? &ctx->mtab_pid : NULL);
- } else {
- priv->fd = gf_fuse_mount (priv->mount_point, fsname,
- "allow_other,default_permissions,"
- "max_read=131072",
- sync_mtab ? &ctx->mtab_pid : NULL);
- }
-
+ priv->fd = gf_fuse_mount (priv->mount_point, fsname, mnt_args,
+ sync_mtab ? &ctx->mtab_pid : NULL);
if (priv->fd == -1)
goto cleanup_exit;
@@ -3775,6 +3777,8 @@ cleanup_exit:
close (priv->fuse_dump_fd);
GF_FREE (priv);
}
+ if (mnt_args)
+ GF_FREE (mnt_args);
return -1;
}
@@ -3844,5 +3848,8 @@ struct volume_options options[] = {
{ .key = {"sync-mtab"},
.type = GF_OPTION_TYPE_BOOL
},
+ { .key = {"read-only"},
+ .type = GF_OPTION_TYPE_BOOL
+ },
{ .key = {NULL} },
};
diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h
index 2215ad22f..2b8323a8c 100644
--- a/xlators/mount/fuse/src/fuse-bridge.h
+++ b/xlators/mount/fuse/src/fuse-bridge.h
@@ -108,6 +108,7 @@ struct fuse_private {
gf_boolean_t client_pid_set;
unsigned uid_map_root;
gf_boolean_t acl;
+ gf_boolean_t read_only;
};
typedef struct fuse_private fuse_private_t;