From: Darrick J. Wong <djwong@xxxxxxxxxx> Allow cache_walk callers to pass a pointer to the callback function. Signed-off-by: "Darrick J. Wong" <djwong@xxxxxxxxxx> --- lib/support/cache.h | 4 ++-- lib/support/cache.c | 10 ++++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/lib/support/cache.h b/lib/support/cache.h index 0168fdca027896..b18b6d3325e9ad 100644 --- a/lib/support/cache.h +++ b/lib/support/cache.h @@ -56,7 +56,7 @@ struct cache_node; typedef void *cache_key_t; -typedef void (*cache_walk_t)(struct cache *c, struct cache_node *cn); +typedef void (*cache_walk_t)(struct cache *c, struct cache_node *cn, void *d); typedef struct cache_node * (*cache_node_alloc_t)(struct cache *c, cache_key_t k); typedef int (*cache_node_flush_t)(struct cache *c, struct cache_node *cn); typedef void (*cache_node_relse_t)(struct cache *c, struct cache_node *cn); @@ -130,7 +130,7 @@ static inline bool cache_initialized(const struct cache *cache) int cache_init(int flags, unsigned int size, const struct cache_operations *ops, struct cache *cache); void cache_destroy(struct cache *cache); -void cache_walk(struct cache *, cache_walk_t); +void cache_walk(struct cache *cache, cache_walk_t fn, void *data); void cache_purge(struct cache *); void cache_flush(struct cache *); diff --git a/lib/support/cache.c b/lib/support/cache.c index 2e2e36ccc3ef78..606acd5453cf10 100644 --- a/lib/support/cache.c +++ b/lib/support/cache.c @@ -101,7 +101,8 @@ cache_expand( void cache_walk( struct cache *cache, - cache_walk_t visit) + cache_walk_t visit, + void *data) { struct cache_hash *hash; struct cache_node *pos; @@ -111,7 +112,7 @@ cache_walk( hash = &cache->c_hash[i]; pthread_mutex_lock(&hash->ch_mutex); list_for_each_entry(pos, &hash->ch_list, cn_hash) - visit(cache, pos); + visit(cache, pos, data); pthread_mutex_unlock(&hash->ch_mutex); } } @@ -126,7 +127,8 @@ cache_walk( static void cache_zero_check( struct cache *cache, - struct cache_node *node) + struct cache_node *node, + void *data) { if (node->cn_count > 0) { fprintf(stderr, "%s: refcount is %u, not zero (node=%p)\n", @@ -134,7 +136,7 @@ cache_zero_check( cache_abort(); } } -#define cache_destroy_check(c) cache_walk((c), cache_zero_check) +#define cache_destroy_check(c) cache_walk((c), cache_zero_check, NULL) #else #define cache_destroy_check(c) do { } while (0) #endif