diff options
Diffstat (limited to 'libglusterfs/src/inode.c')
| -rw-r--r-- | libglusterfs/src/inode.c | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index c62d7ca9e..90a84f955 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -1109,20 +1109,28 @@ __inode_ctx_put (inode_t *inode, xlator_t *xlator, uint64_t value)  {          int ret = 0;          int index = 0; +        int put_idx = -1;          for (index = 0; index < xlator->ctx->xl_count; index++) { -                if (!inode->_ctx[index].key ||  -                    (inode->_ctx[index].key == (uint64_t)(long)xlator)) +                if (!inode->_ctx[index].key) { +                        if (put_idx == -1) +                                put_idx = index; +                        /* dont break, to check if key already exists +                           further on */ +                } +                if (inode->_ctx[index].key == (uint64_t)(long) xlator) { +                        put_idx = index;                          break; +                }          } -        if (index == xlator->ctx->xl_count) { +        if (put_idx == -1) {                  ret = -1;                  goto out;;          } -        inode->_ctx[index].key   = (uint64_t)(long) xlator; -        inode->_ctx[index].value = value; +        inode->_ctx[put_idx].key   = (uint64_t)(long) xlator; +        inode->_ctx[put_idx].value = value;  out:          return ret;  }  | 
