The low-level kernel memory allocation functions take a set of flags
describing how that allocation is to be performed. Among other things,
("get free page") flags control whether the allocation
process can sleep and wait for memory, whether high memory can be used, and
so on. See this article
for the full set.
The kernel slab allocator is an additional layer built on top of the
low-level code; it handles situations where numerous objects of the same
size are frequently allocated and freed. The slab code, too, has a set of
flags describing how memory allocation is to happen. They look
suspiciously like the low-level flags, but they have different names;
instead of GFP_KERNEL, for example, user of the slab code are
expected to say SLAB_KERNEL.
Underneath it all, however, the two sets of flags are the same. As a
result, many calls to the slab code just use the GFP_ flags,
rather than the SLAB_ flags. William Lee Irwin decided it was
time to fix that; he posted a patch
converting several slab users over to the SLAB_ flags. It looked
like a fairly standard, freeze-stage kernel cleanup.
The question came up, however: why bother? Not everybody, it seems, thinks
that the separate SLAB_ flags are worth the trouble. William
responded with another patch which gets rid
of the SLAB_ flags altogether. So far, neither patch has been
merged. But they do raise a worthwhile question: why do we need a separate
set of flags if the callers have nothing different to say?
to post comments)