From ea8c9af0b4a91ef927bbeee9afdfa7d1cea6369f Mon Sep 17 00:00:00 2001 From: Niels de Vos Date: Tue, 29 Aug 2017 00:16:22 +0200 Subject: 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 Reviewed-on: https://review.gluster.org/18075 Smoke: Gluster Build System CentOS-regression: Gluster Build System Reviewed-by: Jeff Darcy --- libglusterfs/src/mem-pool.h | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'libglusterfs/src/mem-pool.h') 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 #include #include @@ -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); -- cgit