|
最近看2.4.18的vfs,慢慢地觉得很多东西还是不清不楚,希望大家帮我确认一下
假设一个ext2文件系统上ls -li的结果如下
ino i_size pathname
275927 4034 /home/test.c
275927 4034 /home/test_hl.c
275934 6 /home/test_sl.c -> test.c
考虑系统刚启动的情况,除了root的dentry结构,其它结构都还不存在
1.访问软链接/home/test_sl.c:
经过link_path_walk以及其中的do_follow_link后,最后内存中是否应该存在2个dentry
dentry1.d_name.name = "test_sl.c"
dentry2.d_name.name = "test.c"
且系统中存在2个inode
inode2对应软链接test_sl.c的磁盘索引节点,该索引节点对应的文件数据快,
inode2.i_ino = 275934
inode2.u.ext2_inode_info.i_data = "test.c"
inode1对应test.c的磁盘索引节点,
inode1.i_ino = 275927
inode1.u.ext2_inode_info.i_data中存放文件数据块的地址
dentry1.d_inode = &inode1
dentry2.d_inode = &inode2
2.访问硬链接/home/test_hl.c:
我觉得在物理存储上,test.c和test_hl.c的物理索引节点内容应该完全相同,
在vfs层,是否会建立再建立一个inode3与test_hl.c对应呢?
如果是,那么inode2应该与inode3关联起来吧,但是我看struct inode,里面
只有i_nlink表示硬链接数目,并没有链表把inode2与inode3关联起来啊
linux是如何保证对硬链接修改的一致性的呢?
另外还有一个问题:
如果不允许同一个块设备被多次mount,那dentry和inode之间
就只可能是1对1的关系了吧,不可能存在多对1
如果不牵涉软硬链接,我想自己应该是对的,但因为链接问题都没有搞清楚,
所以也不敢盲目下结论-_- |
|