diff options
| author | Brian Foster <bfoster@redhat.com> | 2012-06-13 12:08:38 -0400 | 
|---|---|---|
| committer | Anand Avati <avati@redhat.com> | 2012-07-13 09:46:09 -0700 | 
| commit | 32ffb79f18cbaebcbe6bba51599ca234f44675cc (patch) | |
| tree | 3f7589078e618cf0f575e5ad03a67afecb50d006 /glusterfsd/src | |
| parent | ca4900497142127c31d0dba7a53a921200aaf790 (diff) | |
fuse/md-cache: add support for the 'fopen-keep-cache' mount option
fopen-keep-cache disables unconditional page-cache invalidations
on file open in fuse (via FOPEN_KEEP_CACHE) and replaces that
behavior with detection of remote changes and explicit
invalidations from mount/fuse. This option improves local caching
through the page cache and native client.
This change defines a new 'invalidate' translator callback to
identify when an inode's cache mapping has been determined to be
invalid. md-cache implements the policy to detect and invoke
inode invalidations. fuse-bridge and io-cache implement
invalidate handlers to invalidate the respective caches (page
cache in the case of fuse).
BUG: 833564
Change-Id: I99818da5777eaf06276c1c0b194669f5bab92d48
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-on: http://review.gluster.com/3584
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'glusterfsd/src')
| -rw-r--r-- | glusterfsd/src/glusterfsd.c | 19 | ||||
| -rw-r--r-- | glusterfsd/src/glusterfsd.h | 1 | 
2 files changed, 19 insertions, 1 deletions
diff --git a/glusterfsd/src/glusterfsd.c b/glusterfsd/src/glusterfsd.c index 0ab8fcd4c6d..76f01948193 100644 --- a/glusterfsd/src/glusterfsd.c +++ b/glusterfsd/src/glusterfsd.c @@ -168,6 +168,8 @@ static struct argp_option gf_options[] = {           "Brick name to be registered with Gluster portmapper" },          {"brick-port", ARGP_BRICK_PORT_KEY, "BRICK-PORT", OPTION_HIDDEN,           "Brick Port to be registered with Gluster portmapper" }, +	{"fopen-keep-cache", ARGP_FOPEN_KEEP_CACHE_KEY, 0, 0, +	 "Do not purge the cache on file open"},          {0, 0, 0, 0, "Fuse options:"},          {"direct-io-mode", ARGP_DIRECT_IO_MODE_KEY, "BOOL", OPTION_ARG_OPTIONAL, @@ -368,6 +370,17 @@ create_fuse_mount (glusterfs_ctx_t *ctx)                  }          } +	if (cmd_args->fopen_keep_cache) { +		ret = dict_set_static_ptr(master->options, "fopen-keep-cache", +			"on"); +		if (ret < 0) { +			gf_log("glusterfsd", GF_LOG_ERROR, +				"failed to set dict value for key " +				"fopen-keep-cache"); +			goto err; +		} +	} +          switch (cmd_args->fuse_direct_io_mode) {          case GF_OPTION_DISABLE: /* disable */                  ret = dict_set_static_ptr (master->options, ZR_DIRECT_IO_OPT, @@ -814,7 +827,11 @@ parse_opts (int key, char *arg, struct argp_state *state)                  ctx = glusterfs_ctx_get ();                  ctx->mem_accounting = 1;                  break; -        } + +	case ARGP_FOPEN_KEEP_CACHE_KEY: +		cmd_args->fopen_keep_cache = 1; +		break; +	}          return 0;  } diff --git a/glusterfsd/src/glusterfsd.h b/glusterfsd/src/glusterfsd.h index 8ec121954bb..382a8cc71fc 100644 --- a/glusterfsd/src/glusterfsd.h +++ b/glusterfsd/src/glusterfsd.h @@ -87,6 +87,7 @@ enum argp_option_keys {          ARGP_USER_MAP_ROOT_KEY            = 156,          ARGP_MEM_ACCOUNTING_KEY           = 157,          ARGP_SELINUX_KEY                  = 158, +	ARGP_FOPEN_KEEP_CACHE_KEY	  = 159,  };  struct _gfd_vol_top_priv_t {  | 
