diff options
Diffstat (limited to 'libglusterfs/src/iobuf.h')
| -rw-r--r-- | libglusterfs/src/iobuf.h | 42 | 
1 files changed, 32 insertions, 10 deletions
diff --git a/libglusterfs/src/iobuf.h b/libglusterfs/src/iobuf.h index fc8ff623ad4..6a5b460dcea 100644 --- a/libglusterfs/src/iobuf.h +++ b/libglusterfs/src/iobuf.h @@ -26,6 +26,8 @@  #include <sys/mman.h>  #include <sys/uio.h> +#define GF_VARIABLE_IOBUF_COUNT 32 +  /* Lets try to define the new anonymous mapping   * flag, in case the system is still using the   * now deprecated MAP_ANON flag. @@ -75,6 +77,12 @@ struct iobuf_arena {                          struct iobuf_arena *prev;                  };          }; + +        size_t              page_size;  /* size of all iobufs in this arena */ +        size_t              arena_size; /* this is equal to +                                           (iobuf_pool->arena_size / page_size) +                                           * page_size */ +          struct iobuf_pool  *iobuf_pool;          void               *mem_base; @@ -91,17 +99,29 @@ struct iobuf_arena {  struct iobuf_pool {          pthread_mutex_t     mutex; -        size_t              page_size;  /* size of all iobufs in this pool */ -        size_t              arena_size; /* size of memory region in arena */ +        size_t              arena_size; /* size of memory region in +                                           arena */ +        size_t              default_page_size; /* default size of iobuf */          int                 arena_cnt; -        struct iobuf_arena  arenas;     /* head node arena -                                           (unused by itself) */ -        struct iobuf_arena  filled;     /* arenas without  free iobufs */ -        struct iobuf_arena  purge;      /* arenas which can be purged */ -}; - +        struct list_head    arenas[GF_VARIABLE_IOBUF_COUNT]; +        /* array of arenas. Each element of +           the array is a list of arenas +           holding iobufs of particular +           page_size +        */ +        struct list_head    filled[GF_VARIABLE_IOBUF_COUNT]; +        /* +          array of arenas without free iobufs +        */ + +        struct list_head    purge[GF_VARIABLE_IOBUF_COUNT]; +        /* +          array of of arenas which can be +          purged +        */ +};  struct iobuf_pool *iobuf_pool_new (size_t arena_size, size_t page_size); @@ -113,8 +133,8 @@ void iobuf_pool_destroy (struct iobuf_pool *iobuf_pool);  void iobuf_to_iovec(struct iobuf *iob, struct iovec *iov);  #define iobuf_ptr(iob) ((iob)->ptr) -#define iobpool_pagesize(iobpool) ((iobpool)->page_size) -#define iobuf_pagesize(iob) (iobpool_pagesize((iob)->iobuf_arena->iobuf_pool)) +#define iobpool_default_pagesize(iobpool) ((iobpool)->default_page_size) +#define iobuf_pagesize(iob) (iob->iobuf_arena->page_size)  struct iobref { @@ -134,4 +154,6 @@ size_t iobuf_size (struct iobuf *iobuf);  size_t iobref_size (struct iobref *iobref);  void   iobuf_stats_dump (struct iobuf_pool *iobuf_pool); +struct iobuf * +iobuf_get2 (struct iobuf_pool *iobuf_pool, size_t page_size);  #endif /* !_IOBUF_H_ */  | 
