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
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"