diff options
Diffstat (limited to 'xlators/cluster/dht/src/dht-layout.c')
| -rw-r--r-- | xlators/cluster/dht/src/dht-layout.c | 43 | 
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;  }  | 
