summaryrefslogtreecommitdiffstats
path: root/libglusterfs
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs')
-rw-r--r--libglusterfs/src/defaults-tmpl.c7
-rw-r--r--libglusterfs/src/xlator.c2
-rw-r--r--libglusterfs/src/xlator.h9
3 files changed, 17 insertions, 1 deletions
diff --git a/libglusterfs/src/defaults-tmpl.c b/libglusterfs/src/defaults-tmpl.c
index 2ce5ec7c685..bdb30d4872c 100644
--- a/libglusterfs/src/defaults-tmpl.c
+++ b/libglusterfs/src/defaults-tmpl.c
@@ -124,13 +124,18 @@ int
default_notify(xlator_t *this, int32_t event, void *data, ...)
{
GF_UNUSED int ret = 0;
+ xlator_t *victim = data;
+
switch (event) {
case GF_EVENT_PARENT_UP:
case GF_EVENT_PARENT_DOWN: {
xlator_list_t *list = this->children;
while (list) {
- xlator_notify(list->xlator, event, this);
+ if (victim && victim->cleanup_starting)
+ xlator_notify(list->xlator, event, victim);
+ else
+ xlator_notify(list->xlator, event, this);
list = list->next;
}
} break;
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c
index 6975fbbd15f..01cb27896ee 100644
--- a/libglusterfs/src/xlator.c
+++ b/libglusterfs/src/xlator.c
@@ -700,6 +700,8 @@ xlator_init(xlator_t *xl)
xl->mem_acct_init(xl);
xl->instance_name = NULL;
+ GF_ATOMIC_INIT(xl->xprtrefcnt, 0);
+ GF_ATOMIC_INIT(xl->fd_cnt, 0);
if (!xl->init) {
gf_msg(xl->name, GF_LOG_WARNING, 0, LG_MSG_INIT_FAILED,
"No init() found");
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h
index 12078bb72e3..9bdbd7f0e26 100644
--- a/libglusterfs/src/xlator.h
+++ b/libglusterfs/src/xlator.h
@@ -842,6 +842,15 @@ struct _xlator {
/* Flag to understand how this xlator is categorized */
gf_category_t category;
+
+ /* Variable to save fd_count for detach brick */
+ gf_atomic_t fd_cnt;
+
+ /* Variable to save xprt associated for detach brick */
+ gf_atomic_t xprtrefcnt;
+
+ /* Flag to notify got CHILD_DOWN event for detach brick */
+ uint32_t notify_down;
};
typedef struct {