The LKML 3 points out that kmem_getpages() can not handle pages allocated from the high memory zone. However, it seems to me that kmem_getpages() neither prevents the zone allocator from allocating pages from the high zone, nor handle that case properly.
According to my understanding, if some pages are allocated by the zone allocator, the pages should be traced by the SLAB and should be freed when they are not needed any more properly. But, what confuses me is that, if the zone allocator find there is no enough pages in DMA or NORMAL zone, it will allocate pages from the HIGH zone, and in that case, kmem_getpages() simply returns NULL and leave the already-allocated pages alone and do nothing about tracing the allocated pages.
My question is, does that mean the pages allocated in the above case become orphans and never get chance to be freed?