diff options
Diffstat (limited to 'xlators/cluster/afr/src/afr-common.c')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 8993b164b91..8fbca0b6f42 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -993,6 +993,17 @@ afr_local_transaction_cleanup (afr_local_t *local, xlator_t *this) afr_entry_lockee_cleanup (&local->internal_lock); GF_FREE (local->transaction.pre_op); + + GF_FREE (local->transaction.pre_op_sources); + if (local->transaction.pre_op_xdata) { + for (i = 0; i < priv->child_count; i++) { + if (!local->transaction.pre_op_xdata[i]) + continue; + dict_unref (local->transaction.pre_op_xdata[i]); + } + GF_FREE (local->transaction.pre_op_xdata); + } + GF_FREE (local->transaction.eager_lock); GF_FREE (local->transaction.fop_subvols); GF_FREE (local->transaction.failed_subvols); @@ -4055,6 +4066,20 @@ afr_transaction_local_init (afr_local_t *local, xlator_t *this) if (!local->transaction.pre_op) goto out; + if (priv->arbiter_count == 1) { + local->transaction.pre_op_xdata = + GF_CALLOC (sizeof (*local->transaction.pre_op_xdata), + priv->child_count, gf_afr_mt_dict_t); + if (!local->transaction.pre_op_xdata) + goto out; + + local->transaction.pre_op_sources = + GF_CALLOC (sizeof (*local->transaction.pre_op_sources), + priv->child_count, gf_afr_mt_char); + if (!local->transaction.pre_op_sources) + goto out; + } + local->transaction.fop_subvols = GF_CALLOC (sizeof (*local->transaction.fop_subvols), priv->child_count, gf_afr_mt_char); |