diff options
Diffstat (limited to 'glusterfsd/src')
| -rw-r--r-- | glusterfsd/src/glusterfsd.c | 44 | ||||
| -rw-r--r-- | glusterfsd/src/glusterfsd.h | 1 | 
2 files changed, 45 insertions, 0 deletions
| diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index dfef7922245..f62fbf5e7c4 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -264,6 +264,9 @@ static struct argp_option gf_options[] = {       OPTION_ARG_OPTIONAL,       "declare supported granularity of file attribute"       " times in nanoseconds"}, +    {"fuse-flush-handle-interrupt", ARGP_FUSE_FLUSH_HANDLE_INTERRUPT_KEY, +     "BOOL", OPTION_ARG_OPTIONAL | OPTION_HIDDEN, +     "handle interrupt in fuse FLUSH handler"},      {0, 0, 0, 0, "Miscellaneous Options:"},      {          0, @@ -643,6 +646,31 @@ set_fuse_mount_options(glusterfs_ctx_t *ctx, dict_t *options)              goto err;          }      } +    switch (cmd_args->fuse_flush_handle_interrupt) { +        case GF_OPTION_ENABLE: +            ret = dict_set_static_ptr(options, "flush-handle-interrupt", "on"); +            if (ret < 0) { +                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4, +                       "failed to set dict value for key " +                       "flush-handle-interrupt"); +                goto err; +            } +            break; +        case GF_OPTION_DISABLE: +            ret = dict_set_static_ptr(options, "flush-handle-interrupt", "off"); +            if (ret < 0) { +                gf_msg("glusterfsd", GF_LOG_ERROR, 0, glusterfsd_msg_4, +                       "failed to set dict value for key " +                       "flush-handle-interrupt"); +                goto err; +            } +            break; +        case GF_OPTION_DEFERRED: /* default */ +        default: +            gf_msg_debug("glusterfsd", 0, "fuse-flush-handle-interrupt mode %d", +                         cmd_args->fuse_flush_handle_interrupt); +            break; +    }      ret = 0;  err: @@ -1421,6 +1449,21 @@ parse_opts(int key, char *arg, struct argp_state *state)              }              break; + +        case ARGP_FUSE_FLUSH_HANDLE_INTERRUPT_KEY: +            if (!arg) +                arg = "yes"; + +            if (gf_string2boolean(arg, &b) == 0) { +                cmd_args->fuse_flush_handle_interrupt = b; + +                break; +            } + +            argp_failure(state, -1, 0, +                         "unknown fuse flush handle interrupt setting \"%s\"", +                         arg); +            break;      }      return 0;  } @@ -1728,6 +1771,7 @@ glusterfs_ctx_defaults_init(glusterfs_ctx_t *ctx)      cmd_args->fuse_entry_timeout = -1;      cmd_args->fopen_keep_cache = GF_OPTION_DEFERRED;      cmd_args->kernel_writeback_cache = GF_OPTION_DEFERRED; +    cmd_args->fuse_flush_handle_interrupt = GF_OPTION_DEFERRED;      if (ctx->mem_acct_enable)          cmd_args->mem_acct = 1; diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index 28d46fc68b9..0042054e138 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -108,6 +108,7 @@ enum argp_option_keys {      ARGP_KERNEL_WRITEBACK_CACHE_KEY = 186,      ARGP_ATTR_TIMES_GRANULARITY_KEY = 187,      ARGP_PRINT_LIBEXECDIR_KEY = 188, +    ARGP_FUSE_FLUSH_HANDLE_INTERRUPT_KEY = 189,  };  struct _gfd_vol_top_priv { | 
