Group,
Their seems to be three large single allocation sections
within the zfs code, local buf_init(), that perform
KMEM_NOSLEEPs. Based on failure they drop to 1/2 of
value and retry until succeed.
Would't this type of logic force a low memory condition
if they were set too high? IMO, this would allow these
three allocs to consume basicly all of kmem alloc'able
memory and generate no warning that NOSLEEP memory
allocations had failed. The single kmem_sleeps could
then consume the rest with large mem allocs and forced
reallocations.
Thus, IMO, since they originate at a single location,
return based on failure, generate a BAD CONFIGURATION
message, and retry with a medium amount of memory
consumption, and if that failed, retry with a low
ZFS memory consumption mode.
On the other had if one wishes to repeat the failed
allocations without medium or low memory set configs,
dropping to a conservative 1/8th each time could
also prevent low memory conditions..
Mitchell Erblich
------------------