1

我正在尝试在 Linux 内核空间中编写一个遍历页面缓存并搜索包含特定块的页面的函数。

我不知道如何一一获取页面缓存中的页面。

我看到这find_get_page是一个可以帮助我的功能,但我不知道如何获得首页偏移量以及如何继续。正如我所说,我正在尝试做这样的事情:

for(every page in struct address_space *mapping)
{
    for(every struct buffer_head in current_page->buffers)
    {
        check if(my_sector == current_buffer_head->b_blocknr)
            ...
    }
}

谁能帮助找到如何遍历所有页面缓存?

我相信 Linux 内核中有一段代码可以做这样的事情(例如:当有一个页面写入并且在缓存中搜索该页面时),但我没有找到它......

谢谢!

4

1 回答 1

3

address_space结构将所有页面保存在radix_treemapping->page_tree在您的情况下)。所以你只需要遍历那棵树。Linux 内核具有包含迭代器的基数树 API(参见此处) 。for_each例如:

396 /**
397  * radix_tree_for_each_chunk_slot - iterate over slots in one chunk
398  *
399  * @slot:       the void** variable, at the beginning points to chunk first slot
400  * @iter:       the struct radix_tree_iter pointer
401  * @flags:      RADIX_TREE_ITER_*, should be constant
402  *
403  * This macro is designed to be nested inside radix_tree_for_each_chunk().
404  * @slot points to the radix tree slot, @iter->index contains its index.
405  */
406 #define radix_tree_for_each_chunk_slot(slot, iter, flags)               \
407         for (; slot ; slot = radix_tree_next_slot(slot, iter, flags))
408 
于 2013-09-10T17:51:09.847 回答