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, structnfs_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 文件系统的权限控制和并发访问的要求比本地文件系统更高,读写的缓存机制也大大有别于本地文件系统。
|