Kernel Space: Memory Allocation Failures

“In general, the kernel’s memory allocator does not like to
fail. So, when kernel code requests memory, the memory management
code will work hard to satisfy the request. If this work involves
pushing other pages out to swap or removing data from the page
cache, so be it. A big exception happens, though, when an atomic
allocation (using the GFP_ATOMIC flag) is requested. Code
requesting atomic allocations is generally not in a position where
it can wait around for a lot of memory housecleaning work; in
particular, such code cannot sleep. So if the memory manager is
unable to satisfy an atomic allocation with the memory it has in
hand, it has no choice except to fail the request.

“Such failures are quite rare, especially when single pages are
requested. The kernel works to keep some spare pages around at all
times, so the memory stress must be severe before a single-page
allocation will fail…”