Ext2 索引节点的操作

一些VFS索引节点的操作在Ext2中都有具体的体现,这取决于索引节点所指的文件类型。

Ext2的普通文件和目录文件的索引节点操作的方法地址分别存放在:ext2_file_inode_operations 和 ext2_dir_inode_operations

struct inode_operations ext2_file_inode_operations = {

.truncate= ext2_truncate,

#ifdef CONFIG_EXT2_FS_XATTR

.setxattr= generic_setxattr,

.getxattr= generic_getxattr,

.listxattr= ext2_listxattr,

.removexattr= generic_removexattr,

#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()函数实现的。这两个函数在第十五章的“从文件中读取数据”和“写入文件”两节进行了描述。