--- linux/fs/minix/inode.c 2018/04/24 18:06:05 1.1.1.2 +++ linux/fs/minix/inode.c 2018/04/24 18:07:15 1.1.1.3 @@ -4,7 +4,7 @@ * (C) 1991 Linus Torvalds */ -#include +#include #include #include @@ -15,6 +15,13 @@ int sync_dev(int dev); +void minix_put_inode(struct inode *inode) +{ + inode->i_size = 0; + minix_truncate(inode); + minix_free_inode(inode); +} + void minix_put_super(struct super_block *sb) { int i; @@ -31,6 +38,8 @@ void minix_put_super(struct super_block static struct super_operations minix_sops = { minix_read_inode, + minix_write_inode, + minix_put_inode, minix_put_super }; @@ -199,7 +208,17 @@ void minix_read_inode(struct inode * ino else for (block = 0; block < 9; block++) inode->i_data[block] = raw_inode->i_zone[block]; brelse(bh); - inode->i_op = &minix_inode_operations; + inode->i_op = NULL; + if (S_ISREG(inode->i_mode)) + inode->i_op = &minix_file_inode_operations; + else if (S_ISDIR(inode->i_mode)) + inode->i_op = &minix_dir_inode_operations; + else if (S_ISLNK(inode->i_mode)) + inode->i_op = &minix_symlink_inode_operations; + else if (S_ISCHR(inode->i_mode)) + inode->i_op = &minix_chrdev_inode_operations; + else if (S_ISBLK(inode->i_mode)) + inode->i_op = &minix_blkdev_inode_operations; } void minix_write_inode(struct inode * inode)