summaryrefslogtreecommitdiffstats
path: root/xlators/features
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/features')
-rw-r--r--xlators/features/quota/src/quotad-aggregator.c10
-rw-r--r--xlators/features/quota/src/quotad.c32
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 = {