cvs commit: src/sys/kern kern_mbuf.c src/sys/sys mbuf.h src/sys/vm uma.h uma_core.c

Mohan Srinivasan mohan_srinivasan at yahoo.com
Thu Jan 25 18:56:11 UTC 2007


Hi Gleb,

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 */
void
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)
		goto zfree_internal;
...
...
zfree_internal:
	uma_zfree_internal(zone, item, udata, SKIP_DTOR, ZFREE_STATFREE);

	return;

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
woken up.

> 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()
> are.

I'll do this.

thanks

mohan


More information about the cvs-src mailing list