前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux中文件系统注册及mount过程分析2

Linux中文件系统注册及mount过程分析2

作者头像
用户3765803
发布2019-03-05 10:02:25
1.9K0
发布2019-03-05 10:02:25
举报
文章被收录于专栏:悟空被FFmpeg玩悟空被FFmpeg玩

然后进入do_mount接口里面进行mount操作

1942 long do_mount(char *dev_name, char *dir_name, char *type_page,1943 unsigned long flags, void *data_page)1944 {1945 struct path path;1946 int retval = 0;1947 int mnt_flags = 0;19481949 /* Discard magic */1950 if ((flags & MS_MGC_MSK) == MS_MGC_VAL)1951 flags &= ~MS_MGC_MSK;19521953 /* Basic sanity checks */19541955 if (!dir_name || !*dir_name || !memchr(dir_name, 0, PAGE_SIZE))1956 return -EINVAL;19571958 if (data_page)1959 ((char *)data_page)[PAGE_SIZE - 1] = 0;19601961 /* ... and get the mountpoint */1962 retval = kern_path(dir_name, LOOKUP_FOLLOW, &path);1963 if (retval)1964 return retval;19651966 retval = security_sb_mount(dev_name, &path,1967 type_page, flags, data_page);1968 if (retval)1969 goto dput_out;19701971 /* Default to relatime unless overriden */1972 if (!(flags & MS_NOATIME))1973 mnt_flags |= MNT_RELATIME;19741975 /* Separate the per-mountpoint flags */1976 if (flags & MS_NOSUID)1977 mnt_flags |= MNT_NOSUID;1978 if (flags & MS_NODEV)1979 mnt_flags |= MNT_NODEV;1980 if (flags & MS_NOEXEC)1981 mnt_flags |= MNT_NOEXEC;1982 if (flags & MS_NOATIME)1983 mnt_flags |= MNT_NOATIME;1984 if (flags & MS_NODIRATIME)1985 mnt_flags |= MNT_NODIRATIME;1986 if (flags & MS_STRICTATIME)1987 mnt_flags &= ~(MNT_RELATIME | MNT_NOATIME);1988 if (flags & MS_RDONLY)1989 mnt_flags |= MNT_READONLY;19901991 flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN |1992 MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |1993 MS_STRICTATIME);19941995 if (flags & MS_REMOUNT)1996 retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,1997 data_page);1998 else if (flags & MS_BIND)1999 retval = do_loopback(&path, dev_name, flags & MS_REC);2000 else if (flags & (MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))2001 retval = do_change_type(&path, flags);2002 else if (flags & MS_MOVE)2003 retval = do_move_mount(&path, dev_name);2004 else2005 retval = do_new_mount(&path, type_page, flags, mnt_flags,2006 dev_name, data_page);2007 dput_out:2008 path_put(&path);2009 return retval;2010 }

通过kern_path来获得挂载点&path

然后通过传递的flag来判断挂载操作, 这些flag可以在man 2 mount中看到说明,这个与mount命令有区别,

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-08-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档