免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1993 | 回复: 8
打印 上一主题 下一主题

[文件系统] 关于follow_mount()的疑惑 [复制链接]

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-28 17:04 |只看该作者 |倒序浏览
10可用积分
from 3.7.0
  1. /*
  2. * Skip to top of mountpoint pile in refwalk mode for follow_dotdot()
  3. */
  4. static void follow_mount(struct path *path)
  5. {
  6.         while (d_mountpoint(path->dentry)) {
  7.                 struct vfsmount *mounted = lookup_mnt(path);
  8.                 if (!mounted)
  9.                         break;
  10.                 dput(path->dentry);
  11.                 mntput(path->mnt);
  12.                 path->mnt = mounted;
  13.                 path->dentry = dget(mounted->mnt_root);<----------此处的赋值是否不变?
  14.         }
  15. }
复制代码
可以多个fs挂载到同一个目录, 所以此处的dentry是否不变?
查了下挂载时的操作, 貌似没有生成新的dentry...

不明白啊, 请指点, 谢谢!

最佳答案

查看完整内容

不变是什么意思? 不明白但这段代码大概我明白是什么意思, path->dentry 是一个挂载点, 想要向下走到挂载到这个挂载点的设备上吧? 你问的是不是如果多个设备挂载到同一个挂载点, 那么这里向下走到的会不会永远是其中某一个设备?多个设备是可以挂载到同一个目录, 这里有两个不同的分支:1. 设备A挂载到该挂载点, 设备B挂载到设备A的根目录, 设备C挂载到设备B的根目录, 外边看起来, 其实 A,B隐藏了, 似乎是设备C直接挂载 ...

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
2 [报告]
发表于 2013-01-28 17:04 |只看该作者
不变是什么意思? 不明白
但这段代码大概我明白是什么意思, path->dentry 是一个挂载点, 想要向下走到挂载到这个挂载点的设备上吧? 你问的是不是如果多个设备挂载到同一个挂载点, 那么这里向下走到的会不会永远是其中某一个设备?

多个设备是可以挂载到同一个目录, 这里有两个不同的分支:
1. 设备A挂载到该挂载点, 设备B挂载到设备A的根目录, 设备C挂载到设备B的根目录, 外边看起来, 其实 A,B隐藏了, 似乎是设备C直接挂载到挂载点。 那么这个函数其实是走到设备A, 要想走到设备C, 循环调用这个函数则可以。
2. 这个挂载点有不同的路径, 比如 /mountA/path/to/dentry 和 /mountB/path/to/dentry, 也就是说, 其实dentry 所在设备同时挂载到另两个不同的目录 mountA/mountB 上, 然后设备A再挂载到  /mountA/path/to/dentry 上, 设备B挂载到 /mountB/path/to/dentry 上, 那么从 dentry 往下走会走到哪个目录视你从 /mountA/path/to/这个路径到达的 dentry 还是 /mountB/path/to 到达的 dentry. 从 mountA 到达的, 会返回设备 A 的根目录, 否则返回设备B的根目录。 内部逻辑是根据 mnt_parent 指针做的判断, 这个指针要么指向 mountA, 要么指向 mountB.

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-02-01 19:17 来自手机 |只看该作者
求解!!

请高手指点

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
4 [报告]
发表于 2013-02-01 23:57 |只看该作者
前面dput了

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2013-02-02 11:27 |只看该作者
                path->dentry = dget(mounted->mnt_root);<----------此处的赋值是否不变?
我是说每次循环中的 得到的 "path->dentry "是否是一样的? 呵呵

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
6 [报告]
发表于 2013-02-02 12:38 |只看该作者

代码都有了,为啥不看以下呢
对吧

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2013-02-02 16:32 |只看该作者

看了下代码,貌似是不一样的。

每个文件系统都有自己特有的sb,自然对应的dentry也是不同的。

是这样么,请指点,谢谢!

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
8 [报告]
发表于 2013-02-03 16:38 来自手机 |只看该作者
哦 应该都不同 sb只是最一般的情况

即使是同一个文件系统的多个目录被挂载到同一个挂载点

呵呵 对么?

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2013-02-05 10:37 |只看该作者
请专家指点, 然后结贴...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP