Я пишу простой диспетчер памяти для моего приложения, который освободит лишнюю память, используемую моими модулями, чтобы она снова была доступна для использования. Мои модули выделяют память, используя alloc_page & kmem_cache_alloc, и поэтому менеджер памяти использует put_page & kmem_cache_free соответственно для освобождения памяти, которая не используется.
Проблема, с которой я сталкиваюсь, заключается в том, что даже после того, как я освобождаю память с помощью put_page & kmem_cache_free, мои модули не могут получить свободную память. Я написал тестовый код, который распределяет много памяти в цикле и когда нехватка памяти спит на диспетчере памяти, чтобы освободить память. Диспетчер памяти успешно выполняет бесплатный код и запускает спящий процесс, так как память должна быть доступна сейчас. Интересно, что вызовы alloc_page / kmem_cache_alloc все еще не могут выделить память. Теперь я понятия не имею, почему это происходит, поэтому обращаюсь за помощью.