summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/src/glfs-mem-types.h1
-rw-r--r--api/src/glfs.c42
-rw-r--r--api/src/glfs.h3
3 files changed, 45 insertions, 1 deletions
diff --git a/api/src/glfs-mem-types.h b/api/src/glfs-mem-types.h
index e2e9b4c1ed7..590acd03f11 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 01c3494e28e..ac55628bd55 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 7fecffb697a..aeabfdf0b4f 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]