summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCsaba Henk <csaba@gluster.com>2010-10-02 07:30:37 +0000
committerVijay Bellur <vijay@dev.gluster.com>2010-10-02 06:30:14 -0700
commit1cc15f9b0057cd6c8843c8b9cbb36c02d334ec6f (patch)
treeb568ef8419466aa95e9822ba3a331f936f100e38
parent73c6b2f21a67bed186a279adacb4eb28eafcd853 (diff)
xlator: make it possible to do type setting and dynamic loading separately
Signed-off-by: Csaba Henk <csaba@gluster.com> Signed-off-by: Vijay Bellur <vijay@dev.gluster.com> BUG: 1750 (clean up volgen) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1750
-rw-r--r--libglusterfs/src/xlator.c38
-rw-r--r--libglusterfs/src/xlator.h4
2 files changed, 34 insertions, 8 deletions
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c
index 105ee497b17..66508966a54 100644
--- a/libglusterfs/src/xlator.c
+++ b/libglusterfs/src/xlator.c
@@ -674,14 +674,8 @@ validate_xlator_volume_options (xlator_t *xl, volume_option_t *opt)
}
int32_t
-xlator_set_type (xlator_t *xl,
- const char *type)
+xlator_set_type_virtual (xlator_t *xl, const char *type)
{
- int ret = 0;
- char *name = NULL;
- void *handle = NULL;
- volume_opt_list_t *vol_opt = NULL;
-
if (xl == NULL || type == NULL) {
gf_log ("xlator", GF_LOG_DEBUG, "invalid argument");
return -1;
@@ -689,7 +683,22 @@ xlator_set_type (xlator_t *xl,
xl->type = gf_strdup (type);
- ret = gf_asprintf (&name, "%s/%s.so", XLATORDIR, type);
+ if (xl->type)
+ return 0;
+ else
+ return -1;
+}
+
+
+int32_t
+xlator_dynload (xlator_t *xl)
+{
+ int ret = 0;
+ char *name = NULL;
+ void *handle = NULL;
+ volume_opt_list_t *vol_opt = NULL;
+
+ ret = gf_asprintf (&name, "%s/%s.so", XLATORDIR, xl->type);
if (-1 == ret) {
gf_log ("xlator", GF_LOG_ERROR, "asprintf failed");
return -1;
@@ -779,6 +788,19 @@ xlator_set_type (xlator_t *xl,
}
+int32_t
+xlator_set_type (xlator_t *xl, const char *type)
+{
+ int ret = 0;
+
+ ret = xlator_set_type_virtual (xl, type);
+ if (!ret)
+ ret = xlator_dynload (xl);
+
+ return ret;
+}
+
+
void
xlator_foreach (xlator_t *this,
void (*fn)(xlator_t *each,
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h
index 618cf202589..217ad97bb4c 100644
--- a/libglusterfs/src/xlator.h
+++ b/libglusterfs/src/xlator.h
@@ -828,8 +828,12 @@ struct _xlator {
int validate_xlator_volume_options (xlator_t *xl, volume_option_t *opt);
+int32_t xlator_set_type_virtual (xlator_t *xl, const char *type);
+
int32_t xlator_set_type (xlator_t *xl, const char *type);
+int32_t xlator_dynload (xlator_t *xl);
+
xlator_t *file_to_xlator_tree (glusterfs_ctx_t *ctx,
FILE *fp);