move the internal accounting for a page being removed closer to removing
it and before freeing it instead of after. also, rmpage updates
curpage, so we don't need to do that twice.
Index: subr_pool.c
===================================================================
RCS file: /cvs/src/sys/kern/subr_pool.c,v
retrieving revision 1.106
diff -u -p -r1.106 subr_pool.c
--- subr_pool.c 5 Jul 2011 20:00:18 -0000 1.106
+++ subr_pool.c 5 Jul 2011 20:01:48 -0000
@@ -226,6 +226,10 @@ pr_rmpage(struct pool *pp, struct pool_i
LIST_REMOVE(ph, ph_pagelist);
if ((pp->pr_roflags & PR_PHINPAGE) == 0)
RB_REMOVE(phtree, &pp->pr_phtree, ph);
+ pp->pr_npages--;
+ pp->pr_npagefree++;
+ pool_update_curpage(pp);
+
if (pq) {
LIST_INSERT_HEAD(pq, ph, ph_pagelist);
} else {
@@ -233,10 +237,6 @@ pr_rmpage(struct pool *pp, struct pool_i
if ((pp->pr_roflags & PR_PHINPAGE) == 0)
pool_put(&phpool, ph);
}
- pp->pr_npages--;
- pp->pr_npagefree++;
-
- pool_update_curpage(pp);
}
/*
@@ -804,8 +804,8 @@ pool_do_put(struct pool *pp, void *v)
} else {
LIST_REMOVE(ph, ph_pagelist);
LIST_INSERT_HEAD(&pp->pr_emptypages, ph, ph_pagelist);
+ pool_update_curpage(pp);
}
- pool_update_curpage(pp);
}
/*