From 54b9cd3df357ac196af17f53282b3b1975dd4fb9 Mon Sep 17 00:00:00 2001 From: Anand Avati Date: Sat, 27 Apr 2013 11:59:36 -0700 Subject: gfapi: add new API glfs_set_xlator_option() This is the equivalent of specifying --xlator-option command line argument to glusterfsd. Change-Id: I1171dd518a85db4bd456fa0790f450e889a956cd BUG: 953694 Signed-off-by: Anand Avati Reviewed-on: http://review.gluster.org/4927 Tested-by: Gluster Build System Reviewed-by: Vijay Bellur --- api/src/glfs-mem-types.h | 1 + api/src/glfs.c | 42 +++++++++++++++++++++++++++++++++++++++++- api/src/glfs.h | 3 +++ 3 files changed, 45 insertions(+), 1 deletion(-) (limited to 'api') diff --git a/api/src/glfs-mem-types.h b/api/src/glfs-mem-types.h index e2e9b4c1e..590acd03f 100644 --- a/api/src/glfs-mem-types.h +++ b/api/src/glfs-mem-types.h @@ -22,6 +22,7 @@ enum glfs_mem_types_ { glfs_mt_glfs_fd_t, glfs_mt_glfs_io_t, glfs_mt_volfile_t, + glfs_mt_xlator_cmdline_option_t, glfs_mt_end }; diff --git a/api/src/glfs.c b/api/src/glfs.c index 01c3494e2..ac55628bd 100644 --- a/api/src/glfs.c +++ b/api/src/glfs.c @@ -21,7 +21,6 @@ - protocol/client to reconnect immediately after portmap disconnect. - handle SEEK_END failure in _lseek() - handle umask (per filesystem?) - - implement glfs_set_xlator_option(), like --xlator-option - make itables LRU based - implement glfs_fini() - 0-copy for readv/writev @@ -279,6 +278,47 @@ out: /////////////////////////////////////////////////////////////////////////////// +int +glfs_set_xlator_option (struct glfs *fs, const char *xlator, const char *key, + const char *value) +{ + xlator_cmdline_option_t *option = NULL; + + option = GF_CALLOC (1, sizeof (*option), + glfs_mt_xlator_cmdline_option_t); + if (!option) + goto enomem; + + INIT_LIST_HEAD (&option->cmd_args); + + option->volume = gf_strdup (xlator); + if (!option->volume) + goto enomem; + option->key = gf_strdup (key); + if (!option->key) + goto enomem; + option->value = gf_strdup (value); + if (!option->value) + goto enomem; + + list_add (&option->cmd_args, &fs->ctx->cmd_args.xlator_options); + + return 0; +enomem: + errno = ENOMEM; + + if (!option) + return -1; + + GF_FREE (option->volume); + GF_FREE (option->key); + GF_FREE (option->value); + GF_FREE (option); + + return -1; +} + + struct glfs * glfs_from_glfd (struct glfs_fd *glfd) { diff --git a/api/src/glfs.h b/api/src/glfs.h index 7fecffb69..aeabfdf0b 100644 --- a/api/src/glfs.h +++ b/api/src/glfs.h @@ -301,6 +301,9 @@ int glfs_close (glfs_fd_t *fd); glfs_t *glfs_from_glfd (glfs_fd_t *fd); +int glfs_set_xlator_option (glfs_t *fs, const char *xlator, const char *key, + const char *value); + typedef void (*glfs_io_cbk) (glfs_fd_t *fd, ssize_t ret, void *data); // glfs_{read,write}[_async] -- cgit