summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/dht/src/dht-layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster/dht/src/dht-layout.c')
-rw-r--r--xlators/cluster/dht/src/dht-layout.c43
1 files changed, 10 insertions, 33 deletions
diff --git a/xlators/cluster/dht/src/dht-layout.c b/xlators/cluster/dht/src/dht-layout.c
index 419ce329a1d..97b98e01451 100644
--- a/xlators/cluster/dht/src/dht-layout.c
+++ b/xlators/cluster/dht/src/dht-layout.c
@@ -48,12 +48,12 @@ dht_layout_new (xlator_t *this, int cnt)
layout->gen = conf->gen;
}
- layout->ref = 1;
+ GF_ATOMIC_INIT (layout->ref, 1);
ENSURE(NULL != layout);
ENSURE(layout->type == DHT_HASH_TYPE_DM);
ENSURE(layout->cnt == cnt);
- ENSURE(layout->ref == 1);
+ ENSURE(GF_ATOMIC_GET (layout->ref) == 1);
out:
return layout;
}
@@ -62,24 +62,13 @@ out:
dht_layout_t *
dht_layout_get (xlator_t *this, inode_t *inode)
{
- dht_conf_t *conf = NULL;
dht_layout_t *layout = NULL;
int ret = 0;
- conf = this->private;
- if (!conf)
- goto out;
-
- LOCK (&conf->layout_lock);
- {
- ret = dht_inode_ctx_layout_get (inode, this, &layout);
- if ((!ret) && layout) {
- layout->ref++;
- }
+ ret = dht_inode_ctx_layout_get (inode, this, &layout);
+ if ((!ret) && layout) {
+ GF_ATOMIC_INC (layout->ref);
}
- UNLOCK (&conf->layout_lock);
-
-out:
return layout;
}
@@ -100,7 +89,7 @@ dht_layout_set (xlator_t *this, inode_t *inode, dht_layout_t *layout)
{
oldret = dht_inode_ctx_layout_get (inode, this, &old_layout);
if (layout)
- layout->ref++;
+ GF_ATOMIC_INC (layout->ref);
ret = dht_inode_ctx_layout_set (inode, this, layout);
}
UNLOCK (&conf->layout_lock);
@@ -108,6 +97,8 @@ dht_layout_set (xlator_t *this, inode_t *inode, dht_layout_t *layout)
if (!oldret) {
dht_layout_unref (this, old_layout);
}
+ if (ret)
+ GF_ATOMIC_DEC (layout->ref);
out:
return ret;
@@ -117,19 +108,12 @@ out:
void
dht_layout_unref (xlator_t *this, dht_layout_t *layout)
{
- dht_conf_t *conf = NULL;
int ref = 0;
if (!layout || layout->preset || !this->private)
return;
- conf = this->private;
-
- LOCK (&conf->layout_lock);
- {
- ref = --layout->ref;
- }
- UNLOCK (&conf->layout_lock);
+ ref = GF_ATOMIC_DEC (layout->ref);
if (!ref)
GF_FREE (layout);
@@ -139,17 +123,10 @@ dht_layout_unref (xlator_t *this, dht_layout_t *layout)
dht_layout_t *
dht_layout_ref (xlator_t *this, dht_layout_t *layout)
{
- dht_conf_t *conf = NULL;
-
if (layout->preset || !this->private)
return layout;
- conf = this->private;
- LOCK (&conf->layout_lock);
- {
- layout->ref++;
- }
- UNLOCK (&conf->layout_lock);
+ GF_ATOMIC_INC (layout->ref);
return layout;
}