DEBUG: pools: make pool_check_pattern() take a pointer to the pool

This will be useful to report detailed bug traces.
This commit is contained in:
Willy Tarreau 2023-09-11 11:26:12 +02:00
parent e92e96b00f
commit f6bee5a50b
2 changed files with 5 additions and 4 deletions

View File

@ -132,7 +132,7 @@ void pool_evict_from_local_cache(struct pool_head *pool, int full);
void pool_evict_from_local_caches(void); void pool_evict_from_local_caches(void);
void pool_put_to_cache(struct pool_head *pool, void *ptr, const void *caller); void pool_put_to_cache(struct pool_head *pool, void *ptr, const void *caller);
void pool_fill_pattern(struct pool_cache_head *pch, struct pool_cache_item *item, uint size); void pool_fill_pattern(struct pool_cache_head *pch, struct pool_cache_item *item, uint size);
void pool_check_pattern(struct pool_cache_head *pch, struct pool_cache_item *item, uint size, const void *caller); void pool_check_pattern(struct pool_cache_head *pch, struct pool_head *pool, struct pool_cache_item *item, const void *caller);
void pool_refill_local_from_shared(struct pool_head *pool, struct pool_cache_head *pch); void pool_refill_local_from_shared(struct pool_head *pool, struct pool_cache_head *pch);
void pool_put_to_shared_cache(struct pool_head *pool, struct pool_item *item); void pool_put_to_shared_cache(struct pool_head *pool, struct pool_item *item);
@ -252,7 +252,7 @@ static inline void *pool_get_from_cache(struct pool_head *pool, const void *call
item = LIST_PREV(&ph->list, typeof(item), by_pool); item = LIST_PREV(&ph->list, typeof(item), by_pool);
if (pool_debugging & POOL_DBG_INTEGRITY) if (pool_debugging & POOL_DBG_INTEGRITY)
pool_check_pattern(ph, item, pool->size, caller); pool_check_pattern(ph, pool, item, caller);
} }
BUG_ON(&item->by_pool == &ph->list); BUG_ON(&item->by_pool == &ph->list);

View File

@ -481,9 +481,10 @@ void pool_fill_pattern(struct pool_cache_head *pch, struct pool_cache_item *item
* must have been previously initialized using pool_fill_pattern(). If any * must have been previously initialized using pool_fill_pattern(). If any
* corruption is detected, the function provokes an immediate crash. * corruption is detected, the function provokes an immediate crash.
*/ */
void pool_check_pattern(struct pool_cache_head *pch, struct pool_cache_item *item, uint size, const void *caller) void pool_check_pattern(struct pool_cache_head *pch, struct pool_head *pool, struct pool_cache_item *item, const void *caller)
{ {
const ulong *ptr = (const ulong *)item; const ulong *ptr = (const ulong *)item;
uint size = pool->size;
uint ofs; uint ofs;
ulong u; ulong u;
@ -526,7 +527,7 @@ static void pool_evict_last_items(struct pool_head *pool, struct pool_cache_head
item = LIST_PREV(&ph->list, typeof(item), by_pool); item = LIST_PREV(&ph->list, typeof(item), by_pool);
BUG_ON(&item->by_pool == &ph->list); BUG_ON(&item->by_pool == &ph->list);
if (unlikely(pool_debugging & POOL_DBG_INTEGRITY)) if (unlikely(pool_debugging & POOL_DBG_INTEGRITY))
pool_check_pattern(ph, item, pool->size, caller); pool_check_pattern(ph, pool, item, caller);
LIST_DELETE(&item->by_pool); LIST_DELETE(&item->by_pool);
LIST_DELETE(&item->by_lru); LIST_DELETE(&item->by_lru);