在Linux中分配连续缓存页面时如何处理异常页面

在Linux中分配连续缓存页面时如何处理异常页面

我有一个分配连续缓存页面的内核模块代码。我使用 radix_tree_for_each_contig()。这是代码的部分片段。

radix_tree_for_each_contig(slot, tree_root, iter, index) {
struct page *page;
page = radix_tree_deref_slot(slot);
if (unlikely(!page)) 
     continue;
if (radix_tree_exceptional_entry(page))

在上面的代码中,我在 radix_tree_deref_slot() 之后检查Exceptional_entry。在最新的内核 (4.x) 中,radix_tree_exceptional_entry() 返回非零,而旧内核 3.13.x 中的相同代码返回零。

所以我的问题是如何在缓存中分配连续页面时处理Exceptional_entry?

相关内容