| version 1.102, 2005/10/02 17:29:31 |
version 1.103, 2005/10/15 21:22:46 |
| Line 1717 pool_print1(struct pool *pp, const char |
|
| Line 1717 pool_print1(struct pool *pp, const char |
|
| } |
} |
| |
|
| LIST_FOREACH(pc, &pp->pr_cachelist, pc_poollist) { |
LIST_FOREACH(pc, &pp->pr_cachelist, pc_poollist) { |
| |
(*pr)("\tcache %p\n", pc); |
| (*pr)("\t hits %lu misses %lu ngroups %lu nitems %lu\n", |
(*pr)("\t hits %lu misses %lu ngroups %lu nitems %lu\n", |
| pc->pc_hits, pc->pc_misses, pc->pc_ngroups, pc->pc_nitems); |
pc->pc_hits, pc->pc_misses, pc->pc_ngroups, pc->pc_nitems); |
| (*pr)("\t full groups:\n"); |
(*pr)("\t full groups:\n"); |
| LIST_FOREACH(pcg, &pc->pc_fullgroups, pcg_list) |
LIST_FOREACH(pcg, &pc->pc_fullgroups, pcg_list) { |
| PR_GROUPLIST(pcg); |
PR_GROUPLIST(pcg); |
| |
} |
| (*pr)("\t partial groups:\n"); |
(*pr)("\t partial groups:\n"); |
| LIST_FOREACH(pcg, &pc->pc_partgroups, pcg_list) |
LIST_FOREACH(pcg, &pc->pc_partgroups, pcg_list) { |
| PR_GROUPLIST(pcg); |
PR_GROUPLIST(pcg); |
| |
} |
| (*pr)("\t empty groups:\n"); |
(*pr)("\t empty groups:\n"); |
| LIST_FOREACH(pcg, &pc->pc_emptygroups, pcg_list) |
LIST_FOREACH(pcg, &pc->pc_emptygroups, pcg_list) { |
| PR_GROUPLIST(pcg); |
PR_GROUPLIST(pcg); |
| |
} |
| } |
} |
| #undef PR_GROUPLIST |
#undef PR_GROUPLIST |
| |
|
| Line 2069 pool_do_cache_invalidate(struct pool_cac |
|
| Line 2073 pool_do_cache_invalidate(struct pool_cac |
|
| { |
{ |
| struct pool_cache_group *pcg, *npcg; |
struct pool_cache_group *pcg, *npcg; |
| void *object; |
void *object; |
| boolean_t firstpass = TRUE; |
|
| |
|
| LOCK_ASSERT(simple_lock_held(&pc->pc_slock)); |
LOCK_ASSERT(simple_lock_held(&pc->pc_slock)); |
| LOCK_ASSERT(simple_lock_held(&pc->pc_pool->pr_slock)); |
LOCK_ASSERT(simple_lock_held(&pc->pc_pool->pr_slock)); |
| |
|
| for (pcg = LIST_FIRST(&pc->pc_partgroups); pcg != NULL; |
for (pcg = LIST_FIRST(&pc->pc_fullgroups); pcg != NULL; pcg = npcg) { |
| pcg = npcg) { |
|
| |
loop: |
| npcg = LIST_NEXT(pcg, pcg_list); |
npcg = LIST_NEXT(pcg, pcg_list); |
| if (npcg == NULL && firstpass) { |
|
| npcg = LIST_FIRST(&pc->pc_fullgroups); |
|
| firstpass = FALSE; |
|
| } |
|
| while (pcg->pcg_avail != 0) { |
while (pcg->pcg_avail != 0) { |
| pc->pc_nitems--; |
pc->pc_nitems--; |
| object = pcg_get(pcg, NULL); |
object = pcg_get(pcg, NULL); |
| Line 2088 pool_do_cache_invalidate(struct pool_cac |
|
| Line 2088 pool_do_cache_invalidate(struct pool_cac |
|
| (*pc->pc_dtor)(pc->pc_arg, object); |
(*pc->pc_dtor)(pc->pc_arg, object); |
| pool_do_put(pc->pc_pool, object, pq); |
pool_do_put(pc->pc_pool, object, pq); |
| } |
} |
| |
pc->pc_ngroups--; |
| LIST_REMOVE(pcg, pcg_list); |
LIST_REMOVE(pcg, pcg_list); |
| LIST_INSERT_HEAD(pcgl, pcg, pcg_list); |
LIST_INSERT_HEAD(pcgl, pcg, pcg_list); |
| } |
} |
| |
pcg = LIST_FIRST(&pc->pc_partgroups); |
| |
if (pcg != NULL) { |
| |
goto loop; |
| |
} |
| |
|
| |
KASSERT(LIST_EMPTY(&pc->pc_partgroups)); |
| |
KASSERT(LIST_EMPTY(&pc->pc_fullgroups)); |
| |
KASSERT(pc->pc_nitems == 0); |
| } |
} |
| |
|
| /* |
/* |