如何在Linux内核中遍历文件地址空间的页面caching树(radix tree)

我需要获得打开文件的页面caching统计信息。 在文件结构中有一个地址空间指针( f_mapping ),它又有一个称为page_tree基数树的根。 我需要遍历该树来获取关于该打开文件的所有caching页面的信息。

有一些函数可以实现,如radix_tree_for_each_chunk (用于遍历块), radix_tree_for_each_chunk_slot (用于迭代一个块中的槽)等。 我不确定正确使用(论据)的情况。 如果发布任何示例,这将是有帮助的。

    我从Linux内核源代码中找到了它。

    struct file *file = filp_open("filename",O_RDONLY,0); struct address_space *file_addr_space = file->f_mapping; if(file_addr_space==NULL){ printk("error") } struct radix_tree_root file_page_tree_root = file_addr_space->page_tree; //contains all pages in page cache struct radix_tree_iter iter; void **slot; int num_dirty = 0; radix_tree_for_each_slot(slot,&file_page_tree_root,&iter,0){ struct page *page = radix_tree_deref_slot(slot); if(page!=NULL){ //printk("information about page"); } }