Как правильно удалить страницу из кэша страниц в ядре Linux? - PullRequest
0 голосов
/ 29 сентября 2019

Я тестирую кеш страниц Linux в пространстве ядра Linux.
И я обнаружил, что есть функция delete_from_page_cache(struct page *).
Я попытался использовать ее следующим образом:

for (index = 0; index < 3; index ++) {
    p = radix_tree_lookup(root, index);
    if (p) {
        if (!trylock_page(p)) {
            continue;
        }

        delete_from_page_cache(p);
        unlock_page(p);
    }
}

Но счто, я получил бы ошибку, как это в Linux 4.4.30,

[ 1196.009188] BUG: Bad page state in process testpgcache pfn:22214f
[ 1196.013583] page:ffffea00088853c0 count:0 mapcount:0 mapping: (null) index:0x6
[ 1196.018276] flags: 0x17fff800001000d(locked|referenced|uptodate|mappedtodisk)
[ 1196.023803] page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set
[ 1196.027704] bad because of flags:
[ 1196.030482] flags: 0x1(locked)

Казалось, что страница не может быть освобождена в это время.
Я grep исходный код ядра, не нашелбольшой вызов delete_from_page_cache() для справки.
Итак, мне интересно, как правильно (или любой другой способ) вызвать delete_from_page_cache() в пространстве ядра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...