diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/inode.c | 84 |
1 files changed, 54 insertions, 30 deletions
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c index 3664dee74..1b028ef30 100644 --- a/libglusterfs/src/inode.c +++ b/libglusterfs/src/inode.c @@ -1108,45 +1108,61 @@ int inode_ctx_put (inode_t *inode, xlator_t *xlator, uint64_t value) { int index = 0; + int ret = 0; if (!inode || !xlator) return -1; - for (index = 0; index < xlator->ctx->xl_count; index++) { - if (!inode->_ctx[index].key || - (inode->_ctx[index].key == (uint64_t)(long)xlator)) - break; - } + LOCK (&inode->lock); + { + for (index = 0; index < xlator->ctx->xl_count; index++) { + if (!inode->_ctx[index].key || + (inode->_ctx[index].key == (uint64_t)(long)xlator)) + break; + } - if (index == xlator->ctx->xl_count) - return -1; + if (index == xlator->ctx->xl_count) { + ret = -1; + goto unlock; + } - inode->_ctx[index].key = (uint64_t)(long) xlator; - inode->_ctx[index].value = value; + inode->_ctx[index].key = (uint64_t)(long) xlator; + inode->_ctx[index].value = value; + } +unlock: + UNLOCK (&inode->lock); - return 0; + return ret; } int inode_ctx_get (inode_t *inode, xlator_t *xlator, uint64_t *value) { int index = 0; + int ret = 0; if (!inode || !xlator) return -1; - for (index = 0; index < xlator->ctx->xl_count; index++) { - if (inode->_ctx[index].key == (uint64_t)(long)xlator) - break; - } + LOCK (&inode->lock); + { + for (index = 0; index < xlator->ctx->xl_count; index++) { + if (inode->_ctx[index].key == (uint64_t)(long)xlator) + break; + } - if (index == xlator->ctx->xl_count) - return -1; + if (index == xlator->ctx->xl_count) { + ret = -1; + goto unlock; + } - if (value) - *value = inode->_ctx[index].value; + if (value) + *value = inode->_ctx[index].value; + } +unlock: + UNLOCK (&inode->lock); - return 0; + return ret; } @@ -1154,23 +1170,31 @@ int inode_ctx_del (inode_t *inode, xlator_t *xlator, uint64_t *value) { int index = 0; + int ret = 0; if (!inode || !xlator) return -1; - for (index = 0; index < xlator->ctx->xl_count; index++) { - if (inode->_ctx[index].key == (uint64_t)(long)xlator) - break; - } + LOCK (&inode->lock); + { + for (index = 0; index < xlator->ctx->xl_count; index++) { + if (inode->_ctx[index].key == (uint64_t)(long)xlator) + break; + } - if (index == xlator->ctx->xl_count) - return -1; + if (index == xlator->ctx->xl_count) { + ret = -1; + goto unlock; + } - if (value) - *value = inode->_ctx[index].value; + if (value) + *value = inode->_ctx[index].value; - inode->_ctx[index].key = 0; - inode->_ctx[index].value = 0; + inode->_ctx[index].key = 0; + inode->_ctx[index].value = 0; + } +unlock: + UNLOCK (&inode->lock); - return 0; + return ret; } |