diff options
| author | Gluster Ant <bugzilla-bot@gluster.org> | 2018-09-12 17:52:45 +0530 | 
|---|---|---|
| committer | Nigel Babu <nigelb@redhat.com> | 2018-09-12 17:52:45 +0530 | 
| commit | e16868dede6455cab644805af6fe1ac312775e13 (patch) | |
| tree | 15aebdb4fff2d87cf8a72f836816b3aa634da58d /libglusterfs/src/inode.c | |
| parent | 45a71c0548b6fd2c757aa2e7b7671a1411948894 (diff) | |
Land part 2 of clang-format changes
Change-Id: Ia84cc24c8924e6d22d02ac15f611c10e26db99b4
Signed-off-by: Nigel Babu <nigelb@redhat.com>
Diffstat (limited to 'libglusterfs/src/inode.c')
| -rw-r--r-- | libglusterfs/src/inode.c | 3562 | 
1 files changed, 1755 insertions, 1807 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 70909bf596f..ee85c0e793c 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -23,676 +23,651 @@     move latest accessed dentry to list_head of inode  */ -#define INODE_DUMP_LIST(head, key_buf, key_prefix, list_type)           \ -        {                                                               \ -                int i = 1;                                              \ -                inode_t *inode = NULL;                                  \ -                list_for_each_entry (inode, head, list) {               \ -                        gf_proc_dump_build_key(key_buf, key_prefix,     \ -                                               "%s.%d",list_type, i++); \ -                        gf_proc_dump_add_section(key_buf);              \ -                        inode_dump(inode, key);                         \ -                }                                                       \ -        } +#define INODE_DUMP_LIST(head, key_buf, key_prefix, list_type)                  \ +    {                                                                          \ +        int i = 1;                                                             \ +        inode_t *inode = NULL;                                                 \ +        list_for_each_entry(inode, head, list)                                 \ +        {                                                                      \ +            gf_proc_dump_build_key(key_buf, key_prefix, "%s.%d", list_type,    \ +                                   i++);                                       \ +            gf_proc_dump_add_section(key_buf);                                 \ +            inode_dump(inode, key);                                            \ +        }                                                                      \ +    }  static inode_t * -__inode_unref (inode_t *inode); +__inode_unref(inode_t *inode);  static int -inode_table_prune (inode_table_t *table); +inode_table_prune(inode_table_t *table);  void -fd_dump (struct list_head *head, char *prefix); +fd_dump(struct list_head *head, char *prefix);  static int -hash_dentry (inode_t *parent, const char *name, int mod) +hash_dentry(inode_t *parent, const char *name, int mod)  { -        int hash = 0; -        int ret = 0; +    int hash = 0; +    int ret = 0; -        hash = *name; -        if (hash) { -                for (name += 1; *name != '\0'; name++) { -                        hash = (hash << 5) - hash + *name; -                } +    hash = *name; +    if (hash) { +        for (name += 1; *name != '\0'; name++) { +            hash = (hash << 5) - hash + *name;          } -        ret = (hash + (unsigned long)parent) % mod; +    } +    ret = (hash + (unsigned long)parent) % mod; -        return ret; +    return ret;  } -  static int -hash_gfid (uuid_t uuid, int mod) +hash_gfid(uuid_t uuid, int mod)  { -        int ret = 0; +    int ret = 0; -        ret = uuid[15] + (uuid[14] << 8); +    ret = uuid[15] + (uuid[14] << 8); -        return ret; +    return ret;  } -  static void -__dentry_hash (dentry_t *dentry) +__dentry_hash(dentry_t *dentry)  { -        inode_table_t   *table = NULL; -        int              hash = 0; +    inode_table_t *table = NULL; +    int hash = 0; -        if (!dentry) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found"); -                return; -        } +    if (!dentry) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, +                         "dentry not found"); +        return; +    } -        table = dentry->inode->table; -        hash = hash_dentry (dentry->parent, dentry->name, -                            table->hashsize); +    table = dentry->inode->table; +    hash = hash_dentry(dentry->parent, dentry->name, table->hashsize); -        list_del_init (&dentry->hash); -        list_add (&dentry->hash, &table->name_hash[hash]); +    list_del_init(&dentry->hash); +    list_add(&dentry->hash, &table->name_hash[hash]);  } -  static int -__is_dentry_hashed (dentry_t *dentry) +__is_dentry_hashed(dentry_t *dentry)  { -        if (!dentry) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found"); -                return 0; -        } +    if (!dentry) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, +                         "dentry not found"); +        return 0; +    } -        return !list_empty (&dentry->hash); +    return !list_empty(&dentry->hash);  } -  static void -__dentry_unhash (dentry_t *dentry) +__dentry_unhash(dentry_t *dentry)  { -        if (!dentry) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found"); -                return; -        } +    if (!dentry) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, +                         "dentry not found"); +        return; +    } -        list_del_init (&dentry->hash); +    list_del_init(&dentry->hash);  } -  static void -__dentry_unset (dentry_t *dentry) +__dentry_unset(dentry_t *dentry)  { -        if (!dentry) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found"); -                return; -        } +    if (!dentry) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, +                         "dentry not found"); +        return; +    } -        __dentry_unhash (dentry); +    __dentry_unhash(dentry); -        list_del_init (&dentry->inode_list); +    list_del_init(&dentry->inode_list); -        GF_FREE (dentry->name); -        dentry->name = NULL; +    GF_FREE(dentry->name); +    dentry->name = NULL; -        if (dentry->parent) { -                __inode_unref (dentry->parent); -                dentry->parent = NULL; -        } +    if (dentry->parent) { +        __inode_unref(dentry->parent); +        dentry->parent = NULL; +    } -        mem_put (dentry); +    mem_put(dentry);  } -  static int -__foreach_ancestor_dentry (dentry_t *dentry, -                           int (per_dentry_fn) (dentry_t *dentry, -                                                void *data), -                           void *data) -{ -        inode_t  *parent = NULL; -        dentry_t *each = NULL; -        int       ret = 0; - -        if (!dentry) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_DENTRY_NOT_FOUND, "dentry not found"); -                return 0; -        } - -        ret = per_dentry_fn (dentry, data); -        if (ret) { -                gf_msg (THIS->name, GF_LOG_WARNING, 0, -                        LG_MSG_PER_DENTRY_FAILED, "per dentry fn returned %d", -                        ret); -                goto out; -        } - -        parent = dentry->parent; -        if (!parent) { -                gf_msg (THIS->name, GF_LOG_WARNING, 0, -                        LG_MSG_PARENT_DENTRY_NOT_FOUND, -                        "parent not found"); -                goto out; -        } +__foreach_ancestor_dentry(dentry_t *dentry, +                          int(per_dentry_fn)(dentry_t *dentry, void *data), +                          void *data) +{ +    inode_t *parent = NULL; +    dentry_t *each = NULL; +    int ret = 0; -        list_for_each_entry (each, &parent->dentry_list, inode_list) { -                ret = __foreach_ancestor_dentry (each, per_dentry_fn, data); -                if (ret) -                        goto out; -        } +    if (!dentry) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, +                         "dentry not found"); +        return 0; +    } + +    ret = per_dentry_fn(dentry, data); +    if (ret) { +        gf_msg(THIS->name, GF_LOG_WARNING, 0, LG_MSG_PER_DENTRY_FAILED, +               "per dentry fn returned %d", ret); +        goto out; +    } + +    parent = dentry->parent; +    if (!parent) { +        gf_msg(THIS->name, GF_LOG_WARNING, 0, LG_MSG_PARENT_DENTRY_NOT_FOUND, +               "parent not found"); +        goto out; +    } + +    list_for_each_entry(each, &parent->dentry_list, inode_list) +    { +        ret = __foreach_ancestor_dentry(each, per_dentry_fn, data); +        if (ret) +            goto out; +    }  out: -        return ret; +    return ret;  } -  static int -__check_cycle (dentry_t *a_dentry, void *data) +__check_cycle(dentry_t *a_dentry, void *data)  { -        inode_t *link_inode = NULL; +    inode_t *link_inode = NULL; -        link_inode = data; +    link_inode = data; -        if (a_dentry->parent == link_inode) -                return 1; +    if (a_dentry->parent == link_inode) +        return 1; -        return 0; +    return 0;  } -  static int -__is_dentry_cyclic (dentry_t *dentry) +__is_dentry_cyclic(dentry_t *dentry)  { -        int       ret = 0; -        inode_t  *inode = NULL; -        char     *name = "<nul>"; +    int ret = 0; +    inode_t *inode = NULL; +    char *name = "<nul>"; -        ret = __foreach_ancestor_dentry (dentry, __check_cycle, -                                         dentry->inode); -        if (ret) { -                inode = dentry->inode; +    ret = __foreach_ancestor_dentry(dentry, __check_cycle, dentry->inode); +    if (ret) { +        inode = dentry->inode; -                if (dentry->name) -                        name = dentry->name; +        if (dentry->name) +            name = dentry->name; -                gf_msg (dentry->inode->table->name, GF_LOG_CRITICAL, 0, -                        LG_MSG_DENTRY_CYCLIC_LOOP, "detected cyclic loop " -                        "formation during inode linkage. inode (%s) linking " -                        "under itself as %s", uuid_utoa (inode->gfid), name); -        } +        gf_msg(dentry->inode->table->name, GF_LOG_CRITICAL, 0, +               LG_MSG_DENTRY_CYCLIC_LOOP, +               "detected cyclic loop " +               "formation during inode linkage. inode (%s) linking " +               "under itself as %s", +               uuid_utoa(inode->gfid), name); +    } -        return ret; +    return ret;  } -  static void -__inode_unhash (inode_t *inode) +__inode_unhash(inode_t *inode)  { -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        list_del_init (&inode->hash); +    list_del_init(&inode->hash);  } -  static int -__is_inode_hashed (inode_t *inode) +__is_inode_hashed(inode_t *inode)  { -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return 0; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return 0; +    } -        return !list_empty (&inode->hash); +    return !list_empty(&inode->hash);  } -  static void -__inode_hash (inode_t *inode) +__inode_hash(inode_t *inode)  { -        inode_table_t *table = NULL; -        int            hash = 0; +    inode_table_t *table = NULL; +    int hash = 0; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        table = inode->table; -        hash = hash_gfid (inode->gfid, 65536); +    table = inode->table; +    hash = hash_gfid(inode->gfid, 65536); -        list_del_init (&inode->hash); -        list_add (&inode->hash, &table->inode_hash[hash]); +    list_del_init(&inode->hash); +    list_add(&inode->hash, &table->inode_hash[hash]);  } -  static dentry_t * -__dentry_search_for_inode (inode_t *inode, uuid_t pargfid, const char *name) +__dentry_search_for_inode(inode_t *inode, uuid_t pargfid, const char *name)  { -        dentry_t *dentry = NULL; -        dentry_t *tmp = NULL; +    dentry_t *dentry = NULL; +    dentry_t *tmp = NULL; -        if (!inode || !name) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, -                                  "inode || name not found"); -                return NULL; -        } +    if (!inode || !name) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "inode || name not found"); +        return NULL; +    } -        /* earlier, just the ino was sent, which could have been 0, now -           we deal with gfid, and if sent gfid is null or 0, no need to -           continue with the check */ -        if (!pargfid || gf_uuid_is_null (pargfid)) -                return NULL; +    /* earlier, just the ino was sent, which could have been 0, now +       we deal with gfid, and if sent gfid is null or 0, no need to +       continue with the check */ +    if (!pargfid || gf_uuid_is_null(pargfid)) +        return NULL; -        list_for_each_entry (tmp, &inode->dentry_list, inode_list) { -                if ((gf_uuid_compare (tmp->parent->gfid, pargfid) == 0) && -                    !strcmp (tmp->name, name)) { -                        dentry = tmp; -                        break; -                } +    list_for_each_entry(tmp, &inode->dentry_list, inode_list) +    { +        if ((gf_uuid_compare(tmp->parent->gfid, pargfid) == 0) && +            !strcmp(tmp->name, name)) { +            dentry = tmp; +            break;          } +    } -        return dentry; +    return dentry;  } -  static void -__inode_ctx_free (inode_t *inode) +__inode_ctx_free(inode_t *inode)  { -        int          index = 0; -        xlator_t    *xl = NULL; -        xlator_t    *old_THIS = NULL; +    int index = 0; +    xlator_t *xl = NULL; +    xlator_t *old_THIS = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        if (!inode->_ctx) { -                gf_msg (THIS->name, GF_LOG_WARNING, 0, LG_MSG_CTX_NULL, -                        "_ctx not found"); -                goto noctx; -        } +    if (!inode->_ctx) { +        gf_msg(THIS->name, GF_LOG_WARNING, 0, LG_MSG_CTX_NULL, +               "_ctx not found"); +        goto noctx; +    } -        for (index = 0; index < inode->table->xl->graph->xl_count; index++) { -                if (inode->_ctx[index].value1 || inode->_ctx[index].value2) { -                        xl = (xlator_t *)(long)inode->_ctx[index].xl_key; -                        old_THIS = THIS; -                        THIS = xl; -                        if (!xl->call_cleanup && xl->cbks->forget) -                                xl->cbks->forget (xl, inode); -                        THIS = old_THIS; -                } +    for (index = 0; index < inode->table->xl->graph->xl_count; index++) { +        if (inode->_ctx[index].value1 || inode->_ctx[index].value2) { +            xl = (xlator_t *)(long)inode->_ctx[index].xl_key; +            old_THIS = THIS; +            THIS = xl; +            if (!xl->call_cleanup && xl->cbks->forget) +                xl->cbks->forget(xl, inode); +            THIS = old_THIS;          } +    } -        GF_FREE (inode->_ctx); -        inode->_ctx = NULL; +    GF_FREE(inode->_ctx); +    inode->_ctx = NULL;  noctx: -        return; +    return;  }  static void -__inode_destroy (inode_t *inode) +__inode_destroy(inode_t *inode)  { -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        __inode_ctx_free (inode); +    __inode_ctx_free(inode); -        LOCK_DESTROY (&inode->lock); -        //  memset (inode, 0xb, sizeof (*inode)); -        mem_put (inode); +    LOCK_DESTROY(&inode->lock); +    //  memset (inode, 0xb, sizeof (*inode)); +    mem_put(inode);  }  void -inode_ctx_merge (fd_t *fd, inode_t *inode, inode_t *linked_inode) +inode_ctx_merge(fd_t *fd, inode_t *inode, inode_t *linked_inode)  { -        int       index    = 0; -        xlator_t *xl       = NULL; -        xlator_t *old_THIS = NULL; +    int index = 0; +    xlator_t *xl = NULL; +    xlator_t *old_THIS = NULL; -        if (!fd || !inode || !linked_inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, "invalid inode"); -                return; -        } +    if (!fd || !inode || !linked_inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "invalid inode"); +        return; +    } -        if (!inode->_ctx || !linked_inode->_ctx) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, -                                  "invalid inode context"); -                return; -        } +    if (!inode->_ctx || !linked_inode->_ctx) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "invalid inode context"); +        return; +    } -        for (; index < inode->table->ctxcount; index++) { -                if (inode->_ctx[index].xl_key) { -                        xl = (xlator_t *)(long) inode->_ctx[index].xl_key; +    for (; index < inode->table->ctxcount; index++) { +        if (inode->_ctx[index].xl_key) { +            xl = (xlator_t *)(long)inode->_ctx[index].xl_key; -                        old_THIS = THIS; -                        THIS = xl; -                        if (xl->cbks->ictxmerge) -                                xl->cbks->ictxmerge (xl, fd, -                                                     inode, linked_inode); -                        THIS = old_THIS; -                } +            old_THIS = THIS; +            THIS = xl; +            if (xl->cbks->ictxmerge) +                xl->cbks->ictxmerge(xl, fd, inode, linked_inode); +            THIS = old_THIS;          } +    }  }  static void -__inode_activate (inode_t *inode) +__inode_activate(inode_t *inode)  { -        if (!inode) -                return; +    if (!inode) +        return; -        list_move (&inode->list, &inode->table->active); -        inode->table->active_size++; +    list_move(&inode->list, &inode->table->active); +    inode->table->active_size++;  } -  static void -__inode_passivate (inode_t *inode) +__inode_passivate(inode_t *inode)  { -        dentry_t      *dentry = NULL; -        dentry_t      *t = NULL; +    dentry_t *dentry = NULL; +    dentry_t *t = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        list_move_tail (&inode->list, &inode->table->lru); -        inode->table->lru_size++; +    list_move_tail(&inode->list, &inode->table->lru); +    inode->table->lru_size++; -        list_for_each_entry_safe (dentry, t, &inode->dentry_list, inode_list) { -                if (!__is_dentry_hashed (dentry)) -                        __dentry_unset (dentry); -        } +    list_for_each_entry_safe(dentry, t, &inode->dentry_list, inode_list) +    { +        if (!__is_dentry_hashed(dentry)) +            __dentry_unset(dentry); +    }  } -  static void -__inode_retire (inode_t *inode) +__inode_retire(inode_t *inode)  { -        dentry_t      *dentry = NULL; -        dentry_t      *t = NULL; +    dentry_t *dentry = NULL; +    dentry_t *t = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        list_move_tail (&inode->list, &inode->table->purge); -        inode->table->purge_size++; +    list_move_tail(&inode->list, &inode->table->purge); +    inode->table->purge_size++; -        __inode_unhash (inode); +    __inode_unhash(inode); -        list_for_each_entry_safe (dentry, t, &inode->dentry_list, inode_list) { -                __dentry_unset (dentry); -        } +    list_for_each_entry_safe(dentry, t, &inode->dentry_list, inode_list) +    { +        __dentry_unset(dentry); +    }  } -  static int -__inode_get_xl_index (inode_t *inode, xlator_t *xlator) +__inode_get_xl_index(inode_t *inode, xlator_t *xlator)  { -        int set_idx = -1; +    int set_idx = -1; -        if ((inode->_ctx[xlator->xl_id].xl_key != NULL) && -            (inode->_ctx[xlator->xl_id].xl_key != xlator)) -                goto out; +    if ((inode->_ctx[xlator->xl_id].xl_key != NULL) && +        (inode->_ctx[xlator->xl_id].xl_key != xlator)) +        goto out; -        set_idx = xlator->xl_id; -        inode->_ctx[set_idx].xl_key = xlator; +    set_idx = xlator->xl_id; +    inode->_ctx[set_idx].xl_key = xlator;  out: -        return set_idx; +    return set_idx;  } -  static inode_t * -__inode_unref (inode_t *inode) +__inode_unref(inode_t *inode)  { -        int       index = 0; -        xlator_t *this  = NULL; +    int index = 0; +    xlator_t *this = NULL; -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        this = THIS; +    this = THIS; -        /* -         * Root inode should always be in active list of inode table. So unrefs -         * on root inode are no-ops. -         */ -        if (__is_root_gfid(inode->gfid)) -                return inode; +    /* +     * Root inode should always be in active list of inode table. So unrefs +     * on root inode are no-ops. +     */ +    if (__is_root_gfid(inode->gfid)) +        return inode; -        GF_ASSERT (inode->ref); +    GF_ASSERT(inode->ref); -        --inode->ref; +    --inode->ref; -        index = __inode_get_xl_index (inode, this); -        if (index >= 0) { -                inode->_ctx[index].xl_key = this; -                inode->_ctx[index].ref--; -        } +    index = __inode_get_xl_index(inode, this); +    if (index >= 0) { +        inode->_ctx[index].xl_key = this; +        inode->_ctx[index].ref--; +    } -        if (!inode->ref) { -                inode->table->active_size--; +    if (!inode->ref) { +        inode->table->active_size--; -                if (inode->nlookup) -                        __inode_passivate (inode); -                else -                        __inode_retire (inode); -        } +        if (inode->nlookup) +            __inode_passivate(inode); +        else +            __inode_retire(inode); +    } -        return inode; +    return inode;  } -  static inode_t * -__inode_ref (inode_t *inode) -{ -        int       index = 0; -        xlator_t *this  = NULL; - -        if (!inode) -                return NULL; - -        this = THIS; - -        if (!inode->ref) { -                inode->table->lru_size--; -                __inode_activate (inode); -        } - -        /* -         * Root inode should always be in active list of inode table. So unrefs -         * on root inode are no-ops. If we do not allow unrefs but allow refs, -         * it leads to refcount overflows and deleting and adding the inode -         * to active-list, which is ugly. active_size (check __inode_activate) -         * in inode table increases which is wrong. So just keep the ref -         * count as 1 always -         */ -        if (__is_root_gfid(inode->gfid) && inode->ref) -                return inode; +__inode_ref(inode_t *inode) +{ +    int index = 0; +    xlator_t *this = NULL; + +    if (!inode) +        return NULL; + +    this = THIS; + +    if (!inode->ref) { +        inode->table->lru_size--; +        __inode_activate(inode); +    } + +    /* +     * Root inode should always be in active list of inode table. So unrefs +     * on root inode are no-ops. If we do not allow unrefs but allow refs, +     * it leads to refcount overflows and deleting and adding the inode +     * to active-list, which is ugly. active_size (check __inode_activate) +     * in inode table increases which is wrong. So just keep the ref +     * count as 1 always +     */ +    if (__is_root_gfid(inode->gfid) && inode->ref) +        return inode; -        inode->ref++; +    inode->ref++; -        index = __inode_get_xl_index (inode, this); -        if (index >= 0) { -                inode->_ctx[index].xl_key = this; -                inode->_ctx[index].ref++; -        } +    index = __inode_get_xl_index(inode, this); +    if (index >= 0) { +        inode->_ctx[index].xl_key = this; +        inode->_ctx[index].ref++; +    } -        return inode; +    return inode;  } -  inode_t * -inode_unref (inode_t *inode) +inode_unref(inode_t *inode)  { -        inode_table_t *table = NULL; +    inode_table_t *table = NULL; -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                inode = __inode_unref (inode); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        inode = __inode_unref(inode); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table); -        return inode; +    return inode;  } -  inode_t * -inode_ref (inode_t *inode) +inode_ref(inode_t *inode)  { -        inode_table_t *table = NULL; +    inode_table_t *table = NULL; -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                inode = __inode_ref (inode); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        inode = __inode_ref(inode); +    } +    pthread_mutex_unlock(&table->lock); -        return inode; +    return inode;  } -  static dentry_t * -__dentry_create (inode_t *inode, inode_t *parent, const char *name) +__dentry_create(inode_t *inode, inode_t *parent, const char *name)  { -        dentry_t      *newd = NULL; +    dentry_t *newd = NULL; -        if (!inode || !parent || !name) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, -                                  "inode || parent || name not found"); -                return NULL; -        } +    if (!inode || !parent || !name) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "inode || parent || name not found"); +        return NULL; +    } -        newd = mem_get0 (parent->table->dentry_pool); -        if (newd == NULL) { -                goto out; -        } +    newd = mem_get0(parent->table->dentry_pool); +    if (newd == NULL) { +        goto out; +    } -        INIT_LIST_HEAD (&newd->inode_list); -        INIT_LIST_HEAD (&newd->hash); +    INIT_LIST_HEAD(&newd->inode_list); +    INIT_LIST_HEAD(&newd->hash); -        newd->name = gf_strdup (name); -        if (newd->name == NULL) { -                mem_put (newd); -                newd = NULL; -                goto out; -        } +    newd->name = gf_strdup(name); +    if (newd->name == NULL) { +        mem_put(newd); +        newd = NULL; +        goto out; +    } -        if (parent) -                newd->parent = __inode_ref (parent); +    if (parent) +        newd->parent = __inode_ref(parent); -        list_add (&newd->inode_list, &inode->dentry_list); -        newd->inode = inode; +    list_add(&newd->inode_list, &inode->dentry_list); +    newd->inode = inode;  out: -        return newd; +    return newd;  } -  static inode_t * -__inode_create (inode_table_t *table) +__inode_create(inode_table_t *table)  { -        inode_t  *newi = NULL; +    inode_t *newi = NULL; -        if (!table) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_TABLE_NOT_FOUND, "table not " -                                  "found"); -                return NULL; -        } +    if (!table) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, +                         LG_MSG_INODE_TABLE_NOT_FOUND, +                         "table not " +                         "found"); +        return NULL; +    } -        newi = mem_get0 (table->inode_pool); -        if (!newi) { -                goto out; -        } +    newi = mem_get0(table->inode_pool); +    if (!newi) { +        goto out; +    } -        newi->table = table; +    newi->table = table; -        LOCK_INIT (&newi->lock); +    LOCK_INIT(&newi->lock); -        INIT_LIST_HEAD (&newi->fd_list); -        INIT_LIST_HEAD (&newi->list); -        INIT_LIST_HEAD (&newi->hash); -        INIT_LIST_HEAD (&newi->dentry_list); +    INIT_LIST_HEAD(&newi->fd_list); +    INIT_LIST_HEAD(&newi->list); +    INIT_LIST_HEAD(&newi->hash); +    INIT_LIST_HEAD(&newi->dentry_list); -        newi->_ctx = GF_CALLOC (1, -                                (sizeof (struct _inode_ctx) * table->ctxcount), -                                gf_common_mt_inode_ctx); -        if (newi->_ctx == NULL) { -                LOCK_DESTROY (&newi->lock); -                mem_put (newi); -                newi = NULL; -                goto out; -        } +    newi->_ctx = GF_CALLOC(1, (sizeof(struct _inode_ctx) * table->ctxcount), +                           gf_common_mt_inode_ctx); +    if (newi->_ctx == NULL) { +        LOCK_DESTROY(&newi->lock); +        mem_put(newi); +        newi = NULL; +        goto out; +    } -        list_add (&newi->list, &table->lru); -        table->lru_size++; +    list_add(&newi->list, &table->lru); +    table->lru_size++;  out: -        return newi; +    return newi;  } -  inode_t * -inode_new (inode_table_t *table) +inode_new(inode_table_t *table)  { -        inode_t *inode = NULL; +    inode_t *inode = NULL; -        if (!table) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_TABLE_NOT_FOUND, "inode not " -                                  "found"); -                return NULL; -        } +    if (!table) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, +                         LG_MSG_INODE_TABLE_NOT_FOUND, +                         "inode not " +                         "found"); +        return NULL; +    } -        pthread_mutex_lock (&table->lock); -        { -                inode = __inode_create (table); -                if (inode != NULL) { -                        __inode_ref (inode); -                } +    pthread_mutex_lock(&table->lock); +    { +        inode = __inode_create(table); +        if (inode != NULL) { +            __inode_ref(inode);          } -        pthread_mutex_unlock (&table->lock); +    } +    pthread_mutex_unlock(&table->lock); -        return inode; +    return inode;  } -  /* Reduce the ref count by value 'nref'   * Args:   * inode - address of the inode to operate on @@ -703,1240 +678,1221 @@ inode_new (inode_table_t *table)   * hence to be used only in destructor functions and not otherwise.   */  static inode_t * -__inode_ref_reduce_by_n (inode_t *inode, uint64_t nref) +__inode_ref_reduce_by_n(inode_t *inode, uint64_t nref)  { -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        GF_ASSERT (inode->ref >= nref); +    GF_ASSERT(inode->ref >= nref); -        inode->ref -= nref; +    inode->ref -= nref; -        if (!nref) -                inode->ref = 0; +    if (!nref) +        inode->ref = 0; -        if (!inode->ref) { -                inode->table->active_size--; +    if (!inode->ref) { +        inode->table->active_size--; -                if (inode->nlookup) -                        __inode_passivate (inode); -                else -                        __inode_retire (inode); -        } +        if (inode->nlookup) +            __inode_passivate(inode); +        else +            __inode_retire(inode); +    } -        return inode; +    return inode;  } -  static inode_t * -__inode_lookup (inode_t *inode) +__inode_lookup(inode_t *inode)  { -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        inode->nlookup++; +    inode->nlookup++; -        return inode; +    return inode;  } -  static inode_t * -__inode_forget (inode_t *inode, uint64_t nlookup) +__inode_forget(inode_t *inode, uint64_t nlookup)  { -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        GF_ASSERT (inode->nlookup >= nlookup); +    GF_ASSERT(inode->nlookup >= nlookup); -        inode->nlookup -= nlookup; +    inode->nlookup -= nlookup; -        if (!nlookup) -                inode->nlookup = 0; +    if (!nlookup) +        inode->nlookup = 0; -        return inode; +    return inode;  } -  dentry_t * -__dentry_grep (inode_table_t *table, inode_t *parent, const char *name) +__dentry_grep(inode_table_t *table, inode_t *parent, const char *name)  { -        int       hash = 0; -        dentry_t *dentry = NULL; -        dentry_t *tmp = NULL; +    int hash = 0; +    dentry_t *dentry = NULL; +    dentry_t *tmp = NULL; -        if (!table || !name || !parent) -                return NULL; +    if (!table || !name || !parent) +        return NULL; -        hash = hash_dentry (parent, name, table->hashsize); +    hash = hash_dentry(parent, name, table->hashsize); -        list_for_each_entry (tmp, &table->name_hash[hash], hash) { -                if (tmp->parent == parent && !strcmp (tmp->name, name)) { -                        dentry = tmp; -                        break; -                } +    list_for_each_entry(tmp, &table->name_hash[hash], hash) +    { +        if (tmp->parent == parent && !strcmp(tmp->name, name)) { +            dentry = tmp; +            break;          } +    } -        return dentry; +    return dentry;  } -  inode_t * -inode_grep (inode_table_t *table, inode_t *parent, const char *name) +inode_grep(inode_table_t *table, inode_t *parent, const char *name)  { -        inode_t   *inode = NULL; -        dentry_t  *dentry = NULL; +    inode_t *inode = NULL; +    dentry_t *dentry = NULL; -        if (!table || !parent || !name) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, "table || parent || name" -                                  " not found"); -                return NULL; -        } +    if (!table || !parent || !name) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "table || parent || name" +                         " not found"); +        return NULL; +    } -        pthread_mutex_lock (&table->lock); -        { -                dentry = __dentry_grep (table, parent, name); +    pthread_mutex_lock(&table->lock); +    { +        dentry = __dentry_grep(table, parent, name); -                if (dentry) -                        inode = dentry->inode; +        if (dentry) +            inode = dentry->inode; -                if (inode) -                        __inode_ref (inode); -        } -        pthread_mutex_unlock (&table->lock); +        if (inode) +            __inode_ref(inode); +    } +    pthread_mutex_unlock(&table->lock); -        return inode; +    return inode;  } -  inode_t * -inode_resolve (inode_table_t *table, char *path) +inode_resolve(inode_table_t *table, char *path)  { -        char    *tmp   = NULL, *bname = NULL, *str = NULL, *saveptr = NULL; -        inode_t *inode = NULL, *parent = NULL; - -        if ((path == NULL) || (table == NULL)) { -                goto out; -        } +    char *tmp = NULL, *bname = NULL, *str = NULL, *saveptr = NULL; +    inode_t *inode = NULL, *parent = NULL; -        parent = inode_ref (table->root); -        str = tmp = gf_strdup (path); +    if ((path == NULL) || (table == NULL)) { +        goto out; +    } -        while (1) { -                bname = strtok_r (str, "/", &saveptr); -                if (bname == NULL) { -                        break; -                } +    parent = inode_ref(table->root); +    str = tmp = gf_strdup(path); -                if (inode != NULL) { -                        inode_unref (inode); -                } +    while (1) { +        bname = strtok_r(str, "/", &saveptr); +        if (bname == NULL) { +            break; +        } -                inode = inode_grep (table, parent, bname); -                if (inode == NULL) { -                        break; -                } +        if (inode != NULL) { +            inode_unref(inode); +        } -                if (parent != NULL) { -                        inode_unref (parent); -                } +        inode = inode_grep(table, parent, bname); +        if (inode == NULL) { +            break; +        } -                parent = inode_ref (inode); -                str = NULL; +        if (parent != NULL) { +            inode_unref(parent);          } -        inode_unref (parent); -        GF_FREE (tmp); +        parent = inode_ref(inode); +        str = NULL; +    } + +    inode_unref(parent); +    GF_FREE(tmp);  out: -        return inode; +    return inode;  } -  int -inode_grep_for_gfid (inode_table_t *table, inode_t *parent, const char *name, -                     uuid_t gfid, ia_type_t *type) -{ -        inode_t   *inode = NULL; -        dentry_t  *dentry = NULL; -        int        ret = -1; - -        if (!table || !parent || !name) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, "table || parent || name" -                                  " not found"); -                return ret; -        } +inode_grep_for_gfid(inode_table_t *table, inode_t *parent, const char *name, +                    uuid_t gfid, ia_type_t *type) +{ +    inode_t *inode = NULL; +    dentry_t *dentry = NULL; +    int ret = -1; -        pthread_mutex_lock (&table->lock); -        { -                dentry = __dentry_grep (table, parent, name); +    if (!table || !parent || !name) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "table || parent || name" +                         " not found"); +        return ret; +    } -                if (dentry) -                        inode = dentry->inode; +    pthread_mutex_lock(&table->lock); +    { +        dentry = __dentry_grep(table, parent, name); -                if (inode) { -                        gf_uuid_copy (gfid, inode->gfid); -                        *type = inode->ia_type; -                        ret = 0; -                } +        if (dentry) +            inode = dentry->inode; + +        if (inode) { +            gf_uuid_copy(gfid, inode->gfid); +            *type = inode->ia_type; +            ret = 0;          } -        pthread_mutex_unlock (&table->lock); +    } +    pthread_mutex_unlock(&table->lock); -        return ret; +    return ret;  } -  /* return 1 if gfid is of root, 0 if not */  gf_boolean_t -__is_root_gfid (uuid_t gfid) +__is_root_gfid(uuid_t gfid)  { -        static uuid_t root = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; +    static uuid_t root = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}; -        if (gf_uuid_compare (gfid, root) == 0) -                return _gf_true; +    if (gf_uuid_compare(gfid, root) == 0) +        return _gf_true; -        return _gf_false; +    return _gf_false;  } -  inode_t * -__inode_find (inode_table_t *table, uuid_t gfid) +__inode_find(inode_table_t *table, uuid_t gfid)  { -        inode_t   *inode = NULL; -        inode_t   *tmp = NULL; -        int        hash = 0; +    inode_t *inode = NULL; +    inode_t *tmp = NULL; +    int hash = 0; -        if (!table) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_TABLE_NOT_FOUND, "table not " -                                  "found"); -                goto out; -        } +    if (!table) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, +                         LG_MSG_INODE_TABLE_NOT_FOUND, +                         "table not " +                         "found"); +        goto out; +    } -        if (__is_root_gfid (gfid)) -                return table->root; +    if (__is_root_gfid(gfid)) +        return table->root; -        hash = hash_gfid (gfid, 65536); +    hash = hash_gfid(gfid, 65536); -        list_for_each_entry (tmp, &table->inode_hash[hash], hash) { -                if (gf_uuid_compare (tmp->gfid, gfid) == 0) { -                        inode = tmp; -                        break; -                } +    list_for_each_entry(tmp, &table->inode_hash[hash], hash) +    { +        if (gf_uuid_compare(tmp->gfid, gfid) == 0) { +            inode = tmp; +            break;          } +    }  out: -        return inode; +    return inode;  } -  inode_t * -inode_find (inode_table_t *table, uuid_t gfid) +inode_find(inode_table_t *table, uuid_t gfid)  { -        inode_t   *inode = NULL; +    inode_t *inode = NULL; -        if (!table) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_TABLE_NOT_FOUND, "table not " -                                  "found"); -                return NULL; -        } +    if (!table) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, +                         LG_MSG_INODE_TABLE_NOT_FOUND, +                         "table not " +                         "found"); +        return NULL; +    } -        pthread_mutex_lock (&table->lock); -        { -                inode = __inode_find (table, gfid); -                if (inode) -                        __inode_ref (inode); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        inode = __inode_find(table, gfid); +        if (inode) +            __inode_ref(inode); +    } +    pthread_mutex_unlock(&table->lock); -        return inode; +    return inode;  } -  static inode_t * -__inode_link (inode_t *inode, inode_t *parent, const char *name, -              struct iatt *iatt) -{ -        dentry_t      *dentry = NULL; -        dentry_t      *old_dentry = NULL; -        inode_t       *old_inode = NULL; -        inode_table_t *table = NULL; -        inode_t       *link_inode = NULL; - -        if (!inode) { -                errno = EINVAL; -                return NULL; -        } - -        table = inode->table; -        if (!table) { -                errno = EINVAL; -                return NULL; -        } - -        if (parent) { -                /* We should prevent inode linking between different -                   inode tables. This can cause errors which is very -                   hard to catch/debug. */ -                if (inode->table != parent->table) { -                        errno = EINVAL; -                        GF_ASSERT (!"link attempted b/w inodes of diff table"); -                } - -                if (parent->ia_type != IA_IFDIR) { -                        errno = EINVAL; -                        GF_ASSERT (!"link attempted on non-directory parent"); -                        return NULL; -                } - -                if (!name || strlen (name) == 0) { -                        errno = EINVAL; -                        GF_ASSERT (!"link attempted with no basename on " +__inode_link(inode_t *inode, inode_t *parent, const char *name, +             struct iatt *iatt) +{ +    dentry_t *dentry = NULL; +    dentry_t *old_dentry = NULL; +    inode_t *old_inode = NULL; +    inode_table_t *table = NULL; +    inode_t *link_inode = NULL; + +    if (!inode) { +        errno = EINVAL; +        return NULL; +    } + +    table = inode->table; +    if (!table) { +        errno = EINVAL; +        return NULL; +    } + +    if (parent) { +        /* We should prevent inode linking between different +           inode tables. This can cause errors which is very +           hard to catch/debug. */ +        if (inode->table != parent->table) { +            errno = EINVAL; +            GF_ASSERT(!"link attempted b/w inodes of diff table"); +        } + +        if (parent->ia_type != IA_IFDIR) { +            errno = EINVAL; +            GF_ASSERT(!"link attempted on non-directory parent"); +            return NULL; +        } + +        if (!name || strlen(name) == 0) { +            errno = EINVAL; +            GF_ASSERT (!"link attempted with no basename on "                                      "parent"); -                        return NULL; -                } +            return NULL;          } +    } -        link_inode = inode; +    link_inode = inode; -        if (!__is_inode_hashed (inode)) { -                if (!iatt) { -                        errno = EINVAL; -                        return NULL; -                } +    if (!__is_inode_hashed(inode)) { +        if (!iatt) { +            errno = EINVAL; +            return NULL; +        } -                if (gf_uuid_is_null (iatt->ia_gfid)) { -                        errno = EINVAL; -                        return NULL; -                } +        if (gf_uuid_is_null(iatt->ia_gfid)) { +            errno = EINVAL; +            return NULL; +        } -                old_inode = __inode_find (table, iatt->ia_gfid); +        old_inode = __inode_find(table, iatt->ia_gfid); -                if (old_inode) { -                        link_inode = old_inode; -                } else { -                        gf_uuid_copy (inode->gfid, iatt->ia_gfid); -                        inode->ia_type    = iatt->ia_type; -                        __inode_hash (inode); -                } +        if (old_inode) { +            link_inode = old_inode;          } else { -		/* @old_inode serves another important purpose - it indicates -		   to the code further below whether a dentry cycle check is -		   required or not (a new inode linkage can never result in -		   creation of a loop.) - -		   if the given @inode is already hashed, it actually means -		   it is an "old" inode and deserves to undergo the cyclic -		   check. -		*/ -		old_inode = inode; -	} - -        if (name) { -                if (!strcmp(name, ".") || !strcmp(name, "..")) -                        return link_inode; - -                if (strchr (name, '/')) { -                        GF_ASSERT (!"inode link attempted with '/' in name"); -                        return NULL; -                } -        } +            gf_uuid_copy(inode->gfid, iatt->ia_gfid); +            inode->ia_type = iatt->ia_type; +            __inode_hash(inode); +        } +    } else { +        /* @old_inode serves another important purpose - it indicates +           to the code further below whether a dentry cycle check is +           required or not (a new inode linkage can never result in +           creation of a loop.) + +           if the given @inode is already hashed, it actually means +           it is an "old" inode and deserves to undergo the cyclic +           check. +        */ +        old_inode = inode; +    } + +    if (name) { +        if (!strcmp(name, ".") || !strcmp(name, "..")) +            return link_inode; + +        if (strchr(name, '/')) { +            GF_ASSERT(!"inode link attempted with '/' in name"); +            return NULL; +        } +    } + +    /* use only link_inode beyond this point */ +    if (parent) { +        old_dentry = __dentry_grep(table, parent, name); + +        if (!old_dentry || old_dentry->inode != link_inode) { +            dentry = __dentry_create(link_inode, parent, name); +            if (!dentry) { +                gf_msg_callingfn( +                    THIS->name, GF_LOG_ERROR, 0, LG_MSG_DENTRY_CREATE_FAILED, +                    "dentry create failed on " +                    "inode %s with parent %s", +                    uuid_utoa(link_inode->gfid), uuid_utoa(parent->gfid)); +                errno = ENOMEM; +                return NULL; +            } +            if (old_inode && __is_dentry_cyclic(dentry)) { +                errno = ELOOP; +                __dentry_unset(dentry); +                return NULL; +            } +            __dentry_hash(dentry); -        /* use only link_inode beyond this point */ -        if (parent) { -                old_dentry = __dentry_grep (table, parent, name); - -                if (!old_dentry || old_dentry->inode != link_inode) { -                        dentry = __dentry_create (link_inode, parent, name); -                        if (!dentry) { -                                gf_msg_callingfn (THIS->name, GF_LOG_ERROR, 0, -                                                  LG_MSG_DENTRY_CREATE_FAILED, -                                                  "dentry create failed on " -                                                  "inode %s with parent %s", -                                                  uuid_utoa (link_inode->gfid), -                                                  uuid_utoa (parent->gfid)); -                                errno = ENOMEM; -                                return NULL; -                        } -                        if (old_inode && __is_dentry_cyclic (dentry)) { -                                errno = ELOOP; -                                __dentry_unset (dentry); -                                return NULL; -                        } -                        __dentry_hash (dentry); - -                        if (old_dentry) -                                __dentry_unset (old_dentry); -                } +            if (old_dentry) +                __dentry_unset(old_dentry);          } +    } -        return link_inode; +    return link_inode;  } -  inode_t * -inode_link (inode_t *inode, inode_t *parent, const char *name, -            struct iatt *iatt) +inode_link(inode_t *inode, inode_t *parent, const char *name, struct iatt *iatt)  { -        inode_table_t *table = NULL; -        inode_t       *linked_inode = NULL; +    inode_table_t *table = NULL; +    inode_t *linked_inode = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return NULL; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return NULL; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                linked_inode = __inode_link (inode, parent, name, iatt); +    pthread_mutex_lock(&table->lock); +    { +        linked_inode = __inode_link(inode, parent, name, iatt); -                if (linked_inode) -                        __inode_ref (linked_inode); -        } -        pthread_mutex_unlock (&table->lock); +        if (linked_inode) +            __inode_ref(linked_inode); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table); -        return linked_inode; +    return linked_inode;  } -  int -inode_lookup (inode_t *inode) +inode_lookup(inode_t *inode)  { -        inode_table_t *table = NULL; +    inode_table_t *table = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return -1; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return -1; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                __inode_lookup (inode); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        __inode_lookup(inode); +    } +    pthread_mutex_unlock(&table->lock); -        return 0; +    return 0;  } -  int -inode_ref_reduce_by_n (inode_t *inode, uint64_t nref) +inode_ref_reduce_by_n(inode_t *inode, uint64_t nref)  { -        inode_table_t *table = NULL; +    inode_table_t *table = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return -1; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return -1; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                __inode_ref_reduce_by_n (inode, nref); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        __inode_ref_reduce_by_n(inode, nref); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table); -        return 0; +    return 0;  } -  int -inode_forget (inode_t *inode, uint64_t nlookup) +inode_forget(inode_t *inode, uint64_t nlookup)  { -        inode_table_t *table = NULL; +    inode_table_t *table = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return -1; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return -1; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                __inode_forget (inode, nlookup); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        __inode_forget(inode, nlookup); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table); -        return 0; +    return 0;  }  /* - * Invalidate an inode. This is invoked when a translator decides that an inode's - * cache is no longer valid. Any translator interested in taking action in this - * situation can define the invalidate callback. + * Invalidate an inode. This is invoked when a translator decides that an + * inode's cache is no longer valid. Any translator interested in taking action + * in this situation can define the invalidate callback.   */  int  inode_invalidate(inode_t *inode)  { -	int ret = 0; -	xlator_t *xl = NULL; -	xlator_t *old_THIS = NULL; - -	if (!inode) { -		gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, -                                 LG_MSG_INODE_NOT_FOUND, "inode not found"); -		return -1; -	} - -	/* -	 * The master xlator is not in the graph but it can define an invalidate -	 * handler. -	 */ -	xl = inode->table->xl->ctx->master; -	if (xl && xl->cbks->invalidate) { -		old_THIS = THIS; -		THIS = xl; -		ret = xl->cbks->invalidate(xl, inode); -		THIS = old_THIS; -		if (ret) -			return ret; -	} +    int ret = 0; +    xlator_t *xl = NULL; +    xlator_t *old_THIS = NULL; + +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return -1; +    } + +    /* +     * The master xlator is not in the graph but it can define an invalidate +     * handler. +     */ +    xl = inode->table->xl->ctx->master; +    if (xl && xl->cbks->invalidate) { +        old_THIS = THIS; +        THIS = xl; +        ret = xl->cbks->invalidate(xl, inode); +        THIS = old_THIS; +        if (ret) +            return ret; +    } -	xl = inode->table->xl->graph->first; -	while (xl) { -		old_THIS = THIS; -		THIS = xl; -		if (xl->cbks->invalidate) -			ret = xl->cbks->invalidate(xl, inode); -		THIS = old_THIS; +    xl = inode->table->xl->graph->first; +    while (xl) { +        old_THIS = THIS; +        THIS = xl; +        if (xl->cbks->invalidate) +            ret = xl->cbks->invalidate(xl, inode); +        THIS = old_THIS; -		if (ret) -			break; +        if (ret) +            break; -		xl = xl->next; -	} +        xl = xl->next; +    } -	return ret; +    return ret;  } -  static void -__inode_unlink (inode_t *inode, inode_t *parent, const char *name) +__inode_unlink(inode_t *inode, inode_t *parent, const char *name)  { -        dentry_t *dentry = NULL; -        char pgfid[64] = {0}; -        char gfid[64] = {0}; +    dentry_t *dentry = NULL; +    char pgfid[64] = {0}; +    char gfid[64] = {0}; -        if (!inode || !parent || !name) -                return; +    if (!inode || !parent || !name) +        return; -        dentry = __dentry_search_for_inode (inode, parent->gfid, name); - -        /* dentry NULL for corrupted backend */ -        if (dentry) { -                __dentry_unset (dentry); -        } else { -                gf_msg ("inode", GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, -                        "%s/%s: dentry not found in %s", -                        uuid_utoa_r (parent->gfid, pgfid), name, -                        uuid_utoa_r (inode->gfid, gfid)); -        } +    dentry = __dentry_search_for_inode(inode, parent->gfid, name); +    /* dentry NULL for corrupted backend */ +    if (dentry) { +        __dentry_unset(dentry); +    } else { +        gf_msg("inode", GF_LOG_WARNING, 0, LG_MSG_DENTRY_NOT_FOUND, +               "%s/%s: dentry not found in %s", +               uuid_utoa_r(parent->gfid, pgfid), name, +               uuid_utoa_r(inode->gfid, gfid)); +    }  } -  void -inode_unlink (inode_t *inode, inode_t *parent, const char *name) +inode_unlink(inode_t *inode, inode_t *parent, const char *name)  { -        inode_table_t *table = NULL; +    inode_table_t *table = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                __inode_unlink (inode, parent, name); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        __inode_unlink(inode, parent, name); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table);  } -  int -inode_rename (inode_table_t *table, inode_t *srcdir, const char *srcname, -              inode_t *dstdir, const char *dstname, inode_t *inode, -              struct iatt *iatt) -{ -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return -1; -        } +inode_rename(inode_table_t *table, inode_t *srcdir, const char *srcname, +             inode_t *dstdir, const char *dstname, inode_t *inode, +             struct iatt *iatt) +{ +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return -1; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                __inode_link (inode, dstdir, dstname, iatt); -                __inode_unlink (inode, srcdir, srcname); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        __inode_link(inode, dstdir, dstname, iatt); +        __inode_unlink(inode, srcdir, srcname); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table); -        return 0; +    return 0;  } -  static dentry_t * -__dentry_search_arbit (inode_t *inode) +__dentry_search_arbit(inode_t *inode)  { -        dentry_t *dentry = NULL; -        dentry_t *trav = NULL; +    dentry_t *dentry = NULL; +    dentry_t *trav = NULL; -        if (!inode) -                return NULL; +    if (!inode) +        return NULL; -        list_for_each_entry (trav, &inode->dentry_list, inode_list) { -                if (__is_dentry_hashed (trav)) { -                        dentry = trav; -                        break; -                } +    list_for_each_entry(trav, &inode->dentry_list, inode_list) +    { +        if (__is_dentry_hashed(trav)) { +            dentry = trav; +            break;          } +    } -        if (!dentry) { -                list_for_each_entry (trav, &inode->dentry_list, inode_list) { -                        dentry = trav; -                        break; -                } +    if (!dentry) { +        list_for_each_entry(trav, &inode->dentry_list, inode_list) +        { +            dentry = trav; +            break;          } +    } -        return dentry; +    return dentry;  } -  inode_t * -inode_parent (inode_t *inode, uuid_t pargfid, const char *name) +inode_parent(inode_t *inode, uuid_t pargfid, const char *name)  { -        inode_t       *parent = NULL; -        inode_table_t *table = NULL; -        dentry_t      *dentry = NULL; +    inode_t *parent = NULL; +    inode_table_t *table = NULL; +    dentry_t *dentry = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return NULL; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return NULL; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                if (pargfid && !gf_uuid_is_null (pargfid) && name) { -                        dentry = __dentry_search_for_inode (inode, pargfid, name); -                } else { -                        dentry = __dentry_search_arbit (inode); -                } +    pthread_mutex_lock(&table->lock); +    { +        if (pargfid && !gf_uuid_is_null(pargfid) && name) { +            dentry = __dentry_search_for_inode(inode, pargfid, name); +        } else { +            dentry = __dentry_search_arbit(inode); +        } -                if (dentry) -                        parent = dentry->parent; +        if (dentry) +            parent = dentry->parent; -                if (parent) -                        __inode_ref (parent); -        } -        pthread_mutex_unlock (&table->lock); +        if (parent) +            __inode_ref(parent); +    } +    pthread_mutex_unlock(&table->lock); -        return parent; +    return parent;  }  static int -__inode_has_dentry (inode_t *inode) +__inode_has_dentry(inode_t *inode)  { -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return 0; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return 0; +    } -        return !list_empty (&inode->dentry_list); +    return !list_empty(&inode->dentry_list);  }  int -inode_has_dentry (inode_t *inode) +inode_has_dentry(inode_t *inode)  { +    int dentry_present = 0; -        int dentry_present = 0; - -        LOCK (&inode->lock); -        { -                dentry_present = __inode_has_dentry (inode); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        dentry_present = __inode_has_dentry(inode); +    } +    UNLOCK(&inode->lock); -        return dentry_present; +    return dentry_present;  }  int -__inode_path (inode_t *inode, const char *name, char **bufp) -{ -        inode_table_t *table = NULL; -        inode_t       *itrav = NULL; -        dentry_t      *trav  = NULL; -        size_t         i     = 0, size = 0; -        int64_t        ret   = 0; -        int            len   = 0; -        char          *buf   = NULL; - -        if (!inode || gf_uuid_is_null (inode->gfid)) { -                GF_ASSERT (0); -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, EINVAL, -                                  LG_MSG_INVALID_ARG, "invalid inode"); -                return -EINVAL; -        } +__inode_path(inode_t *inode, const char *name, char **bufp) +{ +    inode_table_t *table = NULL; +    inode_t *itrav = NULL; +    dentry_t *trav = NULL; +    size_t i = 0, size = 0; +    int64_t ret = 0; +    int len = 0; +    char *buf = NULL; + +    if (!inode || gf_uuid_is_null(inode->gfid)) { +        GF_ASSERT(0); +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, EINVAL, LG_MSG_INVALID_ARG, +                         "invalid inode"); +        return -EINVAL; +    } + +    table = inode->table; + +    itrav = inode; +    for (trav = __dentry_search_arbit(itrav); trav; +         trav = __dentry_search_arbit(itrav)) { +        itrav = trav->parent; +        i++; /* "/" */ +        i += strlen(trav->name); +        if (i > PATH_MAX) { +            gf_msg(table->name, GF_LOG_CRITICAL, 0, LG_MSG_DENTRY_CYCLIC_LOOP, +                   "possible infinite " +                   "loop detected, forcing break. name=(%s)", +                   name); +            ret = -ENOENT; +            goto out; +        } +    } + +    if (!__is_root_gfid(itrav->gfid)) { +        /* "<gfid:00000000-0000-0000-0000-000000000000>"/path */ +        i += GFID_STR_PFX_LEN; +    } + +    if (name) { +        i++; +        i += strlen(name); +    } + +    ret = i; +    size = i + 1; +    buf = GF_CALLOC(size, sizeof(char), gf_common_mt_char); +    if (buf) { +        buf[size - 1] = 0; -        table = inode->table; +        if (name) { +            len = strlen(name); +            strncpy(buf + (i - len), name, len); +            buf[i - len - 1] = '/'; +            i -= (len + 1); +        }          itrav = inode; -        for (trav = __dentry_search_arbit (itrav); trav; -             trav = __dentry_search_arbit (itrav)) { -                itrav = trav->parent; -                i ++; /* "/" */ -                i += strlen (trav->name); -                if (i > PATH_MAX) { -                        gf_msg (table->name, GF_LOG_CRITICAL, 0, -                                LG_MSG_DENTRY_CYCLIC_LOOP, "possible infinite " -                                "loop detected, forcing break. name=(%s)", -                                name); -                        ret = -ENOENT; -                        goto out; -                } +        for (trav = __dentry_search_arbit(itrav); trav; +             trav = __dentry_search_arbit(itrav)) { +            itrav = trav->parent; +            len = strlen(trav->name); +            strncpy(buf + (i - len), trav->name, len); +            buf[i - len - 1] = '/'; +            i -= (len + 1);          } -        if (!__is_root_gfid (itrav->gfid)) { -                /* "<gfid:00000000-0000-0000-0000-000000000000>"/path */ -                i += GFID_STR_PFX_LEN; +        if (!__is_root_gfid(itrav->gfid)) { +            snprintf(&buf[i - GFID_STR_PFX_LEN], GFID_STR_PFX_LEN, +                     INODE_PATH_FMT, uuid_utoa(itrav->gfid)); +            buf[i - 1] = '>';          } -        if (name) { -                i++; -                i += strlen (name); -        } +        *bufp = buf; +    } else { +        ret = -ENOMEM; +    } -        ret = i; -        size = i + 1; -        buf = GF_CALLOC (size, sizeof (char), gf_common_mt_char); +out: +    if (__is_root_gfid(inode->gfid) && !name) { +        ret = 1; +        GF_FREE(buf); +        buf = GF_CALLOC(ret + 1, sizeof(char), gf_common_mt_char);          if (buf) { - -                buf[size - 1] = 0; - -                if (name) { -                        len = strlen (name); -                        strncpy (buf + (i - len), name, len); -                        buf[i-len-1] = '/'; -                        i -= (len + 1); -                } - -                itrav = inode; -                for (trav = __dentry_search_arbit (itrav); trav; -                     trav = __dentry_search_arbit (itrav)) { -                        itrav = trav->parent; -                        len = strlen (trav->name); -                        strncpy (buf + (i - len), trav->name, len); -                        buf[i-len-1] = '/'; -                        i -= (len + 1); -                } - -                if (!__is_root_gfid (itrav->gfid)) { -                        snprintf (&buf[i-GFID_STR_PFX_LEN], GFID_STR_PFX_LEN, -                                  INODE_PATH_FMT, uuid_utoa (itrav->gfid)); -                        buf[i-1] = '>'; -                } - -                *bufp = buf; +            strcpy(buf, "/"); +            *bufp = buf;          } else { -                ret = -ENOMEM; +            ret = -ENOMEM;          } +    } -out: -        if (__is_root_gfid (inode->gfid) && !name) { -                ret = 1; -                GF_FREE (buf); -                buf = GF_CALLOC (ret + 1, sizeof (char), gf_common_mt_char); -                if (buf) { -                        strcpy (buf, "/"); -                        *bufp = buf; -                } else { -                        ret = -ENOMEM; -                } -        } - -        if (ret < 0) -                *bufp = NULL; -        return ret; +    if (ret < 0) +        *bufp = NULL; +    return ret;  } -  int -inode_path (inode_t *inode, const char *name, char **bufp) +inode_path(inode_t *inode, const char *name, char **bufp)  { -        inode_table_t *table = NULL; -        int            ret   = -1; +    inode_table_t *table = NULL; +    int ret = -1; -        if (!inode) -                return -EINVAL; +    if (!inode) +        return -EINVAL; -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                ret = __inode_path (inode, name, bufp); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        ret = __inode_path(inode, name, bufp); +    } +    pthread_mutex_unlock(&table->lock); -        return ret; +    return ret;  }  void -__inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit) +__inode_table_set_lru_limit(inode_table_t *table, uint32_t lru_limit)  { -        table->lru_limit = lru_limit; -        return; +    table->lru_limit = lru_limit; +    return;  } -  void -inode_table_set_lru_limit (inode_table_t *table, uint32_t lru_limit) +inode_table_set_lru_limit(inode_table_t *table, uint32_t lru_limit)  { -        pthread_mutex_lock (&table->lock); -        { -                __inode_table_set_lru_limit (table, lru_limit); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        __inode_table_set_lru_limit(table, lru_limit); +    } +    pthread_mutex_unlock(&table->lock); -        inode_table_prune (table); +    inode_table_prune(table); -        return; +    return;  }  static int -inode_table_prune (inode_table_t *table) +inode_table_prune(inode_table_t *table)  { -        int               ret = 0; -        struct list_head  purge = {0, }; -        inode_t          *del = NULL; -        inode_t          *tmp = NULL; -        inode_t          *entry = NULL; +    int ret = 0; +    struct list_head purge = { +        0, +    }; +    inode_t *del = NULL; +    inode_t *tmp = NULL; +    inode_t *entry = NULL; -        if (!table) -                return -1; +    if (!table) +        return -1; -        INIT_LIST_HEAD (&purge); +    INIT_LIST_HEAD(&purge); -        pthread_mutex_lock (&table->lock); -        { -                while (table->lru_limit -                       && table->lru_size > (table->lru_limit)) { -                        if (list_empty (&table->lru)) { -                                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                                  LG_MSG_INVALID_INODE_LIST, -                                                  "Empty inode lru list found" -                                                  " but with (%d) lru_size", -                                                  table->lru_size); -                                break; -                        } - -                        entry = list_entry (table->lru.next, inode_t, list); - -                        table->lru_size--; -                        __inode_retire (entry); - -                        ret++; -                } +    pthread_mutex_lock(&table->lock); +    { +        while (table->lru_limit && table->lru_size > (table->lru_limit)) { +            if (list_empty(&table->lru)) { +                gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, +                                 LG_MSG_INVALID_INODE_LIST, +                                 "Empty inode lru list found" +                                 " but with (%d) lru_size", +                                 table->lru_size); +                break; +            } + +            entry = list_entry(table->lru.next, inode_t, list); + +            table->lru_size--; +            __inode_retire(entry); -                list_splice_init (&table->purge, &purge); -                table->purge_size = 0; +            ret++;          } -        pthread_mutex_unlock (&table->lock); +        list_splice_init(&table->purge, &purge); +        table->purge_size = 0; +    } +    pthread_mutex_unlock(&table->lock); + +    { +        list_for_each_entry_safe(del, tmp, &purge, list)          { -                list_for_each_entry_safe (del, tmp, &purge, list) { -                        list_del_init (&del->list); -                        __inode_forget (del, 0); -                        __inode_destroy (del); -                } +            list_del_init(&del->list); +            __inode_forget(del, 0); +            __inode_destroy(del);          } +    } -        return ret; +    return ret;  } -  static void -__inode_table_init_root (inode_table_t *table) +__inode_table_init_root(inode_table_t *table)  { -        inode_t     *root = NULL; -        struct iatt  iatt = {0, }; +    inode_t *root = NULL; +    struct iatt iatt = { +        0, +    }; -        if (!table) -                return; +    if (!table) +        return; -        root = __inode_create (table); +    root = __inode_create(table); -        iatt.ia_gfid[15] = 1; -        iatt.ia_ino = 1; -        iatt.ia_type = IA_IFDIR; +    iatt.ia_gfid[15] = 1; +    iatt.ia_ino = 1; +    iatt.ia_type = IA_IFDIR; -        __inode_link (root, NULL, NULL, &iatt); -        table->root = root; +    __inode_link(root, NULL, NULL, &iatt); +    table->root = root;  } -  inode_table_t * -inode_table_new (size_t lru_limit, xlator_t *xl) +inode_table_new(size_t lru_limit, xlator_t *xl)  { -        inode_table_t *new = NULL; -        int            ret = -1; -        int            i = 0; - -        new = (void *)GF_CALLOC(1, sizeof (*new), gf_common_mt_inode_table_t); -        if (!new) -                return NULL; +    inode_table_t *new = NULL; +    int ret = -1; +    int i = 0; -        new->xl = xl; -        new->ctxcount = xl->graph->xl_count + 1; +    new = (void *)GF_CALLOC(1, sizeof(*new), gf_common_mt_inode_table_t); +    if (!new) +        return NULL; -        new->lru_limit = lru_limit; +    new->xl = xl; +    new->ctxcount = xl->graph->xl_count + 1; -        new->hashsize = 14057; /* TODO: Random Number?? */ +    new->lru_limit = lru_limit; -        /* In case FUSE is initing the inode table. */ -        if (lru_limit == 0) -                lru_limit = DEFAULT_INODE_MEMPOOL_ENTRIES; +    new->hashsize = 14057; /* TODO: Random Number?? */ -        new->inode_pool = mem_pool_new (inode_t, lru_limit); +    /* In case FUSE is initing the inode table. */ +    if (lru_limit == 0) +        lru_limit = DEFAULT_INODE_MEMPOOL_ENTRIES; -        if (!new->inode_pool) -                goto out; +    new->inode_pool = mem_pool_new(inode_t, lru_limit); -        new->dentry_pool = mem_pool_new (dentry_t, lru_limit); +    if (!new->inode_pool) +        goto out; -        if (!new->dentry_pool) -                goto out; +    new->dentry_pool = mem_pool_new(dentry_t, lru_limit); -        new->inode_hash = (void *)GF_CALLOC (65536, -                                             sizeof (struct list_head), -                                             gf_common_mt_list_head); -        if (!new->inode_hash) -                goto out; +    if (!new->dentry_pool) +        goto out; -        new->name_hash = (void *)GF_CALLOC (new->hashsize, -                                            sizeof (struct list_head), -                                            gf_common_mt_list_head); -        if (!new->name_hash) -                goto out; +    new->inode_hash = (void *)GF_CALLOC(65536, sizeof(struct list_head), +                                        gf_common_mt_list_head); +    if (!new->inode_hash) +        goto out; -        /* if number of fd open in one process is more than this, -           we may hit perf issues */ -        new->fd_mem_pool = mem_pool_new (fd_t, 1024); +    new->name_hash = (void *)GF_CALLOC(new->hashsize, sizeof(struct list_head), +                                       gf_common_mt_list_head); +    if (!new->name_hash) +        goto out; -        if (!new->fd_mem_pool) -                goto out; +    /* if number of fd open in one process is more than this, +       we may hit perf issues */ +    new->fd_mem_pool = mem_pool_new(fd_t, 1024); -        for (i = 0; i < 65536; i++) { -                INIT_LIST_HEAD (&new->inode_hash[i]); -        } +    if (!new->fd_mem_pool) +        goto out; +    for (i = 0; i < 65536; i++) { +        INIT_LIST_HEAD(&new->inode_hash[i]); +    } -        for (i = 0; i < new->hashsize; i++) { -                INIT_LIST_HEAD (&new->name_hash[i]); -        } +    for (i = 0; i < new->hashsize; i++) { +        INIT_LIST_HEAD(&new->name_hash[i]); +    } -        INIT_LIST_HEAD (&new->active); -        INIT_LIST_HEAD (&new->lru); -        INIT_LIST_HEAD (&new->purge); +    INIT_LIST_HEAD(&new->active); +    INIT_LIST_HEAD(&new->lru); +    INIT_LIST_HEAD(&new->purge); -        ret = gf_asprintf (&new->name, "%s/inode", xl->name); -        if (-1 == ret) { -                /* TODO: This should be ok to continue, check with avati */ -                ; -        } +    ret = gf_asprintf(&new->name, "%s/inode", xl->name); +    if (-1 == ret) { +        /* TODO: This should be ok to continue, check with avati */ +        ; +    } -        __inode_table_init_root (new); +    __inode_table_init_root(new); -        pthread_mutex_init (&new->lock, NULL); +    pthread_mutex_init(&new->lock, NULL); -        ret = 0; +    ret = 0;  out: -        if (ret) { -                if (new) { -                        GF_FREE (new->inode_hash); -                        GF_FREE (new->name_hash); -                        if (new->dentry_pool) -                                mem_pool_destroy (new->dentry_pool); -                        if (new->inode_pool) -                                mem_pool_destroy (new->inode_pool); -                        GF_FREE (new); -                        new = NULL; -                } +    if (ret) { +        if (new) { +            GF_FREE(new->inode_hash); +            GF_FREE(new->name_hash); +            if (new->dentry_pool) +                mem_pool_destroy(new->dentry_pool); +            if (new->inode_pool) +                mem_pool_destroy(new->inode_pool); +            GF_FREE(new); +            new = NULL;          } +    } -        return new; +    return new;  }  int -inode_table_ctx_free (inode_table_t *table) +inode_table_ctx_free(inode_table_t *table)  { -        int ret = 0; -        inode_t *del = NULL; -        inode_t *tmp = NULL; -        int purge_count = 0; -        int lru_count = 0; -        int active_count = 0; -        xlator_t *this = NULL; -        int itable_size = 0; +    int ret = 0; +    inode_t *del = NULL; +    inode_t *tmp = NULL; +    int purge_count = 0; +    int lru_count = 0; +    int active_count = 0; +    xlator_t *this = NULL; +    int itable_size = 0; -        if (!table) -                return -1; +    if (!table) +        return -1; -        this = THIS; +    this = THIS; -        pthread_mutex_lock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        list_for_each_entry_safe(del, tmp, &table->purge, list)          { -                list_for_each_entry_safe (del, tmp, &table->purge, list) { -                        if (del->_ctx) { -                                __inode_ctx_free (del); -                                purge_count++; -                        } -                } - -                list_for_each_entry_safe (del, tmp, &table->lru, list) { -                        if (del->_ctx) { -                                __inode_ctx_free (del); -                                lru_count++; -                        } -                } +            if (del->_ctx) { +                __inode_ctx_free(del); +                purge_count++; +            } +        } -                /* should the contexts of active inodes be freed? -                 * Since before this function being called fds would have -                 * been migrated and would have held the ref on the new -                 * inode from the new inode table, the older inode would not -                 * be used. -                 */ -                list_for_each_entry_safe (del, tmp, &table->active, list) { -                        if (del->_ctx) { -                                __inode_ctx_free (del); -                                active_count++; -                        } -                } +        list_for_each_entry_safe(del, tmp, &table->lru, list) +        { +            if (del->_ctx) { +                __inode_ctx_free(del); +                lru_count++; +            }          } -        pthread_mutex_unlock (&table->lock); - -        ret = purge_count + lru_count + active_count; -        itable_size = table->active_size + table->lru_size + table->purge_size; -        gf_msg_callingfn (this->name, GF_LOG_INFO, 0, -                          LG_MSG_INODE_CONTEXT_FREED, "total %d (itable size: " -                          "%d) inode contexts have been freed (active: %d, (" -                          "active size: %d), lru: %d, (lru size: %d),  purge: " -                          "%d, (purge size: %d))", ret, itable_size, -                          active_count, table->active_size, lru_count, -                          table->lru_size, purge_count, table->purge_size); -        return ret; + +        /* should the contexts of active inodes be freed? +         * Since before this function being called fds would have +         * been migrated and would have held the ref on the new +         * inode from the new inode table, the older inode would not +         * be used. +         */ +        list_for_each_entry_safe(del, tmp, &table->active, list) +        { +            if (del->_ctx) { +                __inode_ctx_free(del); +                active_count++; +            } +        } +    } +    pthread_mutex_unlock(&table->lock); + +    ret = purge_count + lru_count + active_count; +    itable_size = table->active_size + table->lru_size + table->purge_size; +    gf_msg_callingfn(this->name, GF_LOG_INFO, 0, LG_MSG_INODE_CONTEXT_FREED, +                     "total %d (itable size: " +                     "%d) inode contexts have been freed (active: %d, (" +                     "active size: %d), lru: %d, (lru size: %d),  purge: " +                     "%d, (purge size: %d))", +                     ret, itable_size, active_count, table->active_size, +                     lru_count, table->lru_size, purge_count, +                     table->purge_size); +    return ret;  }  void -inode_table_destroy_all (glusterfs_ctx_t *ctx) { - -        glusterfs_graph_t *trav_graph  = NULL, *tmp = NULL; -        xlator_t          *tree        = NULL; -        inode_table_t     *inode_table = NULL; +inode_table_destroy_all(glusterfs_ctx_t *ctx) +{ +    glusterfs_graph_t *trav_graph = NULL, *tmp = NULL; +    xlator_t *tree = NULL; +    inode_table_t *inode_table = NULL; + +    if (ctx == NULL) +        goto out; + +    /* TODO: Traverse ctx->graphs with in ctx->lock and also the other +     * graph additions and traversals in ctx->lock. +     */ +    list_for_each_entry_safe(trav_graph, tmp, &ctx->graphs, list) +    { +        tree = trav_graph->first; +        inode_table = tree->itable; +        tree->itable = NULL; +        if (inode_table) +            inode_table_destroy(inode_table); +    } +out: +    return; +} -        if (ctx == NULL) -                goto out; +void +inode_table_destroy(inode_table_t *inode_table) +{ +    inode_t *trav = NULL; -        /* TODO: Traverse ctx->graphs with in ctx->lock and also the other -         * graph additions and traversals in ctx->lock. -         */ -        list_for_each_entry_safe (trav_graph, tmp, &ctx->graphs, list) { -                tree = trav_graph->first; -                inode_table = tree->itable; -                tree->itable = NULL; -                if (inode_table) -                        inode_table_destroy (inode_table); -        } - out: +    if (inode_table == NULL)          return; -} -void -inode_table_destroy (inode_table_t *inode_table) { - -        inode_t  *trav = NULL; - -        if (inode_table == NULL) -                return; - -        /* Ideally at this point in time, there should be no inodes with -         * refs remaining. But there are quite a few chances where the inodes -         * leak. So we can take three approaches for cleaning up the inode table: -         * 1. Assume there are no leaks and then send a forget on all the inodes -         *    in lru list.(If no leaks there should be no inodes in active list) -         * 2. Knowing there could be leaks and not freeing those inodes will -         *    also not free its inode context and this could leak a lot of -         *    memory, force free the inodes by changing the ref to 0. -         *    The problem with this is that any reference to inode after this -         *    calling this function will lead to a crash. -         * 3. Knowing there could be leakes, just free the inode contexts of -         *    all the inodes. and let the inodes be alive. This way the major -         *    memory consumed by the inode contexts are freed, but there can -         *    be errors when any inode contexts are accessed after destroying -         *    this table. +    /* Ideally at this point in time, there should be no inodes with +     * refs remaining. But there are quite a few chances where the inodes +     * leak. So we can take three approaches for cleaning up the inode table: +     * 1. Assume there are no leaks and then send a forget on all the inodes +     *    in lru list.(If no leaks there should be no inodes in active list) +     * 2. Knowing there could be leaks and not freeing those inodes will +     *    also not free its inode context and this could leak a lot of +     *    memory, force free the inodes by changing the ref to 0. +     *    The problem with this is that any reference to inode after this +     *    calling this function will lead to a crash. +     * 3. Knowing there could be leakes, just free the inode contexts of +     *    all the inodes. and let the inodes be alive. This way the major +     *    memory consumed by the inode contexts are freed, but there can +     *    be errors when any inode contexts are accessed after destroying +     *    this table. +     * +     * Not sure which is the approach to be taken, going by approach 2. +     */ + +    /* Approach 3: +     * ret = inode_table_ctx_free (inode_table); +     */ +    pthread_mutex_lock(&inode_table->lock); +    { +        /* Process lru list first as we need to unset their dentry +         * entries (the ones which may not be unset during +         * '__inode_passivate' as they were hashed) which in turn +         * shall unref their parent           * -         * Not sure which is the approach to be taken, going by approach 2. -         */ - -        /* Approach 3: -         * ret = inode_table_ctx_free (inode_table); +         * These parent inodes when unref'ed may well again fall +         * into lru list and if we are at the end of traversing +         * the list, we may miss to delete/retire that entry. Hence +         * traverse the lru list till it gets empty.           */ -        pthread_mutex_lock (&inode_table->lock); -        { -                /* Process lru list first as we need to unset their dentry -                 * entries (the ones which may not be unset during -                 * '__inode_passivate' as they were hashed) which in turn -                 * shall unref their parent -                 * -                 * These parent inodes when unref'ed may well again fall -                 * into lru list and if we are at the end of traversing -                 * the list, we may miss to delete/retire that entry. Hence -                 * traverse the lru list till it gets empty. -                 */ -                while (!list_empty (&inode_table->lru)) { -                        trav = list_first_entry (&inode_table->lru, -                                                 inode_t, list); -                        __inode_forget (trav, 0); -                        __inode_retire (trav); -                        inode_table->lru_size--; -                } - -                while (!list_empty (&inode_table->active)) { -                        trav = list_first_entry (&inode_table->active, -                                                 inode_t, list); -                        /* forget and unref the inode to retire and add it to -                         * purge list. By this time there should not be any -                         * inodes present in the active list except for root -                         * inode. Its a ref_leak otherwise. */ -                        if (trav != inode_table->root) -                                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                                  LG_MSG_REF_COUNT, -                                                  "Active inode(%p) with refcount" -                                                  "(%d) found during cleanup", -                                                  trav, trav->ref); -                        __inode_forget (trav, 0); -                        __inode_ref_reduce_by_n (trav, 0); -                } - -        } -        pthread_mutex_unlock (&inode_table->lock); - -        inode_table_prune (inode_table); - -        GF_FREE (inode_table->inode_hash); -        GF_FREE (inode_table->name_hash); -        if (inode_table->dentry_pool) -                mem_pool_destroy (inode_table->dentry_pool); -        if (inode_table->inode_pool) -                mem_pool_destroy (inode_table->inode_pool); -        if (inode_table->fd_mem_pool) -                mem_pool_destroy (inode_table->fd_mem_pool); - -        pthread_mutex_destroy (&inode_table->lock); - -        GF_FREE (inode_table->name); -        GF_FREE (inode_table); - -        return; +        while (!list_empty(&inode_table->lru)) { +            trav = list_first_entry(&inode_table->lru, inode_t, list); +            __inode_forget(trav, 0); +            __inode_retire(trav); +            inode_table->lru_size--; +        } + +        while (!list_empty(&inode_table->active)) { +            trav = list_first_entry(&inode_table->active, inode_t, list); +            /* forget and unref the inode to retire and add it to +             * purge list. By this time there should not be any +             * inodes present in the active list except for root +             * inode. Its a ref_leak otherwise. */ +            if (trav != inode_table->root) +                gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, +                                 LG_MSG_REF_COUNT, +                                 "Active inode(%p) with refcount" +                                 "(%d) found during cleanup", +                                 trav, trav->ref); +            __inode_forget(trav, 0); +            __inode_ref_reduce_by_n(trav, 0); +        } +    } +    pthread_mutex_unlock(&inode_table->lock); + +    inode_table_prune(inode_table); + +    GF_FREE(inode_table->inode_hash); +    GF_FREE(inode_table->name_hash); +    if (inode_table->dentry_pool) +        mem_pool_destroy(inode_table->dentry_pool); +    if (inode_table->inode_pool) +        mem_pool_destroy(inode_table->inode_pool); +    if (inode_table->fd_mem_pool) +        mem_pool_destroy(inode_table->fd_mem_pool); + +    pthread_mutex_destroy(&inode_table->lock); + +    GF_FREE(inode_table->name); +    GF_FREE(inode_table); + +    return;  }  inode_t * -inode_from_path (inode_table_t *itable, const char *path) +inode_from_path(inode_table_t *itable, const char *path)  { -        inode_t  *inode = NULL; -        inode_t  *parent = NULL; -        inode_t  *root = NULL; -        inode_t  *curr = NULL; -        char     *pathname = NULL; -        char     *component = NULL, *next_component = NULL; -        char     *strtokptr = NULL; +    inode_t *inode = NULL; +    inode_t *parent = NULL; +    inode_t *root = NULL; +    inode_t *curr = NULL; +    char *pathname = NULL; +    char *component = NULL, *next_component = NULL; +    char *strtokptr = NULL; -        if (!itable || !path) -                return NULL; +    if (!itable || !path) +        return NULL; -        /* top-down approach */ -        pathname = gf_strdup (path); -        if (pathname == NULL) { -                goto out; -        } +    /* top-down approach */ +    pathname = gf_strdup(path); +    if (pathname == NULL) { +        goto out; +    } -        root = itable->root; -        parent = inode_ref (root); -        component = strtok_r (pathname, "/", &strtokptr); +    root = itable->root; +    parent = inode_ref(root); +    component = strtok_r(pathname, "/", &strtokptr); -        if (component == NULL) -                /* root inode */ -                inode = inode_ref (parent); +    if (component == NULL) +        /* root inode */ +        inode = inode_ref(parent); -        while (component) { -                curr = inode_grep (itable, parent, component); +    while (component) { +        curr = inode_grep(itable, parent, component); -                if (curr == NULL) { -                        strtok_r (NULL, "/", &strtokptr); -                        break; -                } - -                next_component = strtok_r (NULL, "/", &strtokptr); +        if (curr == NULL) { +            strtok_r(NULL, "/", &strtokptr); +            break; +        } -                if (next_component) { -                        inode_unref (parent); -                        parent = curr; -                        curr = NULL; -                } else { -                        inode = curr; -                } +        next_component = strtok_r(NULL, "/", &strtokptr); -                component = next_component; +        if (next_component) { +            inode_unref(parent); +            parent = curr; +            curr = NULL; +        } else { +            inode = curr;          } -        if (parent) -                inode_unref (parent); +        component = next_component; +    } + +    if (parent) +        inode_unref(parent); -        GF_FREE (pathname); +    GF_FREE(pathname);  out: -        return inode; +    return inode;  }  void -inode_set_need_lookup (inode_t *inode, xlator_t *this) +inode_set_need_lookup(inode_t *inode, xlator_t *this)  { -        uint64_t  need_lookup = LOOKUP_NEEDED; +    uint64_t need_lookup = LOOKUP_NEEDED; -        if (!inode || !this) -                return; +    if (!inode || !this) +        return; -        inode_ctx_set (inode, this, &need_lookup); +    inode_ctx_set(inode, this, &need_lookup); -        return; +    return;  }  /* Function behaviour: @@ -1947,264 +1903,259 @@ inode_set_need_lookup (inode_t *inode, xlator_t *this)   * needed.   */  gf_boolean_t -inode_needs_lookup (inode_t *inode, xlator_t *this) -{ -        uint64_t     need_lookup = 0; -        gf_boolean_t ret         = _gf_false; -        int          op_ret      = -1; - -        if (!inode || !this) -                return ret; - -        op_ret = inode_ctx_get (inode, this, &need_lookup); -        if (op_ret == -1) { -                ret = _gf_true; -        } else if (need_lookup == LOOKUP_NEEDED) { -                ret = _gf_true; -                need_lookup = LOOKUP_NOT_NEEDED; -                inode_ctx_set (inode, this, &need_lookup); -        } +inode_needs_lookup(inode_t *inode, xlator_t *this) +{ +    uint64_t need_lookup = 0; +    gf_boolean_t ret = _gf_false; +    int op_ret = -1; +    if (!inode || !this)          return ret; -} - -int -__inode_ctx_set2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p, -                  uint64_t *value2_p) -{ -        int ret = 0; -        int set_idx = -1; -        if (!inode || !xlator || !inode->_ctx) -                return -1; +    op_ret = inode_ctx_get(inode, this, &need_lookup); +    if (op_ret == -1) { +        ret = _gf_true; +    } else if (need_lookup == LOOKUP_NEEDED) { +        ret = _gf_true; +        need_lookup = LOOKUP_NOT_NEEDED; +        inode_ctx_set(inode, this, &need_lookup); +    } -        set_idx = __inode_get_xl_index (inode, xlator); -        if (set_idx == -1) { -                ret = -1; -                goto out;; -        } +    return ret; +} -        inode->_ctx[set_idx].xl_key = xlator; -        if (value1_p) -                inode->_ctx[set_idx].value1 = *value1_p; -        if (value2_p) -                inode->_ctx[set_idx].value2 = *value2_p; +int +__inode_ctx_set2(inode_t *inode, xlator_t *xlator, uint64_t *value1_p, +                 uint64_t *value2_p) +{ +    int ret = 0; +    int set_idx = -1; + +    if (!inode || !xlator || !inode->_ctx) +        return -1; + +    set_idx = __inode_get_xl_index(inode, xlator); +    if (set_idx == -1) { +        ret = -1; +        goto out; +        ; +    } + +    inode->_ctx[set_idx].xl_key = xlator; +    if (value1_p) +        inode->_ctx[set_idx].value1 = *value1_p; +    if (value2_p) +        inode->_ctx[set_idx].value2 = *value2_p;  out: -        return ret; +    return ret;  }  int -__inode_ctx_set0 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p) +__inode_ctx_set0(inode_t *inode, xlator_t *xlator, uint64_t *value1_p)  { -        return __inode_ctx_set2 (inode, xlator, value1_p, NULL); +    return __inode_ctx_set2(inode, xlator, value1_p, NULL);  }  int -__inode_ctx_set1 (inode_t *inode, xlator_t *xlator, uint64_t *value2_p) +__inode_ctx_set1(inode_t *inode, xlator_t *xlator, uint64_t *value2_p)  { -        return __inode_ctx_set2 (inode, xlator, NULL, value2_p); +    return __inode_ctx_set2(inode, xlator, NULL, value2_p);  } -  int -inode_ctx_set2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p, -                uint64_t *value2_p) +inode_ctx_set2(inode_t *inode, xlator_t *xlator, uint64_t *value1_p, +               uint64_t *value2_p)  { -        int ret = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_set2 (inode, xlator, value1_p, value2_p); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_set2(inode, xlator, value1_p, value2_p); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  int -inode_ctx_set1 (inode_t *inode, xlator_t *xlator, uint64_t *value2_p) +inode_ctx_set1(inode_t *inode, xlator_t *xlator, uint64_t *value2_p)  { -        int ret = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_set1 (inode, xlator, value2_p); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_set1(inode, xlator, value2_p); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  int -inode_ctx_set0 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p) +inode_ctx_set0(inode_t *inode, xlator_t *xlator, uint64_t *value1_p)  { -        int ret = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_set0 (inode, xlator, value1_p); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_set0(inode, xlator, value1_p); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  } -  int -__inode_ctx_get2 (inode_t *inode, xlator_t *xlator, uint64_t *value1, -                  uint64_t *value2) +__inode_ctx_get2(inode_t *inode, xlator_t *xlator, uint64_t *value1, +                 uint64_t *value2)  { -        int index = 0; -        int ret = -1; +    int index = 0; +    int ret = -1; -        if (!inode || !xlator || !inode->_ctx) -                goto out; +    if (!inode || !xlator || !inode->_ctx) +        goto out; -        index = xlator->xl_id; -        if (inode->_ctx[index].xl_key != xlator) -                goto out; +    index = xlator->xl_id; +    if (inode->_ctx[index].xl_key != xlator) +        goto out; -        if (inode->_ctx[index].value1) { -                if (value1) { -                        *value1 = inode->_ctx[index].value1; -                        ret = 0; -                } +    if (inode->_ctx[index].value1) { +        if (value1) { +            *value1 = inode->_ctx[index].value1; +            ret = 0;          } -        if (inode->_ctx[index].value2) { -                if (value2) { -                        *value2 = inode->_ctx[index].value2; -                        ret = 0; -                } +    } +    if (inode->_ctx[index].value2) { +        if (value2) { +            *value2 = inode->_ctx[index].value2; +            ret = 0;          } +    }  out: -        return ret; +    return ret;  } - -  int -__inode_ctx_get0 (inode_t *inode, xlator_t *xlator, uint64_t *value1) +__inode_ctx_get0(inode_t *inode, xlator_t *xlator, uint64_t *value1)  { -        uint64_t tmp_value = 0; -        int ret = 0; +    uint64_t tmp_value = 0; +    int ret = 0; -        ret =  __inode_ctx_get2 (inode, xlator, &tmp_value, NULL); -        if (!ret && value1) -                *value1 = tmp_value; +    ret = __inode_ctx_get2(inode, xlator, &tmp_value, NULL); +    if (!ret && value1) +        *value1 = tmp_value; -        return ret; +    return ret;  }  int -__inode_ctx_get1 (inode_t *inode, xlator_t *xlator, uint64_t *value2) +__inode_ctx_get1(inode_t *inode, xlator_t *xlator, uint64_t *value2)  { -        uint64_t tmp_value = 0; -        int ret = 0; +    uint64_t tmp_value = 0; +    int ret = 0; -        ret =  __inode_ctx_get2 (inode, xlator, NULL, &tmp_value); -        if (!ret && value2) -                *value2 = tmp_value; +    ret = __inode_ctx_get2(inode, xlator, NULL, &tmp_value); +    if (!ret && value2) +        *value2 = tmp_value; -        return ret; +    return ret;  } -  int -inode_ctx_get2 (inode_t *inode, xlator_t *xlator, uint64_t *value1, -                uint64_t *value2) +inode_ctx_get2(inode_t *inode, xlator_t *xlator, uint64_t *value1, +               uint64_t *value2)  { -        int ret = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_get2 (inode, xlator, value1, value2); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_get2(inode, xlator, value1, value2); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  int -inode_ctx_get1 (inode_t *inode, xlator_t *xlator, uint64_t *value2) +inode_ctx_get1(inode_t *inode, xlator_t *xlator, uint64_t *value2)  { -        int ret = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_get1 (inode, xlator, value2); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_get1(inode, xlator, value2); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  int -inode_ctx_get0 (inode_t *inode, xlator_t *xlator, uint64_t *value1) +inode_ctx_get0(inode_t *inode, xlator_t *xlator, uint64_t *value1)  { -        int ret = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                ret = __inode_ctx_get0 (inode, xlator, value1); -        } -        UNLOCK (&inode->lock); +    LOCK(&inode->lock); +    { +        ret = __inode_ctx_get0(inode, xlator, value1); +    } +    UNLOCK(&inode->lock); -        return ret; +    return ret;  } -  int -inode_ctx_del2 (inode_t *inode, xlator_t *xlator, uint64_t *value1, -                uint64_t *value2) +inode_ctx_del2(inode_t *inode, xlator_t *xlator, uint64_t *value1, +               uint64_t *value2)  { -        int index = 0; -        int ret = 0; +    int index = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                if (!inode->_ctx) -                        goto unlock; +    LOCK(&inode->lock); +    { +        if (!inode->_ctx) +            goto unlock; -                index = xlator->xl_id; -                if (inode->_ctx[index].xl_key != xlator) { -                        ret = -1; -                        goto unlock; -                } +        index = xlator->xl_id; +        if (inode->_ctx[index].xl_key != xlator) { +            ret = -1; +            goto unlock; +        } -                if (inode->_ctx[index].value1 && value1) -                        *value1 = inode->_ctx[index].value1; -                if (inode->_ctx[index].value2 && value2) -                        *value2 = inode->_ctx[index].value2; +        if (inode->_ctx[index].value1 && value1) +            *value1 = inode->_ctx[index].value1; +        if (inode->_ctx[index].value2 && value2) +            *value2 = inode->_ctx[index].value2; -                inode->_ctx[index].key    = 0; -                inode->_ctx[index].xl_key = NULL; -                inode->_ctx[index].value1 = 0; -                inode->_ctx[index].value2 = 0; -        } +        inode->_ctx[index].key = 0; +        inode->_ctx[index].xl_key = NULL; +        inode->_ctx[index].value1 = 0; +        inode->_ctx[index].value2 = 0; +    }  unlock: -        UNLOCK (&inode->lock); +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  /* function behavior: @@ -2215,348 +2166,344 @@ unlock:   - if both are set, both fields are reset.  */  static int -__inode_ctx_reset2 (inode_t *inode, xlator_t *xlator, uint64_t *value1, -                    uint64_t *value2) +__inode_ctx_reset2(inode_t *inode, xlator_t *xlator, uint64_t *value1, +                   uint64_t *value2)  { -        int index = 0; -        int ret = 0; +    int index = 0; +    int ret = 0; -        if (!inode || !xlator) -                return -1; +    if (!inode || !xlator) +        return -1; -        LOCK (&inode->lock); -        { -                index = xlator->xl_id; -                if (inode->_ctx[index].xl_key != xlator) { -                        ret = -1; -                        goto unlock; -                } +    LOCK(&inode->lock); +    { +        index = xlator->xl_id; +        if (inode->_ctx[index].xl_key != xlator) { +            ret = -1; +            goto unlock; +        } -                if (inode->_ctx[index].value1 && value1) { -                        *value1 = inode->_ctx[index].value1; -                        inode->_ctx[index].value1 = 0; -                } -                if (inode->_ctx[index].value2 && value2) { -                        *value2 = inode->_ctx[index].value2; -                        inode->_ctx[index].value2 = 0; -                } +        if (inode->_ctx[index].value1 && value1) { +            *value1 = inode->_ctx[index].value1; +            inode->_ctx[index].value1 = 0; +        } +        if (inode->_ctx[index].value2 && value2) { +            *value2 = inode->_ctx[index].value2; +            inode->_ctx[index].value2 = 0;          } +    }  unlock: -        UNLOCK (&inode->lock); +    UNLOCK(&inode->lock); -        return ret; +    return ret;  }  int -inode_ctx_reset2 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p, -                  uint64_t *value2_p) -{ -        uint64_t tmp_value1 = 0; -        uint64_t tmp_value2 = 0; -        int ret = 0; - -        ret =  __inode_ctx_reset2 (inode, xlator, &tmp_value1, &tmp_value2); -        if (!ret) { -                if (value1_p) -                        *value1_p = tmp_value1; -                if (value2_p) -                        *value2_p = tmp_value2; -        } -        return ret; +inode_ctx_reset2(inode_t *inode, xlator_t *xlator, uint64_t *value1_p, +                 uint64_t *value2_p) +{ +    uint64_t tmp_value1 = 0; +    uint64_t tmp_value2 = 0; +    int ret = 0; + +    ret = __inode_ctx_reset2(inode, xlator, &tmp_value1, &tmp_value2); +    if (!ret) { +        if (value1_p) +            *value1_p = tmp_value1; +        if (value2_p) +            *value2_p = tmp_value2; +    } +    return ret;  }  int -inode_ctx_reset1 (inode_t *inode, xlator_t *xlator, uint64_t *value2_p) +inode_ctx_reset1(inode_t *inode, xlator_t *xlator, uint64_t *value2_p)  { -        uint64_t tmp_value2 = 0; -        int ret = 0; +    uint64_t tmp_value2 = 0; +    int ret = 0; -        ret = __inode_ctx_reset2 (inode, xlator, NULL, &tmp_value2); +    ret = __inode_ctx_reset2(inode, xlator, NULL, &tmp_value2); -        if (!ret && value2_p) -                *value2_p = tmp_value2; - -        return ret; +    if (!ret && value2_p) +        *value2_p = tmp_value2; +    return ret;  }  int -inode_ctx_reset0 (inode_t *inode, xlator_t *xlator, uint64_t *value1_p) +inode_ctx_reset0(inode_t *inode, xlator_t *xlator, uint64_t *value1_p)  { -        uint64_t tmp_value1 = 0; -        int ret = 0; +    uint64_t tmp_value1 = 0; +    int ret = 0; -        ret = __inode_ctx_reset2 (inode, xlator, &tmp_value1, NULL); +    ret = __inode_ctx_reset2(inode, xlator, &tmp_value1, NULL); -        if (!ret && value1_p) -                *value1_p = tmp_value1; +    if (!ret && value1_p) +        *value1_p = tmp_value1; -        return ret; +    return ret;  }  int -inode_is_linked (inode_t *inode) +inode_is_linked(inode_t *inode)  { -        int            ret   = 0; -        inode_table_t *table = NULL; +    int ret = 0; +    inode_table_t *table = NULL; -        if (!inode) { -                gf_msg_callingfn (THIS->name, GF_LOG_WARNING, 0, -                                  LG_MSG_INODE_NOT_FOUND, "inode not found"); -                return 0; -        } +    if (!inode) { +        gf_msg_callingfn(THIS->name, GF_LOG_WARNING, 0, LG_MSG_INODE_NOT_FOUND, +                         "inode not found"); +        return 0; +    } -        table = inode->table; +    table = inode->table; -        pthread_mutex_lock (&table->lock); -        { -                ret = __is_inode_hashed (inode); -        } -        pthread_mutex_unlock (&table->lock); +    pthread_mutex_lock(&table->lock); +    { +        ret = __is_inode_hashed(inode); +    } +    pthread_mutex_unlock(&table->lock); -        return ret; +    return ret;  }  void -inode_dump (inode_t *inode, char *prefix) -{ -        int                ret       = -1; -        xlator_t          *xl        = NULL; -        int                i         = 0; -        fd_t              *fd        = NULL; -        struct _inode_ctx *inode_ctx = NULL; -        struct list_head   fd_list; -        int                ref       = 0; -        char               key[GF_DUMP_MAX_BUF_LEN]; - -        if (!inode) -                return; +inode_dump(inode_t *inode, char *prefix) +{ +    int ret = -1; +    xlator_t *xl = NULL; +    int i = 0; +    fd_t *fd = NULL; +    struct _inode_ctx *inode_ctx = NULL; +    struct list_head fd_list; +    int ref = 0; +    char key[GF_DUMP_MAX_BUF_LEN]; + +    if (!inode) +        return; -        INIT_LIST_HEAD (&fd_list); +    INIT_LIST_HEAD(&fd_list); -        ret = TRY_LOCK(&inode->lock); -        if (ret != 0) { -                return; -        } - -        { -                gf_proc_dump_write("gfid", "%s", uuid_utoa (inode->gfid)); -                gf_proc_dump_write("nlookup", "%ld", inode->nlookup); -                gf_proc_dump_write("fd-count", "%u", inode->fd_count); -                gf_proc_dump_write("active-fd-count", "%u", -                                   inode->active_fd_count); -                gf_proc_dump_write("ref", "%u", inode->ref); -                gf_proc_dump_write("ia_type", "%d", inode->ia_type); -                if (inode->_ctx) { -                        inode_ctx = GF_CALLOC (inode->table->ctxcount, -                                               sizeof (*inode_ctx), -                                               gf_common_mt_inode_ctx); -                        if (inode_ctx == NULL) { -                                goto unlock; -                        } - -                        for (i = 0; i < inode->table->ctxcount; -                             i++) { -                                inode_ctx[i] = inode->_ctx[i]; -                                xl = inode_ctx[i].xl_key; -                                ref = inode_ctx[i].ref; -                                if (ref != 0 && xl) { -                                        gf_proc_dump_build_key (key, -                                                                "ref_by_xl:", -                                                                "%s", -                                                                xl->name); -                                        gf_proc_dump_write (key, "%d", ref); -                                } -                        } +    ret = TRY_LOCK(&inode->lock); +    if (ret != 0) { +        return; +    } + +    { +        gf_proc_dump_write("gfid", "%s", uuid_utoa(inode->gfid)); +        gf_proc_dump_write("nlookup", "%ld", inode->nlookup); +        gf_proc_dump_write("fd-count", "%u", inode->fd_count); +        gf_proc_dump_write("active-fd-count", "%u", inode->active_fd_count); +        gf_proc_dump_write("ref", "%u", inode->ref); +        gf_proc_dump_write("ia_type", "%d", inode->ia_type); +        if (inode->_ctx) { +            inode_ctx = GF_CALLOC(inode->table->ctxcount, sizeof(*inode_ctx), +                                  gf_common_mt_inode_ctx); +            if (inode_ctx == NULL) { +                goto unlock; +            } + +            for (i = 0; i < inode->table->ctxcount; i++) { +                inode_ctx[i] = inode->_ctx[i]; +                xl = inode_ctx[i].xl_key; +                ref = inode_ctx[i].ref; +                if (ref != 0 && xl) { +                    gf_proc_dump_build_key(key, "ref_by_xl:", "%s", xl->name); +                    gf_proc_dump_write(key, "%d", ref);                  } +            } +        } -		if (dump_options.xl_options.dump_fdctx != _gf_true) -			goto unlock; - +        if (dump_options.xl_options.dump_fdctx != _gf_true) +            goto unlock; -                list_for_each_entry (fd, &inode->fd_list, inode_list) { -                        fd_ctx_dump (fd, prefix); -                } +        list_for_each_entry(fd, &inode->fd_list, inode_list) +        { +            fd_ctx_dump(fd, prefix);          } +    }  unlock: -        UNLOCK(&inode->lock); - -        if (inode_ctx && (dump_options.xl_options.dump_inodectx == _gf_true)) { -                for (i = 0; i < inode->table->ctxcount; i++) { -                        if (inode_ctx[i].xl_key) { -                                xl = (xlator_t *)(long)inode_ctx[i].xl_key; -                                if (xl->dumpops && xl->dumpops->inodectx) -                                        xl->dumpops->inodectx (xl, inode); -                        } -                } +    UNLOCK(&inode->lock); + +    if (inode_ctx && (dump_options.xl_options.dump_inodectx == _gf_true)) { +        for (i = 0; i < inode->table->ctxcount; i++) { +            if (inode_ctx[i].xl_key) { +                xl = (xlator_t *)(long)inode_ctx[i].xl_key; +                if (xl->dumpops && xl->dumpops->inodectx) +                    xl->dumpops->inodectx(xl, inode); +            }          } +    } -        GF_FREE (inode_ctx); +    GF_FREE(inode_ctx); -        return; +    return;  }  void -inode_table_dump (inode_table_t *itable, char *prefix) +inode_table_dump(inode_table_t *itable, char *prefix)  { +    char key[GF_DUMP_MAX_BUF_LEN]; +    int ret = 0; -        char    key[GF_DUMP_MAX_BUF_LEN]; -        int     ret = 0; - -        if (!itable) -                return; +    if (!itable) +        return; -        ret = pthread_mutex_trylock(&itable->lock); +    ret = pthread_mutex_trylock(&itable->lock); -        if (ret != 0) { -                return; -        } +    if (ret != 0) { +        return; +    } -        gf_proc_dump_build_key(key, prefix, "hashsize"); -        gf_proc_dump_write(key, "%d", itable->hashsize); -        gf_proc_dump_build_key(key, prefix, "name"); -        gf_proc_dump_write(key, "%s", itable->name); +    gf_proc_dump_build_key(key, prefix, "hashsize"); +    gf_proc_dump_write(key, "%d", itable->hashsize); +    gf_proc_dump_build_key(key, prefix, "name"); +    gf_proc_dump_write(key, "%s", itable->name); -        gf_proc_dump_build_key(key, prefix, "lru_limit"); -        gf_proc_dump_write(key, "%d", itable->lru_limit); -        gf_proc_dump_build_key(key, prefix, "active_size"); -        gf_proc_dump_write(key, "%d", itable->active_size); -        gf_proc_dump_build_key(key, prefix, "lru_size"); -        gf_proc_dump_write(key, "%d", itable->lru_size); -        gf_proc_dump_build_key(key, prefix, "purge_size"); -        gf_proc_dump_write(key, "%d", itable->purge_size); +    gf_proc_dump_build_key(key, prefix, "lru_limit"); +    gf_proc_dump_write(key, "%d", itable->lru_limit); +    gf_proc_dump_build_key(key, prefix, "active_size"); +    gf_proc_dump_write(key, "%d", itable->active_size); +    gf_proc_dump_build_key(key, prefix, "lru_size"); +    gf_proc_dump_write(key, "%d", itable->lru_size); +    gf_proc_dump_build_key(key, prefix, "purge_size"); +    gf_proc_dump_write(key, "%d", itable->purge_size); -        INODE_DUMP_LIST(&itable->active, key, prefix, "active"); -        INODE_DUMP_LIST(&itable->lru, key, prefix, "lru"); -        INODE_DUMP_LIST(&itable->purge, key, prefix, "purge"); +    INODE_DUMP_LIST(&itable->active, key, prefix, "active"); +    INODE_DUMP_LIST(&itable->lru, key, prefix, "lru"); +    INODE_DUMP_LIST(&itable->purge, key, prefix, "purge"); -        pthread_mutex_unlock(&itable->lock); +    pthread_mutex_unlock(&itable->lock);  }  void -inode_dump_to_dict (inode_t *inode, char *prefix, dict_t *dict) +inode_dump_to_dict(inode_t *inode, char *prefix, dict_t *dict)  { -        int             ret = -1; -        char            key[GF_DUMP_MAX_BUF_LEN] = {0,}; +    int ret = -1; +    char key[GF_DUMP_MAX_BUF_LEN] = { +        0, +    }; -        ret = TRY_LOCK (&inode->lock); -        if (ret) -                return; +    ret = TRY_LOCK(&inode->lock); +    if (ret) +        return; -        snprintf (key, sizeof (key), "%s.gfid", prefix); -        ret = dict_set_dynstr (dict, key, gf_strdup (uuid_utoa (inode->gfid))); -        if (ret) -                goto out; +    snprintf(key, sizeof(key), "%s.gfid", prefix); +    ret = dict_set_dynstr(dict, key, gf_strdup(uuid_utoa(inode->gfid))); +    if (ret) +        goto out; -        snprintf (key, sizeof (key), "%s.nlookup", prefix); -        ret = dict_set_uint64 (dict, key, inode->nlookup); -        if (ret) -                goto out; +    snprintf(key, sizeof(key), "%s.nlookup", prefix); +    ret = dict_set_uint64(dict, key, inode->nlookup); +    if (ret) +        goto out; -        snprintf (key, sizeof (key), "%s.ref", prefix); -        ret = dict_set_uint32 (dict, key, inode->ref); -        if (ret) -                goto out; +    snprintf(key, sizeof(key), "%s.ref", prefix); +    ret = dict_set_uint32(dict, key, inode->ref); +    if (ret) +        goto out; -        snprintf (key, sizeof (key), "%s.ia_type", prefix); -        ret = dict_set_int32 (dict, key, inode->ia_type); +    snprintf(key, sizeof(key), "%s.ia_type", prefix); +    ret = dict_set_int32(dict, key, inode->ia_type);  out: -        UNLOCK (&inode->lock); -        return; +    UNLOCK(&inode->lock); +    return;  }  void -inode_table_dump_to_dict (inode_table_t *itable, char *prefix, dict_t *dict) +inode_table_dump_to_dict(inode_table_t *itable, char *prefix, dict_t *dict)  { -        char            key[GF_DUMP_MAX_BUF_LEN] = {0,}; -        int             ret = 0; -        inode_t         *inode = NULL; -        int             count = 0; - -        ret = pthread_mutex_trylock (&itable->lock); -        if (ret) -                return; - -        snprintf (key, sizeof (key), "%s.itable.active_size", prefix); -        ret = dict_set_uint32 (dict, key, itable->active_size); -        if (ret) -                goto out; +    char key[GF_DUMP_MAX_BUF_LEN] = { +        0, +    }; +    int ret = 0; +    inode_t *inode = NULL; +    int count = 0; -        snprintf (key, sizeof (key), "%s.itable.lru_size", prefix); -        ret = dict_set_uint32 (dict, key, itable->lru_size); -        if (ret) -                goto out; - -        snprintf (key, sizeof (key), "%s.itable.purge_size", prefix); -        ret = dict_set_uint32 (dict, key, itable->purge_size); -        if (ret) -                goto out; - -        list_for_each_entry (inode, &itable->active, list) { -                snprintf (key, sizeof (key), "%s.itable.active%d", prefix, -                          count++); -                inode_dump_to_dict (inode, key, dict); -        } -        count = 0; +    ret = pthread_mutex_trylock(&itable->lock); +    if (ret) +        return; -        list_for_each_entry (inode, &itable->lru, list) { -                snprintf (key, sizeof (key), "%s.itable.lru%d", prefix, -                          count++); -                inode_dump_to_dict (inode, key, dict); -        } -        count = 0; - -        list_for_each_entry (inode, &itable->purge, list) { -                snprintf (key, sizeof (key), "%s.itable.purge%d", prefix, -                          count++); -                inode_dump_to_dict (inode, key, dict); -        } +    snprintf(key, sizeof(key), "%s.itable.active_size", prefix); +    ret = dict_set_uint32(dict, key, itable->active_size); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.itable.lru_size", prefix); +    ret = dict_set_uint32(dict, key, itable->lru_size); +    if (ret) +        goto out; + +    snprintf(key, sizeof(key), "%s.itable.purge_size", prefix); +    ret = dict_set_uint32(dict, key, itable->purge_size); +    if (ret) +        goto out; + +    list_for_each_entry(inode, &itable->active, list) +    { +        snprintf(key, sizeof(key), "%s.itable.active%d", prefix, count++); +        inode_dump_to_dict(inode, key, dict); +    } +    count = 0; + +    list_for_each_entry(inode, &itable->lru, list) +    { +        snprintf(key, sizeof(key), "%s.itable.lru%d", prefix, count++); +        inode_dump_to_dict(inode, key, dict); +    } +    count = 0; + +    list_for_each_entry(inode, &itable->purge, list) +    { +        snprintf(key, sizeof(key), "%s.itable.purge%d", prefix, count++); +        inode_dump_to_dict(inode, key, dict); +    }  out: -        pthread_mutex_unlock (&itable->lock); +    pthread_mutex_unlock(&itable->lock); -        return; +    return;  }  size_t -inode_ctx_size (inode_t *inode) +inode_ctx_size(inode_t *inode)  { -        int       i    = 0; -        size_t    size = 0; -        xlator_t *xl   = NULL, *old_THIS = NULL; +    int i = 0; +    size_t size = 0; +    xlator_t *xl = NULL, *old_THIS = NULL; -        if (!inode) -                goto out; +    if (!inode) +        goto out; -        LOCK (&inode->lock); -        { -                for (i = 0; i < inode->table->ctxcount; i++) { -                        if (!inode->_ctx[i].xl_key) -                                continue; - -                        xl = (xlator_t *)(long)inode->_ctx[i].xl_key; -                        old_THIS = THIS; -                        THIS = xl; - -                        /* If inode ref is taken when THIS is global xlator, -                         * the ctx xl_key is set, but the value is NULL. -                         * For global xlator the cbks can be NULL, hence check -                         * for the same */ -                        if (!xl->cbks) { -                                THIS = old_THIS; -                                continue; -                        } - -                        if (xl->cbks->ictxsize) -                                size += xl->cbks->ictxsize (xl, inode); - -                        THIS = old_THIS; -                } +    LOCK(&inode->lock); +    { +        for (i = 0; i < inode->table->ctxcount; i++) { +            if (!inode->_ctx[i].xl_key) +                continue; + +            xl = (xlator_t *)(long)inode->_ctx[i].xl_key; +            old_THIS = THIS; +            THIS = xl; + +            /* If inode ref is taken when THIS is global xlator, +             * the ctx xl_key is set, but the value is NULL. +             * For global xlator the cbks can be NULL, hence check +             * for the same */ +            if (!xl->cbks) { +                THIS = old_THIS; +                continue; +            } + +            if (xl->cbks->ictxsize) +                size += xl->cbks->ictxsize(xl, inode); + +            THIS = old_THIS;          } -        UNLOCK (&inode->lock); +    } +    UNLOCK(&inode->lock);  out: -        return size; +    return size;  }  /* * @@ -2566,23 +2513,24 @@ out:   * not possible(no hardlinks)   * */  void -inode_find_directory_name (inode_t *inode, const char **name) { -        dentry_t *dentry = NULL; +inode_find_directory_name(inode_t *inode, const char **name) +{ +    dentry_t *dentry = NULL; -        GF_VALIDATE_OR_GOTO ("inode", inode, out); -        GF_VALIDATE_OR_GOTO ("inode", name, out); +    GF_VALIDATE_OR_GOTO("inode", inode, out); +    GF_VALIDATE_OR_GOTO("inode", name, out); -        if (!IA_ISDIR (inode->ia_type)) -                return; +    if (!IA_ISDIR(inode->ia_type)) +        return; -        pthread_mutex_lock (&inode->table->lock); -        { -                dentry = __dentry_search_arbit (inode); -                if (dentry) { -                        *name = dentry->name; -                } +    pthread_mutex_lock(&inode->table->lock); +    { +        dentry = __dentry_search_arbit(inode); +        if (dentry) { +            *name = dentry->name;          } -        pthread_mutex_unlock (&inode->table->lock); +    } +    pthread_mutex_unlock(&inode->table->lock);  out: -        return; +    return;  }  | 
