diff options
Diffstat (limited to 'libglusterfs/src/mem-pool.h')
-rw-r--r-- | libglusterfs/src/mem-pool.h | 30 |
1 files changed, 19 insertions, 11 deletions
diff --git a/libglusterfs/src/mem-pool.h b/libglusterfs/src/mem-pool.h index 81fb579a0ab..5115cef9f93 100644 --- a/libglusterfs/src/mem-pool.h +++ b/libglusterfs/src/mem-pool.h @@ -36,11 +36,6 @@ #define GF_MEM_TRAILER_MAGIC 0xBAADF00D #define GF_MEM_INVALID_MAGIC 0xDEADC0DE -struct mem_acct { - uint32_t num_types; - struct mem_acct_rec *rec; -}; - struct mem_acct_rec { const char *typestr; size_t size; @@ -51,12 +46,25 @@ struct mem_acct_rec { gf_lock_t lock; }; +struct mem_acct { + uint32_t num_types; + /* + * The lock is only used on ancient platforms (e.g. RHEL5) to keep + * refcnt increment/decrement atomic. We could even make its existence + * conditional on the right set of version/feature checks, but it's so + * lightweight that it's not worth the obfuscation. + */ + gf_lock_t lock; + unsigned int refcnt; + struct mem_acct_rec rec[0]; +}; + struct mem_header { - uint32_t type; - size_t size; - void *xlator; - uint32_t magic; - int padding[8]; + uint32_t type; + size_t size; + struct mem_acct *mem_acct; + uint32_t magic; + int padding[8]; }; #define GF_MEM_HEADER_SIZE (sizeof (struct mem_header)) @@ -64,7 +72,7 @@ struct mem_header { #ifdef DEBUG struct mem_invalid { uint32_t magic; - void *xlator; + void *mem_acct; uint32_t type; size_t size; void *baseaddr; |