Ext2 索引節點的操做node
一些VFS索引節點的操做在Ext2中都有具體的體現,這取決於索引節點所指的文件類型。ide
Ext2的普通文件和目錄文件的索引節點操做的方法地址分別存放在:ext2_file_inode_operations 和 ext2_dir_inode_operations函數
struct inode_operations ext2_file_inode_operations = {spa
.truncate= ext2_truncate,索引
#ifdef CONFIG_EXT2_FS_XATTRrem
.setxattr= generic_setxattr,get
.getxattr= generic_getxattr,it
.listxattr= ext2_listxattr,io
.removexattr= generic_removexattr,ast
#endif
.setattr= ext2_setattr,
.permission= ext2_permission,
};
struct inode_operations ext2_dir_inode_operations = {
.create= ext2_create,
.lookup= ext2_lookup,
.link= ext2_link,
.unlink= ext2_unlink,
.symlink= ext2_symlink,
.mkdir= ext2_mkdir,
.rmdir= ext2_rmdir,
.mknod= ext2_mknod,
.rename= ext2_rename,
#ifdef CONFIG_EXT2_FS_XATTR
.setxattr= generic_setxattr,
.getxattr= generic_getxattr,
.listxattr= ext2_listxattr,
.removexattr= generic_removexattr,
#endif
.setattr= ext2_setattr,
.permission= ext2_permission,
};
Ext2的符號連接的索引節點操做的方法,分爲兩類:快速符號連接(路徑名所有存放於索引節點內)、普通符號連接(路徑名較長,有數據塊)。對應操做表:ext2_fast_symlink_inode_operations/ext2_symlink_inode_operations
注:若是索引節點指的是一個字符設備文件、塊設備文件或命名管道(十九章「FIFO」一節),這種索引節點的操做不依賴於文件系統,其操做分別位於chrdev_inode_operations/blkdev_inode_operations/fifo_inode_operations
Ext2 的文件操做
一些VFS方法是由不少文件系統共用的通用函數實現的。這些方法的地址存放在ext2_file_operations表中。
/*
* We have mostly NULL's here: the current defaults are ok for
* the ext2 filesystem.
*/
struct file_operations ext2_file_operations = {
.llseek = generic_file_llseek,
.read = generic_file_read,
.write = generic_file_write,
.aio_read = generic_file_aio_read,
.aio_write = generic_file_aio_write,
.ioctl = ext2_ioctl,
.mmap = generic_file_mmap,
.open = generic_file_open,
.release = ext2_release_file,
.fsync = ext2_sync_file,
.readv = generic_file_readv,
.writev = generic_file_writev,
.sendfile = generic_file_sendfile,
};
注意:Ext2 的read和write方法是分別經過generic_file_read()和generic_file_write()函數實現的。這兩個函數在第十五章的「從文件中讀取數據」和「寫入文件」兩節進行了描述。