我有一个分配连续缓存页面的内核模块代码。我使用 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?