diff options
| author | Mohit Agrawal <moagrawal@redhat.com> | 2018-10-02 08:54:28 +0530 | 
|---|---|---|
| committer | Raghavendra G <rgowdapp@redhat.com> | 2018-10-08 15:45:47 +0000 | 
| commit | 5bc4594dabc08fd4de1940c044946e33037f2ac7 (patch) | |
| tree | e3cd2c75a36c0a9da094818a5906ac40376be1d5 /libglusterfs/src | |
| parent | 31b6308c646a84c5064d2fb31dc45363a71b131a (diff) | |
core: glusterfsd keeping fd open in index xlator
Problem: Current resource cleanup sequence is not
         perfect while brick mux is enabled
Solution: 1) Destroying xprt after cleanup all fd associated
             with a client
          2) Before call fini for brick xlators ensure no stub
             should be running on a brick
Change-Id: I86195785e428f57d3ef0da3e4061021fafacd435
fixes: bz#1631357
Signed-off-by: Mohit Agrawal <moagrawal@redhat.com>
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/defaults-tmpl.c | 7 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.c | 2 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.h | 9 | 
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 {  | 
