diff options
Diffstat (limited to 'xlators/debug/io-stats/src/io-stats.c')
-rw-r--r-- | xlators/debug/io-stats/src/io-stats.c | 29 |
1 files changed, 12 insertions, 17 deletions
diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index c0cd0e2477b..4864c67a101 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -74,7 +74,7 @@ struct ios_stat { char *filename; gf_atomic_t counters[IOS_STATS_TYPE_MAX]; struct ios_stat_lat thru_counters [IOS_STATS_THRU_MAX]; - int refcnt; + gf_atomic_t refcnt; }; struct ios_stat_list { @@ -333,13 +333,10 @@ ios_fd_ctx_set (fd_t *fd, xlator_t *this, struct ios_fd *iosfd) static int ios_stat_ref (struct ios_stat *iosstat) { - LOCK (&iosstat->lock); - { - iosstat->refcnt++; - } - UNLOCK (&iosstat->lock); + uint64_t refcnt = 0; + refcnt = GF_ATOMIC_INC (iosstat->refcnt); - return iosstat->refcnt; + return refcnt; } @@ -347,18 +344,16 @@ static int ios_stat_unref (struct ios_stat *iosstat) { int cleanup = 0; - LOCK (&iosstat->lock); - { - iosstat->refcnt--; - if (iosstat->refcnt == 0) { - if (iosstat->filename) { - GF_FREE (iosstat->filename); - iosstat->filename = NULL; - } - cleanup = 1; + uint64_t refcnt = 0; + + refcnt = GF_ATOMIC_DEC (iosstat->refcnt); + if (refcnt == 0) { + if (iosstat->filename) { + GF_FREE (iosstat->filename); + iosstat->filename = NULL; } + cleanup = 1; } - UNLOCK (&iosstat->lock); if (cleanup) { LOCK_DESTROY (&iosstat->lock); |