Honor __GFP_NORETRY in spl_kmem_cache_alloc()

The Open Solaris man page states that KM_NOSLEEP will "Return NULL
immediately if memory is not available". However, we currently do not
honor this behavior. We map KM_NOSLEEP to a Linux equivalent that
contains __GFP_NORETRY, which is meant to prevent this behavior. We
current this by checking for __GFP_NORETRY in spl_kmem_cache_alloc() and
spl_cache_refill() If it is set, exit the busy loop and return with
whatever we have done.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Allocate spl_kmem_alloc_t objects from mempool

Allocating new slabs requires first allocating a spl_kmem_alloc_t
object before the actual allocation routine is done. This allocation can
fail when the system is memory constrained. This is particularly bad
because swap operations on ZFS can depend on the success of slab
allocation. We attempt to ensure that spl_kmem_alloc_t always succeed by
switching to the Linux slab allocator and pre-reserving memory via a
Linux mempool. This should prevent spl_kmem_alloc_t allocations from
failing.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Call SLAB object constructors and destructors on demand

The SPL's SLAB code was written with an optimization to preconstruct
objects before they are used. This is semantically differs from the
Solaris behavior where objects are constructed and deconstructed on
demand. A consequence of preallocation is that buffers that should be
zeroed by constructors will contain stale data whenever the buffer is
reused. I discovered this when experimenting with the conversion of
important ARC memory allocations to SLAB allocation.

We switch to on-demand construction and deconstruction to correct this.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Force emergency allocations to trigger under low memory conditions

A concept of an emergency allocation was introduced last year to permit
allocations that took excessive periods of time to switch to physical
memory to make forward progress. Emergency allocations currently occur
by setting a flag, telling kmem_cache_alloc() to try again and then
doing the allocation. This is useful, but it might not always trigger
because we do not permit allocations in the spl_cache_grow() to
retry. This permits allocation failures to fail before the timer for
emergency allocations can trigger. This will result in a return to
kmem_cache_alloc(), which will then repeat the process. The result is
that we can loop infinitely without any forward progress under low
memory conditions because the emergency allocations will not trigger.

We change the code to force the worker to retry indefinitely. This
guarentees that the emergency allocations will trigger under low memory
conditions. In addition, we remove the KMC_BIT_DEADLOCKED bit in favor
of immediate use of the emergency allocation.

Signed-off-by: Richard Yao <ryao@gentoo.org>
Do not check for failures from internal KM_SLEEP allocations

KM_SLEEP allocations do not fail, so it makes little sense to check for
a failure. Lets convert these checks into assertions.

Signed-off-by: Richard Yao <ryao@gentoo.org>