Я тестирую кеш страниц 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()
в пространстве ядра?