设为首页收藏本站language 语言切换
查看: 2469|回复: 1
收起左侧

[原创] NFS文件系统源代码剖析

[复制链接]
发表于 2012-11-2 10:10:22 | 显示全部楼层 |阅读模式

NFS 与其它文件系统一样,向内核声明和注册自己的文件系统类型。

  • static DECLARE_FSTYPE(nfs_fs_type, "nfs", nfs_read_super, FS_ODD_RENAME); ... ...
  • module_init(init_nfs_fs)
  • module_exit(exit_nfs_fs)

同样,NFS 也需要根据自己的文件类型设置相应的文件操作函数。如果是正规文件,需要设置 inode 操作函数,file 操作函数,以及 address_space 操作函数;如果是目录文件,需要设置 inode 操作函数,file 操作函数;如果是链接,则只需设置 inode 操作函数。

  • static void
  • nfs_fill_inode(struct inode *inode, struct nfs_fh *fh, struct nfs_fattr *fattr)
  • {
  •      ... ...
  •      inode->i_op = &nfs_file_inode_operations;
  •      if (S_ISREG(inode->i_mode)) {
  •           inode->i_fop = &nfs_file_operations;
  •           inode->i_data.a_ops = &nfs_file_aops;
  •      } else if (S_ISDIR(inode->i_mode)) {
  •           inode->i_op = &nfs_dir_inode_operations;
  •           inode->i_fop = &nfs_dir_operations;
  •      } else if (S_ISLNK(inode->i_mode))
  •           inode->i_op = &nfs_symlink_inode_operations;
  •      else
  •           init_special_inode(inode, inode->i_mode, fattr->rdev);
  •      ... ...
  • }

与传统文件系统不同点

与内存文件系统,闪存文件系统和磁盘文件系统这些本地文件系统最大的不同在于,NFS 文件系统的数据是基于网络,而不是基于存储设备的,因此 NFS 文件系统在设计自己的 inode 和 superblock 数据结构,以及实现文件操作函数时,无需考虑数据布局情况。同样是因为基于网络,NFS 文件系统的权限控制和并发访问的要求比本地文件系统更高,读写的缓存机制也大大有别于本地文件系统。


更多[url=]0[/url]


发表于 2012-11-5 15:09:13 | 显示全部楼层
沙发 2012-11-5 15:09:13 回复 收起回复
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-2-9 11:10 , Processed in 0.063829 second(s), 16 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表