diff options
-rw-r--r-- | xlators/features/quota/src/quotad-aggregator.c | 10 | ||||
-rw-r--r-- | xlators/features/quota/src/quotad.c | 32 |
2 files changed, 38 insertions, 4 deletions
diff --git a/xlators/features/quota/src/quotad-aggregator.c b/xlators/features/quota/src/quotad-aggregator.c index 6c9c40a122f..8a7cfdca3f5 100644 --- a/xlators/features/quota/src/quotad-aggregator.c +++ b/xlators/features/quota/src/quotad-aggregator.c @@ -374,6 +374,11 @@ quotad_aggregator_init (xlator_t *this) priv = this->private; + if (priv->rpcsvc) { + /* Listener already created */ + return 0; + } + ret = dict_set_str (this->options, "transport.address-family", "unix"); if (ret) goto out; @@ -423,6 +428,11 @@ quotad_aggregator_init (xlator_t *this) ret = 0; out: + if (ret && priv->rpcsvc) { + GF_FREE (priv->rpcsvc); + priv->rpcsvc = NULL; + } + return ret; } diff --git a/xlators/features/quota/src/quotad.c b/xlators/features/quota/src/quotad.c index 243b943e986..028c8047141 100644 --- a/xlators/features/quota/src/quotad.c +++ b/xlators/features/quota/src/quotad.c @@ -11,6 +11,18 @@ #include "quotad-aggregator.h" #include "common-utils.h" +int +qd_notify (xlator_t *this, int32_t event, void *data, ...) +{ + switch (event) { + case GF_EVENT_PARENT_UP: + quotad_aggregator_init (this); + } + + default_notify (this, event, data); + return 0; +} + int32_t mem_acct_init (xlator_t *this) { @@ -147,6 +159,21 @@ qd_reconfigure (xlator_t *this, dict_t *options) void qd_fini (xlator_t *this) { + quota_priv_t *priv = NULL; + + if (this == NULL || this->private == NULL) + goto out; + + priv = this->private; + + if (priv->rpcsvc) { + GF_FREE (priv->rpcsvc); + priv->rpcsvc = NULL; + } + + GF_FREE (priv); + +out: return; } @@ -169,10 +196,6 @@ qd_init (xlator_t *this) this->private = priv; - ret = quotad_aggregator_init (this); - if (ret < 0) - goto err; - ret = 0; err: if (ret) { @@ -185,6 +208,7 @@ class_methods_t class_methods = { .init = qd_init, .fini = qd_fini, .reconfigure = qd_reconfigure, + .notify = qd_notify }; struct xlator_fops fops = { |