diff options
| author | Csaba Henk <csaba@gluster.com> | 2010-07-08 05:44:05 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-07-08 05:24:50 -0700 | 
| commit | f605883c4fe99428c560a18a1051693f7aadf84e (patch) | |
| tree | 21ee55116f9ec7426fc9084c4f566e56e5cea230 /glusterfsd/src | |
| parent | 2233d7d3c54bf2fc7dc291ae19d8516b44f6e6af (diff) | |
fix up option handling
After 79241696, the following anomalies came up:
- --mac-compat and --read-only was rejected originally
  on server side, 79241696 cancelled this check
- direct I/O option handling was interfered by 79241696
- --mac-compat had no effect on Linux and does not compile on Mac
Restore original behaviors.
Signed-off-by: Csaba Henk <csaba@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 971 (dynamic volume management)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=971
Diffstat (limited to 'glusterfsd/src')
| -rw-r--r-- | glusterfsd/src/glusterfsd.c | 81 | ||||
| -rw-r--r-- | glusterfsd/src/glusterfsd.h | 3 | 
2 files changed, 49 insertions, 35 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 3e0947fbb2b..8636e1f6c44 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -150,15 +150,19 @@ static struct argp_option gf_options[] = {           "Add/override a translator option for a volume with specified value"},          {"read-only", ARGP_READ_ONLY_KEY, 0, 0,           "Mount the filesystem in 'read-only' mode"}, -        {"mac-compat", ARGP_MAC_COMPAT_KEY, 0, 0, -         "Provide stubs for attributes needed for seamless operation on Macs"}, +        {"mac-compat", ARGP_MAC_COMPAT_KEY, "BOOL", OPTION_ARG_OPTIONAL, +         "Provide stubs for attributes needed for seamless operation on Macs " +#ifdef GF_DARWIN_HOST_OS +         "[default: \"on\" on client side, else \"off\"]" +#else +         "[default: \"off\"]" +#endif +         },          {0, 0, 0, 0, "Fuse options:"}, -        {"disable-direct-io-mode", ARGP_DISABLE_DIRECT_IO_MODE_KEY, 0, 0, -         "Disable direct I/O mode in fuse kernel module" -         " [default if big writes are supported]"}, -        {"enable-direct-io-mode", ARGP_ENABLE_DIRECT_IO_MODE_KEY, 0, 0, -         "Force direct I/O mode in fuse kernel module"}, +        {"direct-io-mode", ARGP_DIRECT_IO_MODE_KEY, "BOOL", OPTION_ARG_OPTIONAL, +         "Use direct I/O mode in fuse kernel module" +         " [default: \"off\" if big writes are supported, else \"on\"]"},          {"entry-timeout", ARGP_ENTRY_TIMEOUT_KEY, "SECONDS", 0,           "Set entry timeout to SECONDS in fuse kernel module [default: 1]"},          {"attribute-timeout", ARGP_ATTRIBUTE_TIMEOUT_KEY, "SECONDS", 0, @@ -232,35 +236,20 @@ create_fuse_mount (glusterfs_ctx_t *ctx)                  ret = dict_set_static_ptr (master->options, ZR_DUMP_FUSE,                                             cmd_args->dump_fuse); -#ifdef GF_DARWIN_HOST_OS -        /* On Darwin machines, O_APPEND is not handled, -         * which may corrupt the data -         */ - -        if (cmd_args->fuse_direct_io_mode_flag == 1) { -                gf_log ("glusterfsd", GF_LOG_DEBUG, -                        "'direct-io-mode' in fuse causes data corruption " -                        "if O_APPEND is used. disabling 'direct-io-mode'"); -        } -        ret = dict_set_static_ptr (top->options, ZR_DIRECT_IO_OPT, "disable"); - -#else /* ! DARWIN HOST OS */ -        switch (cmd_args->fuse_direct_io_mode_flag) { -        case 0: /* disable */ +        switch (cmd_args->fuse_direct_io_mode) { +        case GF_OPTION_DISABLE: /* disable */                  ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT,                                             "disable");                  break; -        case 1: /* enable */ +        case GF_OPTION_ENABLE: /* enable */                  ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT,                                             "enable");                  break; -        case 2: /* default */ +        case GF_OPTION_DEFERRED: /* default */          default:                  break;          } -#endif /* GF_DARWIN_HOST_OS */ -          ret = xlator_init (master);          if (ret)                  goto err; @@ -393,6 +382,7 @@ parse_opts (int key, char *arg, struct argp_state *state)          cmd_args_t *cmd_args = NULL;          uint32_t    n = 0;          double      d = 0.0; +        gf_boolean_t b = _gf_false;          cmd_args = state->input; @@ -418,7 +408,17 @@ parse_opts (int key, char *arg, struct argp_state *state)                  break;          case ARGP_MAC_COMPAT_KEY: -                cmd_args->mac_compat = 1; +                if (!arg) +                        arg = "on"; + +                if (gf_string2boolean (arg, &b) == 0) { +                        cmd_args->mac_compat = b; + +                        break; +                } + +                argp_failure (state, -1, 0, +                              "invalid value \"%s\" for mac-compat", arg);                  break;          case ARGP_VOLUME_FILE_KEY: @@ -520,12 +520,18 @@ parse_opts (int key, char *arg, struct argp_state *state)                  cmd_args->debug_mode = ENABLE_DEBUG_MODE;                  break; -        case ARGP_DISABLE_DIRECT_IO_MODE_KEY: -                cmd_args->fuse_direct_io_mode_flag = 0; -                break; +        case ARGP_DIRECT_IO_MODE_KEY: +                if (!arg) +                        arg = "on"; + +                if (gf_string2boolean (arg, &b) == 0) { +                        cmd_args->fuse_direct_io_mode = b; + +                        break; +                } -        case ARGP_ENABLE_DIRECT_IO_MODE_KEY: -                cmd_args->fuse_direct_io_mode_flag = 1; +                argp_failure (state, -1, 0, +                              "unknown direct I/O mode setting \"%s\"", arg);                  break;          case ARGP_ENTRY_TIMEOUT_KEY: @@ -786,7 +792,16 @@ glusterfs_ctx_defaults_init (glusterfs_ctx_t *ctx)          /* parsing command line arguments */          cmd_args->log_level = DEFAULT_LOG_LEVEL; -        cmd_args->fuse_direct_io_mode_flag = _gf_true; +#ifdef GF_DARWIN_HOST_OS +        cmd_args->mac_compat = GF_OPTION_DEFERRED; +        /* On Darwin machines, O_APPEND is not handled, +         * which may corrupt the data +         */ +        cmd_args->fuse_direct_io_mode = GF_OPTION_DISABLE; +#else +        cmd_args->mac_compat = GF_OPTION_DISABLE; +        cmd_args->fuse_direct_io_mode = GF_OPTION_DEFERRED; +#endif          cmd_args->fuse_attribute_timeout = -1;          INIT_LIST_HEAD (&cmd_args->xlator_options); diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index 62916711752..e4f4babaad0 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -64,12 +64,11 @@ enum argp_option_keys {  	ARGP_NO_DAEMON_KEY = 'N',  	ARGP_RUN_ID_KEY = 'r',  	ARGP_DEBUG_KEY = 133, -	ARGP_DISABLE_DIRECT_IO_MODE_KEY = 134,  	ARGP_ENTRY_TIMEOUT_KEY = 135,  	ARGP_ATTRIBUTE_TIMEOUT_KEY = 136,  	ARGP_VOLUME_NAME_KEY = 137,  	ARGP_XLATOR_OPTION_KEY = 138, -	ARGP_ENABLE_DIRECT_IO_MODE_KEY = 139, +	ARGP_DIRECT_IO_MODE_KEY = 139,  #ifdef GF_DARWIN_HOST_OS  	ARGP_NON_LOCAL_KEY = 140,  #endif /* DARWIN */  | 
