假设我们struct page
从页面缓存文件的地址空间中获得了一个。
我们如何从中获取 4KB 数据的起始物理地址struct page
?
我想里面应该有类似data
指针的东西struct sk_buff
,但我没有找到。
编辑
感谢 Mat 和 llya 的回答。
看了答案后,我认为第一个问题是确定 是否struct page
位于ZONE_NORMAL
或ZONE_HIGHMEM
。
在文件 I/O 期间,当我们没有找到缓存页面时,我们将首先使用page_cache_alloc_cold()
. page_cache_alloc_cold()
最终会调用alloc_pages()
它看起来会使用ZONE_HIGHMEM
(在 x86 中,是从PAGE_OFFSET
+896M 开始的内核内存区域)来完成它的工作。
所以
- 我认为 Mat 的答案适用于
ZONE_NORMAL
- 假设我们用
kmap()
struct page 关联的 4KB 数据的起始物理地址来查找,那么我们应该用它(unsigned long)(&page)-PAGE_OFFSET
来查找存储结构本身的物理地址是否正确?
请纠正。