diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/iobuf.c | 160 | ||||
-rw-r--r-- | libglusterfs/src/xlator.c | 151 |
2 files changed, 183 insertions, 128 deletions
diff --git a/libglusterfs/src/iobuf.c b/libglusterfs/src/iobuf.c index 42b7f426789..c5cb9ec6607 100644 --- a/libglusterfs/src/iobuf.c +++ b/libglusterfs/src/iobuf.c @@ -37,6 +37,8 @@ __iobuf_arena_init_iobufs (struct iobuf_arena *iobuf_arena) int offset = 0; int i = 0; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out); + arena_size = iobuf_arena->iobuf_pool->arena_size; page_size = iobuf_arena->iobuf_pool->page_size; iobuf_cnt = arena_size / page_size; @@ -61,6 +63,9 @@ __iobuf_arena_init_iobufs (struct iobuf_arena *iobuf_arena) offset += page_size; iobuf++; } + +out: + return; } @@ -73,12 +78,14 @@ __iobuf_arena_destroy_iobufs (struct iobuf_arena *iobuf_arena) struct iobuf *iobuf = NULL; int i = 0; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out); + arena_size = iobuf_arena->iobuf_pool->arena_size; page_size = iobuf_arena->iobuf_pool->page_size; iobuf_cnt = arena_size / page_size; if (!iobuf_arena->iobufs) { - gf_log ("", GF_LOG_DEBUG, "iobufs not found"); + gf_log_callingfn ("", GF_LOG_DEBUG, "iobufs not found"); return; } @@ -91,6 +98,9 @@ __iobuf_arena_destroy_iobufs (struct iobuf_arena *iobuf_arena) } GF_FREE (iobuf_arena->iobufs); + +out: + return; } @@ -99,10 +109,8 @@ __iobuf_arena_destroy (struct iobuf_arena *iobuf_arena) { struct iobuf_pool *iobuf_pool = NULL; - if (!iobuf_arena) { - gf_log ("", GF_LOG_DEBUG, "iobufs not found"); - return; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out); + iobuf_pool = iobuf_arena->iobuf_pool; __iobuf_arena_destroy_iobufs (iobuf_arena); @@ -112,6 +120,9 @@ __iobuf_arena_destroy (struct iobuf_arena *iobuf_arena) munmap (iobuf_arena->mem_base, iobuf_pool->arena_size); GF_FREE (iobuf_arena); + +out: + return; } @@ -121,6 +132,8 @@ __iobuf_arena_alloc (struct iobuf_pool *iobuf_pool) struct iobuf_arena *iobuf_arena = NULL; size_t arena_size = 0; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + iobuf_arena = GF_CALLOC (sizeof (*iobuf_arena), 1, gf_common_mt_iobuf_arena); if (!iobuf_arena) @@ -151,6 +164,8 @@ __iobuf_arena_alloc (struct iobuf_pool *iobuf_pool) err: __iobuf_arena_destroy (iobuf_arena); + +out: return NULL; } @@ -161,12 +176,15 @@ __iobuf_arena_unprune (struct iobuf_pool *iobuf_pool) struct iobuf_arena *iobuf_arena = NULL; struct iobuf_arena *tmp = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + list_for_each_entry (tmp, &iobuf_pool->purge.list, list) { list_del_init (&tmp->list); iobuf_arena = tmp; break; } +out: return iobuf_arena; } @@ -176,6 +194,8 @@ __iobuf_pool_add_arena (struct iobuf_pool *iobuf_pool) { struct iobuf_arena *iobuf_arena = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + iobuf_arena = __iobuf_arena_unprune (iobuf_pool); if (!iobuf_arena) @@ -188,6 +208,7 @@ __iobuf_pool_add_arena (struct iobuf_pool *iobuf_pool) list_add_tail (&iobuf_arena->list, &iobuf_pool->arenas.list); +out: return iobuf_arena; } @@ -197,12 +218,15 @@ iobuf_pool_add_arena (struct iobuf_pool *iobuf_pool) { struct iobuf_arena *iobuf_arena = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + pthread_mutex_lock (&iobuf_pool->mutex); { iobuf_arena = __iobuf_pool_add_arena (iobuf_pool); } pthread_mutex_unlock (&iobuf_pool->mutex); +out: return iobuf_arena; } @@ -213,10 +237,7 @@ iobuf_pool_destroy (struct iobuf_pool *iobuf_pool) struct iobuf_arena *iobuf_arena = NULL; struct iobuf_arena *tmp = NULL; - if (!iobuf_pool) { - gf_log ("", GF_LOG_WARNING, "iobuf pool not found"); - return; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); list_for_each_entry_safe (iobuf_arena, tmp, &iobuf_pool->arenas.list, list) { @@ -226,6 +247,9 @@ iobuf_pool_destroy (struct iobuf_pool *iobuf_pool) __iobuf_arena_destroy (iobuf_arena); } + +out: + return; } @@ -266,6 +290,8 @@ __iobuf_pool_prune (struct iobuf_pool *iobuf_pool) struct iobuf_arena *iobuf_arena = NULL; struct iobuf_arena *tmp = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + if (list_empty (&iobuf_pool->arenas.list)) /* buffering - preserve this one arena (if at all) for __iobuf_arena_unprune */ @@ -281,17 +307,25 @@ __iobuf_pool_prune (struct iobuf_pool *iobuf_pool) __iobuf_arena_destroy (iobuf_arena); } + +out: + return; } void iobuf_pool_prune (struct iobuf_pool *iobuf_pool) { + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + pthread_mutex_lock (&iobuf_pool->mutex); { __iobuf_pool_prune (iobuf_pool); } pthread_mutex_unlock (&iobuf_pool->mutex); + +out: + return; } @@ -301,6 +335,8 @@ __iobuf_select_arena (struct iobuf_pool *iobuf_pool) struct iobuf_arena *iobuf_arena = NULL; struct iobuf_arena *trav = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + /* look for unused iobuf from the head-most arena */ list_for_each_entry (trav, &iobuf_pool->arenas.list, list) { if (trav->passive_cnt) { @@ -314,6 +350,7 @@ __iobuf_select_arena (struct iobuf_pool *iobuf_pool) iobuf_arena = __iobuf_pool_add_arena (iobuf_pool); } +out: return iobuf_arena; } @@ -342,6 +379,8 @@ __iobuf_get (struct iobuf_arena *iobuf_arena) struct iobuf *iobuf = NULL; struct iobuf_pool *iobuf_pool = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out); + iobuf_pool = iobuf_arena->iobuf_pool; list_for_each_entry (iobuf, &iobuf_arena->passive.list, list) @@ -358,6 +397,7 @@ __iobuf_get (struct iobuf_arena *iobuf_arena) list_add (&iobuf_arena->list, &iobuf_pool->filled.list); } +out: return iobuf; } @@ -368,6 +408,8 @@ iobuf_get (struct iobuf_pool *iobuf_pool) struct iobuf *iobuf = NULL; struct iobuf_arena *iobuf_arena = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); + pthread_mutex_lock (&iobuf_pool->mutex); { /* most eligible arena for picking an iobuf */ @@ -388,6 +430,7 @@ iobuf_get (struct iobuf_pool *iobuf_pool) unlock: pthread_mutex_unlock (&iobuf_pool->mutex); +out: return iobuf; } @@ -397,6 +440,9 @@ __iobuf_put (struct iobuf *iobuf, struct iobuf_arena *iobuf_arena) { struct iobuf_pool *iobuf_pool = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out); + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); + iobuf_pool = iobuf_arena->iobuf_pool; if (iobuf_arena->passive_cnt == 0) { @@ -414,6 +460,8 @@ __iobuf_put (struct iobuf *iobuf, struct iobuf_arena *iobuf_arena) list_del (&iobuf_arena->list); list_add_tail (&iobuf_arena->list, &iobuf_pool->purge.list); } +out: + return; } @@ -423,10 +471,7 @@ iobuf_put (struct iobuf *iobuf) struct iobuf_arena *iobuf_arena = NULL; struct iobuf_pool *iobuf_pool = NULL; - if (!iobuf) { - gf_log ("", GF_LOG_WARNING, "iobuf not found"); - return; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); iobuf_arena = iobuf->iobuf_arena; if (!iobuf_arena) { @@ -447,6 +492,9 @@ iobuf_put (struct iobuf *iobuf) pthread_mutex_unlock (&iobuf_pool->mutex); iobuf_pool_prune (iobuf_pool); + +out: + return; } @@ -455,10 +503,7 @@ iobuf_unref (struct iobuf *iobuf) { int ref = 0; - if (!iobuf) { - gf_log ("", GF_LOG_WARNING, "iobuf not found"); - return; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); LOCK (&iobuf->lock); { @@ -469,16 +514,16 @@ iobuf_unref (struct iobuf *iobuf) if (!ref) iobuf_put (iobuf); + +out: + return; } struct iobuf * iobuf_ref (struct iobuf *iobuf) { - if (!iobuf) { - gf_log ("", GF_LOG_WARNING, "iobuf not found"); - return NULL; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); LOCK (&iobuf->lock); { @@ -486,6 +531,7 @@ iobuf_ref (struct iobuf *iobuf) } UNLOCK (&iobuf->lock); +out: return iobuf; } @@ -511,10 +557,7 @@ iobref_new () struct iobref * iobref_ref (struct iobref *iobref) { - if (!iobref) { - gf_log ("", GF_LOG_WARNING, "iobref not found"); - return NULL; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobref, out); LOCK (&iobref->lock); { @@ -522,6 +565,7 @@ iobref_ref (struct iobref *iobref) } UNLOCK (&iobref->lock); +out: return iobref; } @@ -532,8 +576,7 @@ iobref_destroy (struct iobref *iobref) int i = 0; struct iobuf *iobuf = NULL; - if (!iobref) - return; + GF_VALIDATE_OR_GOTO ("iobuf", iobref, out); for (i = 0; i < 8; i++) { iobuf = iobref->iobrefs[i]; @@ -544,6 +587,9 @@ iobref_destroy (struct iobref *iobref) } GF_FREE (iobref); + +out: + return; } @@ -552,10 +598,7 @@ iobref_unref (struct iobref *iobref) { int ref = 0; - if (!iobref) { - gf_log ("", GF_LOG_WARNING, "iobref not found"); - return; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobref, out); LOCK (&iobref->lock); { @@ -565,6 +608,9 @@ iobref_unref (struct iobref *iobref) if (!ref) iobref_destroy (iobref); + +out: + return; } @@ -574,6 +620,9 @@ __iobref_add (struct iobref *iobref, struct iobuf *iobuf) int i = 0; int ret = -ENOMEM; + GF_VALIDATE_OR_GOTO ("iobuf", iobref, out); + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); + for (i = 0; i < 8; i++) { if (iobref->iobrefs[i] == NULL) { iobref->iobrefs[i] = iobuf_ref (iobuf); @@ -582,6 +631,7 @@ __iobref_add (struct iobref *iobref, struct iobuf *iobuf) } } +out: return ret; } @@ -589,12 +639,10 @@ __iobref_add (struct iobref *iobref, struct iobuf *iobuf) int iobref_add (struct iobref *iobref, struct iobuf *iobuf) { - int ret = 0; + int ret = -EINVAL; - if (!iobref || !iobuf) { - gf_log ("", GF_LOG_WARNING, "(iobref || iobuf) not found"); - return -EINVAL; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobref, out); + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); LOCK (&iobref->lock); { @@ -602,6 +650,7 @@ iobref_add (struct iobref *iobref, struct iobuf *iobuf) } UNLOCK (&iobref->lock); +out: return ret; } @@ -610,9 +659,12 @@ int iobref_merge (struct iobref *to, struct iobref *from) { int i = 0; - int ret = 0; + int ret = -1; struct iobuf *iobuf = NULL; + GF_VALIDATE_OR_GOTO ("iobuf", to, out); + GF_VALIDATE_OR_GOTO ("iobuf", from, out); + LOCK (&from->lock); { for (i = 0; i < 8; i++) { @@ -629,6 +681,7 @@ iobref_merge (struct iobref *to, struct iobref *from) } UNLOCK (&from->lock); +out: return ret; } @@ -638,10 +691,7 @@ iobuf_size (struct iobuf *iobuf) { size_t size = 0; - if (!iobuf) { - gf_log ("", GF_LOG_WARNING, "iobuf not found"); - goto out; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); if (!iobuf->iobuf_arena) { gf_log ("", GF_LOG_WARNING, "arena not found"); @@ -665,10 +715,7 @@ iobref_size (struct iobref *iobref) size_t size = 0; int i = 0; - if (!iobref) { - gf_log ("", GF_LOG_WARNING, "iobref not found"); - goto out; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobref, out); LOCK (&iobref->lock); { @@ -678,6 +725,7 @@ iobref_size (struct iobref *iobref) } } UNLOCK (&iobref->lock); + out: return size; } @@ -689,10 +737,7 @@ iobuf_info_dump (struct iobuf *iobuf, const char *key_prefix) struct iobuf my_iobuf; int ret = 0; - if (!iobuf) { - gf_log ("", GF_LOG_WARNING, "iobuf not found"); - return; - } + GF_VALIDATE_OR_GOTO ("iobuf", iobuf, out); memset(&my_iobuf, 0, sizeof(my_iobuf)); @@ -710,6 +755,8 @@ iobuf_info_dump (struct iobuf *iobuf, const char *key_prefix) gf_proc_dump_build_key(key, key_prefix,"ptr"); gf_proc_dump_write(key, "%p", my_iobuf.ptr); +out: + return; } void @@ -719,8 +766,7 @@ iobuf_arena_info_dump (struct iobuf_arena *iobuf_arena, const char *key_prefix) int i = 1; struct iobuf *trav; - if (!iobuf_arena) - return; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_arena, out); gf_proc_dump_build_key(key, key_prefix,"mem_base"); gf_proc_dump_write(key, "%p", iobuf_arena->mem_base); @@ -734,6 +780,8 @@ iobuf_arena_info_dump (struct iobuf_arena *iobuf_arena, const char *key_prefix) iobuf_info_dump(trav, key); } +out: + return; } void @@ -745,8 +793,7 @@ iobuf_stats_dump (struct iobuf_pool *iobuf_pool) int i = 1; int ret = -1; - if (!iobuf_pool) - return; + GF_VALIDATE_OR_GOTO ("iobuf", iobuf_pool, out); memset(msg, 0, sizeof(msg)); @@ -776,6 +823,7 @@ iobuf_stats_dump (struct iobuf_pool *iobuf_pool) pthread_mutex_unlock(&iobuf_pool->mutex); +out: return; } @@ -783,6 +831,12 @@ iobuf_stats_dump (struct iobuf_pool *iobuf_pool) void iobuf_to_iovec(struct iobuf *iob, struct iovec *iov) { + GF_VALIDATE_OR_GOTO ("iobuf", iob, out); + GF_VALIDATE_OR_GOTO ("iobuf", iov, out); + iov->iov_base = iobuf_ptr (iob); iov->iov_len = iobuf_pagesize (iob); + +out: + return; } 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; } |