diff options
Diffstat (limited to 'libglusterfs/src/xlator.c')
| -rw-r--r-- | libglusterfs/src/xlator.c | 151 | 
1 files changed, 76 insertions, 75 deletions
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index bb95e43a280..b8f800c7050 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -1159,70 +1159,68 @@ validate_xlator_volume_options (xlator_t *xl, volume_option_t *opt)  int32_t  xlator_set_type_virtual (xlator_t *xl, const char *type)  { -	if ((xl == NULL) || (type == NULL))	{ -		gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -		return -1; -	} +        GF_VALIDATE_OR_GOTO ("xlator", xl, out); +        GF_VALIDATE_OR_GOTO ("xlator", type, out);          xl->type = gf_strdup (type);          if (xl->type)                  return 0; -        else -                return -1; + +out: +        return -1;  }  int32_t  xlator_dynload (xlator_t *xl)  { -        int   ret = 0; +        int   ret = -1;  	char *name = NULL;  	void *handle = NULL;  	volume_opt_list_t *vol_opt = NULL; +        GF_VALIDATE_OR_GOTO ("xlator", xl, out); +  	ret = gf_asprintf (&name, "%s/%s.so", XLATORDIR, xl->type);          if (-1 == ret) {                  gf_log ("xlator", GF_LOG_ERROR, "asprintf failed"); -                return -1; +                goto out;          } +        ret = -1; +  	gf_log ("xlator", GF_LOG_TRACE, "attempt to load file %s", name);  	handle = dlopen (name, RTLD_NOW|RTLD_GLOBAL);  	if (!handle) {  		gf_log ("xlator", GF_LOG_WARNING, "%s", dlerror ()); -                GF_FREE (name); -		return -1; +                goto out;  	}          xl->dlhandle = handle;  	if (!(xl->fops = dlsym (handle, "fops"))) {  		gf_log ("xlator", GF_LOG_WARNING, "dlsym(fops) on %s",  			dlerror ()); -                GF_FREE (name); -		return -1; +                goto out;  	}  	if (!(xl->cbks = dlsym (handle, "cbks"))) {  		gf_log ("xlator", GF_LOG_WARNING, "dlsym(cbks) on %s",  			dlerror ()); -                GF_FREE (name); -		return -1; +                goto out;  	}  	if (!(xl->init = dlsym (handle, "init"))) {  		gf_log ("xlator", GF_LOG_WARNING, "dlsym(init) on %s",  			dlerror ()); -                GF_FREE (name); -		return -1; +                goto out;  	}  	if (!(xl->fini = dlsym (handle, "fini"))) {  		gf_log ("xlator", GF_LOG_WARNING, "dlsym(fini) on %s",  			dlerror ()); -                GF_FREE (name); -		return -1; +                goto out;  	}  	if (!(xl->notify = dlsym (handle, "notify"))) { @@ -1260,8 +1258,7 @@ xlator_dynload (xlator_t *xl)                           gf_common_mt_volume_opt_list_t);          if (!vol_opt) { -                GF_FREE (name); -                return -1; +                goto out;          }  	if (!(vol_opt->given_opt = dlsym (handle, "options"))) { @@ -1273,8 +1270,12 @@ xlator_dynload (xlator_t *xl)  	fill_defaults (xl); -	GF_FREE (name); -	return 0; +        ret = 0; + +out: +        if (name) +                GF_FREE (name); +	return ret;  } @@ -1300,10 +1301,9 @@ xlator_foreach (xlator_t *this,  	xlator_t *first    = NULL;          xlator_t *old_THIS = NULL; -	if ((this == NULL) || (fn == NULL) || (data == NULL))	{ -		gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -		return; -	} +        GF_VALIDATE_OR_GOTO ("xlator", this, out); +        GF_VALIDATE_OR_GOTO ("xlator", fn, out); +        GF_VALIDATE_OR_GOTO ("xlator", data, out);  	first = this; @@ -1319,6 +1319,9 @@ xlator_foreach (xlator_t *this,                  THIS = old_THIS;  		first = first->next;  	} + +out: +        return;  } @@ -1327,10 +1330,8 @@ xlator_search_by_name (xlator_t *any, const char *name)  {  	xlator_t *search = NULL; -	if ((any == NULL) || (name == NULL)) { -		gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -		return NULL; -	} +        GF_VALIDATE_OR_GOTO ("xlator", any, out); +        GF_VALIDATE_OR_GOTO ("xlator", name, out);  	search = any; @@ -1343,6 +1344,7 @@ xlator_search_by_name (xlator_t *any, const char *name)  		search = search->next;  	} +out:  	return search;  } @@ -1367,14 +1369,9 @@ __xlator_init(xlator_t *xl)  int  xlator_init (xlator_t *xl)  { -	int32_t ret = 0; +	int32_t ret = -1; -	if (xl == NULL)	{ -		gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -		return 0; -	} - -        ret = -1; +        GF_VALIDATE_OR_GOTO ("xlator", xl, out);          if (xl->mem_acct_init)                  xl->mem_acct_init (xl); @@ -1408,10 +1405,7 @@ xlator_fini_rec (xlator_t *xl)  	xlator_list_t *trav     = NULL;          xlator_t      *old_THIS = NULL; -	if (xl == NULL)	{ -		gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -		return; -	} +        GF_VALIDATE_OR_GOTO ("xlator", xl, out);  	trav = xl->children; @@ -1438,6 +1432,9 @@ xlator_fini_rec (xlator_t *xl)  		}  		xl->init_succeeded = 0;  	} + +out: +        return;  }  static int @@ -1445,13 +1442,11 @@ xlator_reconfigure_rec (xlator_t *old_xl, xlator_t *new_xl)  {  	xlator_list_t *trav1    = NULL;          xlator_list_t *trav2    = NULL; -        int32_t        ret      = 0; +        int32_t        ret      = -1;          xlator_t      *old_THIS = NULL; -	if ((old_xl == NULL) || (new_xl == NULL))	{ -		gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -		return -1; -	} +        GF_VALIDATE_OR_GOTO ("xlator", old_xl, out); +        GF_VALIDATE_OR_GOTO ("xlator", new_xl, out);  	trav1 = old_xl->children;          trav2 = new_xl->children; @@ -1481,6 +1476,7 @@ xlator_reconfigure_rec (xlator_t *old_xl, xlator_t *new_xl)                  gf_log (old_xl->name, GF_LOG_DEBUG, "No reconfigure() found");          } +        ret = 0;  out:          return ret;  } @@ -1488,19 +1484,17 @@ out:  int  xlator_validate_rec (xlator_t *xlator, char **op_errstr)  { +        int            ret  = -1;          xlator_list_t *trav = NULL; -        if (xlator == NULL )    { -                gf_log_callingfn ("xlator", GF_LOG_WARNING, "invalid argument"); -                return -1; -        } +        GF_VALIDATE_OR_GOTO ("xlator", xlator, out);          trav = xlator->children;          while (trav) {                  if (xlator_validate_rec (trav->xlator, op_errstr)) {                          gf_log ("xlator", GF_LOG_WARNING, "validate_rec failed"); -                        return -1; +                        goto out;                  }                  trav = trav->next; @@ -1511,8 +1505,8 @@ xlator_validate_rec (xlator_t *xlator, char **op_errstr)          if (xlator->validate_options) {                  if (xlator->validate_options (xlator, op_errstr)) { -                        gf_log ("", GF_LOG_DEBUG, "%s", *op_errstr); -                        return -1; +                        gf_log ("", GF_LOG_INFO, "%s", *op_errstr); +                        goto out;                  }                  gf_log (xlator->name, GF_LOG_DEBUG, "Validated option"); @@ -1520,7 +1514,9 @@ xlator_validate_rec (xlator_t *xlator, char **op_errstr)          gf_log (xlator->name, GF_LOG_DEBUG, "No validate_options() found"); -        return 0; +        ret = 0; +out: +        return ret;  }  int @@ -1590,13 +1586,13 @@ xlator_tree_fini (xlator_t *xl)  {  	xlator_t *top = NULL; -	if (xl == NULL)	{ -		gf_log ("xlator", GF_LOG_DEBUG, "invalid argument"); -		return; -	} +        GF_VALIDATE_OR_GOTO ("xlator", xl, out);  	top = xl;  	xlator_fini_rec (top); + +out: +        return;  }  int @@ -1618,23 +1614,23 @@ xlator_tree_reconfigure (xlator_t *old_xl, xlator_t *new_xl)  int  xlator_tree_free (xlator_t *tree)  { -  xlator_t *trav = tree, *prev = tree; - -  if (!tree) { -    gf_log ("parser", GF_LOG_ERROR, "Translator tree not found"); -    return -1; -  } - -  while (prev) { -    trav = prev->next; -    dict_destroy (prev->options); -    GF_FREE (prev->name); -    GF_FREE (prev->type); -    GF_FREE (prev); -    prev = trav; -  } - -  return 0; +        xlator_t *trav = tree, *prev = tree; + +        if (!tree) { +                gf_log ("parser", GF_LOG_ERROR, "Translator tree not found"); +                return -1; +        } + +        while (prev) { +                trav = prev->next; +                dict_destroy (prev->options); +                GF_FREE (prev->name); +                GF_FREE (prev->type); +                GF_FREE (prev); +                prev = trav; +        } + +        return 0;  } @@ -1662,6 +1658,9 @@ loc_copy (loc_t *dst, loc_t *src)  {  	int ret = -1; +        GF_VALIDATE_OR_GOTO ("xlator", dst, err); +        GF_VALIDATE_OR_GOTO ("xlator", src, err); +  	dst->ino = src->ino;  	if (src->inode) @@ -1688,6 +1687,8 @@ out:                  if (dst->parent)                          inode_unref (dst->parent);          } + +err:  	return ret;  }  | 
