Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

switch minix to simple_fsync()

* get minix_write_inode() to honour the second argument
* now we can use simple_fsync() for minixfs

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 0d7916d7 e1740a46

+12 -45
+1 -1
fs/minix/dir.c
··· 22 22 const struct file_operations minix_dir_operations = { 23 23 .read = generic_read_dir, 24 24 .readdir = minix_readdir, 25 - .fsync = minix_sync_file, 25 + .fsync = simple_fsync, 26 26 }; 27 27 28 28 static inline void dir_put_page(struct page *page)
+1 -19
fs/minix/file.c
··· 6 6 * minix regular file handling primitives 7 7 */ 8 8 9 - #include <linux/buffer_head.h> /* for fsync_inode_buffers() */ 10 9 #include "minix.h" 11 10 12 11 /* 13 12 * We have mostly NULLs here: the current defaults are OK for 14 13 * the minix filesystem. 15 14 */ 16 - int minix_sync_file(struct file *, struct dentry *, int); 17 - 18 15 const struct file_operations minix_file_operations = { 19 16 .llseek = generic_file_llseek, 20 17 .read = do_sync_read, ··· 19 22 .write = do_sync_write, 20 23 .aio_write = generic_file_aio_write, 21 24 .mmap = generic_file_mmap, 22 - .fsync = minix_sync_file, 25 + .fsync = simple_fsync, 23 26 .splice_read = generic_file_splice_read, 24 27 }; 25 28 ··· 27 30 .truncate = minix_truncate, 28 31 .getattr = minix_getattr, 29 32 }; 30 - 31 - int minix_sync_file(struct file * file, struct dentry *dentry, int datasync) 32 - { 33 - struct inode *inode = dentry->d_inode; 34 - int err; 35 - 36 - err = sync_mapping_buffers(inode->i_mapping); 37 - if (!(inode->i_state & I_DIRTY)) 38 - return err; 39 - if (datasync && !(inode->i_state & I_DIRTY_DATASYNC)) 40 - return err; 41 - 42 - err |= minix_sync_inode(inode); 43 - return err ? -EIO : 0; 44 - }
+10 -23
fs/minix/inode.c
··· 556 556 return bh; 557 557 } 558 558 559 - static struct buffer_head *minix_update_inode(struct inode *inode) 560 - { 561 - if (INODE_VERSION(inode) == MINIX_V1) 562 - return V1_minix_update_inode(inode); 563 - else 564 - return V2_minix_update_inode(inode); 565 - } 566 - 567 - static int minix_write_inode(struct inode * inode, int wait) 568 - { 569 - brelse(minix_update_inode(inode)); 570 - return 0; 571 - } 572 - 573 - int minix_sync_inode(struct inode * inode) 559 + static int minix_write_inode(struct inode *inode, int wait) 574 560 { 575 561 int err = 0; 576 562 struct buffer_head *bh; 577 563 578 - bh = minix_update_inode(inode); 579 - if (bh && buffer_dirty(bh)) 580 - { 564 + if (INODE_VERSION(inode) == MINIX_V1) 565 + bh = V1_minix_update_inode(inode); 566 + else 567 + bh = V2_minix_update_inode(inode); 568 + if (!bh) 569 + return -EIO; 570 + if (wait && buffer_dirty(bh)) { 581 571 sync_dirty_buffer(bh); 582 - if (buffer_req(bh) && !buffer_uptodate(bh)) 583 - { 572 + if (buffer_req(bh) && !buffer_uptodate(bh)) { 584 573 printk("IO error syncing minix inode [%s:%08lx]\n", 585 574 inode->i_sb->s_id, inode->i_ino); 586 - err = -1; 575 + err = -EIO; 587 576 } 588 577 } 589 - else if (!bh) 590 - err = -1; 591 578 brelse (bh); 592 579 return err; 593 580 }
-2
fs/minix/minix.h
··· 57 57 extern void V1_minix_truncate(struct inode *); 58 58 extern void V2_minix_truncate(struct inode *); 59 59 extern void minix_truncate(struct inode *); 60 - extern int minix_sync_inode(struct inode *); 61 60 extern void minix_set_inode(struct inode *, dev_t); 62 61 extern int V1_minix_get_block(struct inode *, long, struct buffer_head *, int); 63 62 extern int V2_minix_get_block(struct inode *, long, struct buffer_head *, int); ··· 71 72 extern void minix_set_link(struct minix_dir_entry*, struct page*, struct inode*); 72 73 extern struct minix_dir_entry *minix_dotdot(struct inode*, struct page**); 73 74 extern ino_t minix_inode_by_name(struct dentry*); 74 - extern int minix_sync_file(struct file *, struct dentry *, int); 75 75 76 76 extern const struct inode_operations minix_file_inode_operations; 77 77 extern const struct inode_operations minix_dir_inode_operations;