- 论坛徽章:
- 0
|
1.对于page中 (address_space) 成员mapping, if low bit clear, points to inode address_space, or NULL. If page mapped as anonymous memory, low bit is set, and it points to anon_vma object.
意思是第0位为1,mapping就指向 anon_vma。但是mapping是一个指针,他的值是一个地址,怎么保证这一点?
2. mm.h中的一段代码- static inline struct address_space *page_mapping(struct page *page)
- {
- struct address_space *mapping = page->mapping;
- VM_BUG_ON(PageSlab(page));
- if (unlikely(PageSwapCache(page)))
- mapping = &swapper_space;
- else if ((unsigned long)mapping & PAGE_MAPPING_ANON)
- mapping = NULL;
- return mapping;
- }
复制代码 可以看到page中的mapping 要么指向 swapper_space, 要么是NULL, 要么是address_space.
我想做的是对于一个page结构,找到他是属于哪个inode的。所以我在ksm中加入了一些代码。
page中的mapping 指向 address_space, address_space有个host指针指向inode. 我是按照这个思路来的。
对于page中的mapping 我也做了如上两种判断。
if (unlikely(PageSwapCache(page)))
...printk...
else if ((unsigned long)page->mapping & PAGE_MAPPING_ANON)
...printk...
else
...通过page->mapping->host得到inode...
从输出结果来看,大部分page都是属于第二个分支里的。第一个分支也有。
就是没有一个能到达最后一个分支的。
原来以为address_space 中的flags 或者page里的flags会有标记他们是否属于某个inode的。检查了一下貌似没有。
请问该怎么解决。谢谢!!!
或者怎么样从page获得其所属的inode。 |
|