From 1cc15f9b0057cd6c8843c8b9cbb36c02d334ec6f Mon Sep 17 00:00:00 2001 From: Csaba Henk Date: Sat, 2 Oct 2010 07:30:37 +0000 Subject: xlator: make it possible to do type setting and dynamic loading separately Signed-off-by: Csaba Henk Signed-off-by: Vijay Bellur BUG: 1750 (clean up volgen) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=1750 --- libglusterfs/src/xlator.c | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'libglusterfs/src/xlator.c') diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 105ee497b..66508966a 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, -- cgit