📄 043_fs_filesystem_c.html
字号:
<html lang="zh-CN" xmlns:gdoc=""> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type"> <style type="text/css">/* default css */table { font-size: 1em; line-height: inherit;}div, address, ol, ul, li, option, select { margin-top: 0px; margin-bottom: 0px;}p { margin: 0px;}body { margin: 0px; padding: 0px; font-family: Verdana, sans-serif; font-size: 10pt; background-color: #ffffff;}h6 { font-size: 10pt }h5 { font-size: 11pt }h4 { font-size: 12pt }h3 { font-size: 13pt }h2 { font-size: 14pt }h1 { font-size: 16pt }blockquote {padding: 10px; border: 1px #DDD dashed }a img {border: 0}div.google_header, div.google_footer { position: relative; margin-top: 1em; margin-bottom: 1em;}/* end default css */ /* default print css */ @media print { body { padding: 0; margin: 0; } div.google_header, div.google_footer { display: block; min-height: 0; border: none; } div.google_header { flow: static(header); } /* used to insert page numbers */ div.google_header::before, div.google_footer::before { position: absolute; top: 0; } div.google_footer { flow: static(footer); } /* always consider this element at the start of the doc */ div#google_footer { flow: static(footer, start); } span.google_pagenumber { content: counter(page); } span.google_pagecount { content: counter(pages); } } @page { @top { content: flow(header); } @bottom { content: flow(footer); } } /* end default print css */ /* custom css *//* end custom css */ /* ui edited css */ body { font-family: Verdana; font-size: 10.0pt; line-height: normal; background-color: #ffffff; } .documentBG { background-color: #ffffff; } /* end ui edited css */</style> </head> <body revision="dcbsxfpf_31dmwct2dn:40"> <table align=center cellpadding=0 cellspacing=0 height=5716 width=802>
<tbody>
<tr>
<td height=5716 valign=top width=802>
<pre>2007-3-6 <br><span style=COLOR:#3333ff>自己看吧,就这几行代码. filesytem 的精华并不在这个同名文件中.</span><br><br>#ifdef CONFIG_DEVPTS_FS<br>extern int <span style=COLOR:#000099>init_devpts_fs</span>(void);<br>#endif<br><br>void <span style=COLOR:#000099>__init filesystem_setup</span>(void)<br>{<br> <span style=COLOR:#006600>init_devfs_fs</span>(); /* Header file may make this empty */<br><br>#ifdef CONFIG_NFS_FS<br> <span style=COLOR:#009900>init_nfs_fs</span>();<br>#endif<br><br>#ifdef CONFIG_DEVPTS_FS<br> <span style=COLOR:#009900>init_devpts_fs</span>();<br>#endif<br>}<br><br>#if defined(CONFIG_NFSD_MODULE)<br>struct nfsd_linkage *nfsd_linkage = NULL;<br><br>long<br><span style=COLOR:#cc0000>asmlinkage</span> <span style=COLOR:#000099>sys_nfsservctl</span>(int cmd, void *argp, void *resp)<br>{<br> int ret = -ENOSYS;<br> <br> lock_kernel();<br><br> if (nfsd_linkage ||<br> (request_module ("nfsd") == 0 && nfsd_linkage))<br> ret = <span style=COLOR:#009900>nfsd_linkage->do_nfsservctl</span>(cmd, argp, resp);<br><br> unlock_kernel();<br> return ret;<br>}<br>EXPORT_SYMBOL(nfsd_linkage);<br><br>#elif ! defined (CONFIG_NFSD)<br>asmlinkage int <span style=COLOR:#000099>sys_nfsservctl</span>(int cmd, void *argp, void *resp)<br>{<br> return -ENOSYS;<br>}<br>#endif /* CONFIG_NFSD */<br><br><br>倒是吧fs type列到这里吧,就像人走过的时候顺笔写上, xxx到此一游.<br>struct <font color=#000099><b>file_system_type</b></font> {<br> const char *<font color=#000099><b>name</b></font>;<br> int <font color=#000099><b>fs_flags</b></font>;<br> struct <font color=#006600>super_block</font> *(*<font color=#006600><b>read_super</b></font>) (struct super_block *, void *, int);<br> struct <font color=#006600>module </font>*<b>owner</b>;<br> struct <font color=#006600>vfsmount </font>*<b>kern_mnt</b>; /* For kernel mount, if it's FS_SINGLE fs */<br> struct <font color=#006600>file_system_type</font> * <b>next</b>;<br>};<br><br>#define <font color=#000099><b>DECLARE_FSTYPE</b></font>(var,type,read,flags) \<br>struct <font color=#006600>file_system_type</font> var = { \<br> name: type, \<br> read_super: read, \<br> fs_flags: flags, \<br> owner: <font color=#cc0000>THIS_MODULE</font>, \<br>}<br><br>#define <font color=#000099><b>DECLARE_FSTYPE_DEV</b></font>(var,type,read) \<br> DECLARE_FSTYPE(var,type,read,<font color=#cc0000>FS_REQUIRES_DEV</font>)<br><br>read_super,是一个文件系统的开始.里边有这个文件系统的根,s_root. mount的时候,才需要做这个动作. do_mount(kern_mount)<br>+read_super构建一颗由vfsmount链接起来的dentry->mnt->dentry(root)混合树...<br><br> 由vfsmount, dentry 组成的这棵数, 加上file->dentry<-->inode<-->super<fs_system_type 所形成的复杂的"网状"结构, 是整个<br>VFS的"组织结构".而组织结构最大的作用,就是互相方便的引用,查找. 同时也提供给user一个以字符串为媒介的接口"path".<br> 光是这庞大的组织,就占去了vfsmount,dentry,inode,super不少的"经费"(空间).然后依附于每个个体,都有一组feature:功能性<br>featrue+底层接口虚拟化.<br> VFS在这个组织之上,依赖于这些feature,构筑整个VFS的实现,向上提供给user文件系统的统一操作,向下,有一组"标准"接口,可以方便<br>的实现具体的文件系统.<br>struct <font color=#000099><b>file_system_type</b></font> {<br> const char *<font color=#000099><b>name</b></font>; <font color=#ff0000><b>/*feature*/</b></font><br> int <font color=#000099><b>fs_flags</b></font>; <font color=#cc0000><b>/*feature*/ </b></font><br> struct <font color=#006600>super_block</font> *(*<font color=#006600><b>read_super</b></font>) (struct super_block *, void *, int); <font color=#ff0000><b>/*featue虚拟化接口*/</b></font><br> struct <font color=#006600>module </font>*<b>owner</b>; <font color=#cc0000><b>/*组织*/</b></font><br> struct <font color=#006600>vfsmount </font>*<b>kern_mnt</b>; <font color=#cc0000><b>/*组织*/ </b></font><br> struct <font color=#006600>file_system_type</font> * <b>next</b>; <font color=#cc0000><b>/*组织*/</b></font><br>};<br><br> <br><br><br></pre>
</td>
</tr>
</tbody>
</table></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -