diff options
| author | Niels de Vos <ndevos@redhat.com> | 2017-08-29 00:16:22 +0200 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-08-29 12:37:40 +0000 | 
| commit | ea8c9af0b4a91ef927bbeee9afdfa7d1cea6369f (patch) | |
| tree | 7f336db98172f277dbefcd929a8a3948ade86e82 /libglusterfs/src/mem-pool.h | |
| parent | 83990996736c72f3131f66df35ea7bf2b3d3b5fa (diff) | |
mem-pool: track glusterfs_ctx_t in struct mem_pool
In order to generate statedumps per glusterfs_ctx_t, it is needed to
place all the memory pools in a structure that the context can reach.
The 'struct mem_pool' has been extended with a 'list_head owner' that is
linked with the glusterfs_ctx_t->mempool_list.
All callers of mem_pool_new() have been updated to pass the current
glusterfs_ctx_t along. This context is needed to add the new memory pool
to the list and for grabbing the ctx->lock while updating the
glusterfs_ctx_t->mempool_list.
Updates: #307
Change-Id: Ia9384424d8d1630ef3efc9d5d523bf739c356c6e
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: https://review.gluster.org/18075
Smoke: Gluster Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Jeff Darcy <jeff@pl.atyp.us>
Diffstat (limited to 'libglusterfs/src/mem-pool.h')
| -rw-r--r-- | libglusterfs/src/mem-pool.h | 16 | 
1 files changed, 13 insertions, 3 deletions
diff --git a/libglusterfs/src/mem-pool.h b/libglusterfs/src/mem-pool.h index cc7df0b77c8..ecf2abe9245 100644 --- a/libglusterfs/src/mem-pool.h +++ b/libglusterfs/src/mem-pool.h @@ -16,6 +16,7 @@  #include "atomic.h"  #include "logging.h"  #include "mem-types.h" +#include "glusterfs.h" /* for glusterfs_ctx_t */  #include <stdlib.h>  #include <inttypes.h>  #include <string.h> @@ -206,11 +207,15 @@ out:  /* kind of 'header' for the actual mem_pool_shared structure, this might make   * it possible to dump some more details in a statedump */  struct mem_pool { +        /* object size, without pooled_obj_hdr_t */          unsigned long           sizeof_type;          unsigned long           count;          char                    *name; -        struct mem_pool_shared  *pool; +        struct list_head        owner;  /* glusterfs_ctx_t->mempool_list */ +        glusterfs_ctx_t         *ctx;   /* take ctx->lock when updating owner */ + +        struct mem_pool_shared  *pool;  /* the initial pool that was returned */  };  typedef struct pooled_obj_hdr { @@ -275,9 +280,14 @@ void mem_pools_init_late (void);   /* start the pool_sweeper thread */  void mem_pools_fini (void);        /* cleanup memory pools */  struct mem_pool * -mem_pool_new_fn (unsigned long sizeof_type, unsigned long count, char *name); +mem_pool_new_fn (glusterfs_ctx_t *ctx, unsigned long sizeof_type, unsigned long +                 count, char *name); + +#define mem_pool_new(type,count) \ +        mem_pool_new_fn (THIS->ctx, sizeof(type), count, #type) -#define mem_pool_new(type,count) mem_pool_new_fn (sizeof(type), count, #type) +#define mem_pool_new_ctx(ctx,type,count) \ +        mem_pool_new_fn (ctx, sizeof(type), count, #type)  void mem_put (void *ptr);  void *mem_get (struct mem_pool *pool);  | 
