diff options
Diffstat (limited to 'libglusterfs')
| -rw-r--r-- | libglusterfs/src/xlator.c | 38 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.h | 4 | 
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);  | 
