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]
|