cvs commit: src/sys/kern kern_mbuf.c src/sys/sys mbuf.h
src/sys/vm uma.h uma_core.c
mohan_srinivasan at yahoo.com
Thu Jan 25 18:56:11 UTC 2007
Sorry. Lost power at home earlier this morning and was operating on very low
laptop battery power (and stealing network bandwidth from my neighbor over his
unsecured wireless network :)), so sent you a brief reply earlier.
We have this bit of logic in uma_zfree_arg()
/* See uma.h */
uma_zfree_arg(uma_zone_t zone, void *item, void *udata)
* The race here is acceptable. If we miss it we'll just have to wait
* a little longer for the limits to be reset.
if (keg->uk_flags & UMA_ZFLAG_FULL)
uma_zfree_internal(zone, item, udata, SKIP_DTOR, ZFREE_STATFREE);
And uma_zfree_internal() frees the object back to the slab and wakes up
all blocked processes (one of which will proceed) and the others will
reset ZFLAG_FULL and block. But as objects get freed, they should all
get freed to the slab as long as ZFLAG_FULL is set, and blocked procs
> P.S. Let me do a small style nit-pick. :) All the UMA public functions are
> preceeded with "uma_", so it will be more nice to create a public uma_zone_drain(),
> that just calls internal zone_drain(). Like uma_print_stats() or uma_zdestroy()
I'll do this.
More information about the cvs-src