diff options
| -rw-r--r-- | glusterfsd/src/glusterfsd.c | 17 | ||||
| -rw-r--r-- | glusterfsd/src/glusterfsd.h | 1 | ||||
| -rw-r--r-- | libglusterfs/src/glusterfs.h | 2 | ||||
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.c | 11 | ||||
| -rw-r--r-- | xlators/mount/fuse/src/fuse-bridge.h | 1 | ||||
| -rwxr-xr-x | xlators/mount/fuse/utils/mount.glusterfs.in | 16 | 
6 files changed, 44 insertions, 4 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 2c19e680..621cc47b 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -196,6 +196,8 @@ static struct argp_option gf_options[] = {           "Enable strict volume file checking"},          {"mem-accounting", ARGP_MEM_ACCOUNTING_KEY, 0, OPTION_HIDDEN,           "Enable internal memory accounting"}, +        {"fuse-mountopts", ARGP_FUSE_MOUNTOPTS_KEY, "OPTIONS", OPTION_HIDDEN, +         "Extra mount options to pass to FUSE"},          {0, 0, 0, 0, "Miscellaneous Options:"},          {0, }  }; @@ -489,6 +491,17 @@ create_fuse_mount (glusterfs_ctx_t *ctx)          if (ret)                  goto err; +        if (cmd_args->fuse_mountopts) { +                ret = dict_set_static_ptr (master->options, ZR_FUSE_MOUNTOPTS, +                                           cmd_args->fuse_mountopts); +                if (ret < 0) { +                        gf_log ("glusterfsd", GF_LOG_ERROR, +                                "failed to set dict value for key %s", +                                ZR_FUSE_MOUNTOPTS); +                        goto err; +                } +        } +          ret = xlator_init (master);          if (ret) {                  gf_log ("", GF_LOG_DEBUG, "failed to initialize fuse translator"); @@ -932,6 +945,10 @@ parse_opts (int key, char *arg, struct argp_state *state)                  argp_failure (state, -1, 0,                                "unknown congestion threshold option %s", arg);                  break; + +        case ARGP_FUSE_MOUNTOPTS_KEY: +                cmd_args->fuse_mountopts = gf_strdup (arg); +                break;  	}          return 0; diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index dab7f041..483a2175 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -84,6 +84,7 @@ enum argp_option_keys {  	ARGP_FUSE_BACKGROUND_QLEN_KEY     = 161,  	ARGP_FUSE_CONGESTION_THRESHOLD_KEY = 162,          ARGP_INODE32_KEY                  = 163, +	ARGP_FUSE_MOUNTOPTS_KEY		  = 164,  };  struct _gfd_vol_top_priv_t { diff --git a/libglusterfs/src/glusterfs.h b/libglusterfs/src/glusterfs.h index 68d9bbc9..57bc7998 100644 --- a/libglusterfs/src/glusterfs.h +++ b/libglusterfs/src/glusterfs.h @@ -76,6 +76,7 @@  #define ZR_DIRECT_IO_OPT        "direct-io-mode"  #define ZR_STRICT_VOLFILE_CHECK "strict-volfile-check"  #define ZR_DUMP_FUSE            "dump-fuse" +#define ZR_FUSE_MOUNTOPTS       "fuse-mountopts"  #define GF_XATTR_CLRLK_CMD      "glusterfs.clrlk"  #define GF_XATTR_PATHINFO_KEY   "trusted.glusterfs.pathinfo" @@ -318,6 +319,7 @@ struct _cmd_args {          unsigned         uid_map_root;          int              background_qlen;          int              congestion_threshold; +        char            *fuse_mountopts;  	/* key args */  	char            *mount_point; diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 726e500e..f9d38462 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -4655,6 +4655,8 @@ init (xlator_t *this_xl)  	GF_OPTION_INIT("gid-timeout", priv->gid_cache_timeout, int32,  		cleanup_exit); +	GF_OPTION_INIT ("fuse-mountopts", priv->fuse_mountopts, str, cleanup_exit); +  	if (gid_cache_init(&priv->gid_cache, priv->gid_cache_timeout) < 0) {  		gf_log("glusterfs-fuse", GF_LOG_ERROR, "Failed to initialize "  			"group cache."); @@ -4716,9 +4718,11 @@ init (xlator_t *this_xl)                  goto cleanup_exit;          } -        gf_asprintf (&mnt_args, "%s%sallow_other,max_read=131072", +        gf_asprintf (&mnt_args, "%s%s%s%sallow_other,max_read=131072",                       priv->read_only ? "ro," : "", -                     priv->acl ? "" : "default_permissions,"); +                     priv->acl ? "" : "default_permissions,", +                     priv->fuse_mountopts ? priv->fuse_mountopts : "", +                     priv->fuse_mountopts ? "," : "");          if (!mnt_args)                  goto cleanup_exit; @@ -4886,5 +4890,8 @@ struct volume_options options[] = {            .min = 12,            .max = (64 * GF_UNIT_KB),          }, +        { .key = {"fuse-mountopts"}, +          .type = GF_OPTION_TYPE_STR +        },          { .key = {NULL} },  }; diff --git a/xlators/mount/fuse/src/fuse-bridge.h b/xlators/mount/fuse/src/fuse-bridge.h index 3f45f064..7db9d653 100644 --- a/xlators/mount/fuse/src/fuse-bridge.h +++ b/xlators/mount/fuse/src/fuse-bridge.h @@ -107,6 +107,7 @@ struct fuse_private {          gf_boolean_t         enable_ino32;          fdtable_t           *fdtable;  	gid_cache_t	     gid_cache; +        char                *fuse_mountopts;          /* For fuse-reverse-validation */          int                  revchan_in; diff --git a/xlators/mount/fuse/utils/mount.glusterfs.in b/xlators/mount/fuse/utils/mount.glusterfs.in index 9b9c0f81..0d92bfbd 100755 --- a/xlators/mount/fuse/utils/mount.glusterfs.in +++ b/xlators/mount/fuse/utils/mount.glusterfs.in @@ -156,6 +156,10 @@ start_glusterfs ()  	cmd_line=$(echo "$cmd_line --congestion-threshold=$cong_threshold");      fi +    if [ -n "$fuse_mountopts" ]; then +	cmd_line=$(echo "$cmd_line --fuse-mountopts=$fuse_mountopts"); +    fi +      # for rdma volume, we have to fetch volfile with '.rdma' added      # to volume name, so that it fetches the right client vol file      volume_id_rdma=""; @@ -190,6 +194,10 @@ start_glusterfs ()          cmd_line=$(echo "$cmd_line --volfile=$volfile_loc");      fi +    if [ -n "$fuse_mountopts" ]; then +	cmd_line=$(echo "$cmd_line --fuse-mountopts=$fuse_mountopts"); +    fi +      cmd_line=$(echo "$cmd_line $mount_point");      err=0;      $cmd_line; @@ -353,7 +361,12 @@ main ()  			    "gid-timeout")	gid_timeout=$value ;;  			    "background-qlen")	bg_qlen=$value ;;  			    "congestion-threshold")	cong_threshold=$value ;; -                            *) echo "unknown option $key (ignored)" ;; +			    "fuse-mountopts")	fuse_mountopts=$value ;; +                            *) +                                # Passthru +                                [ -z "$fuse_mountopts" ] || fuse_mountopts="$fuse_mountopts," +                                fuse_mountopts="$fuse_mountopts$pair" +                                ;;                          esac                  esac              done @@ -422,4 +435,3 @@ main ()  }  _init "$@" && main "$@"; -  | 
