diff options
| author | Andrey V. Savochkin <saw@saw.sw.com.sg> | 2004-09-16 22:03:20 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-09-16 22:03:20 -0700 |
| commit | 73441a0edd8030afdc0c455272585fb7f4fbeaa0 (patch) | |
| tree | 238825f4ecc3db36e37b459dd66479a2b46fe18b /include/linux | |
| parent | 0855040e79e53064f73b5c34fb7b1ccd196f9b52 (diff) | |
[PATCH] fix for fsync ignoring writing errors
Currently metadata writing errors are ignored and not returned from
sys_fsync on ext2 and ext3 filesystems. That is, at least ext2 and ext3.
Both ext2 and ext3 resort to sync_inode() in their ->sync_inode method,
which in turn calls ->write_inode. ->write_inode method has void type, and
any IO errors happening inside are lost.
Make ->write_inode return the error code?
Signed-off-by: Andrey Savochkin <saw@saw.sw.com.sg>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/affs_fs.h | 2 | ||||
| -rw-r--r-- | include/linux/ext3_fs.h | 2 | ||||
| -rw-r--r-- | include/linux/fs.h | 2 | ||||
| -rw-r--r-- | include/linux/msdos_fs.h | 2 | ||||
| -rw-r--r-- | include/linux/reiserfs_fs.h | 2 | ||||
| -rw-r--r-- | include/linux/ufs_fs.h | 2 |
6 files changed, 6 insertions, 6 deletions
diff --git a/include/linux/affs_fs.h b/include/linux/affs_fs.h index 894094a40c5f..b52f1320f874 100644 --- a/include/linux/affs_fs.h +++ b/include/linux/affs_fs.h @@ -62,7 +62,7 @@ extern void affs_put_inode(struct inode *inode); extern void affs_delete_inode(struct inode *inode); extern void affs_clear_inode(struct inode *inode); extern void affs_read_inode(struct inode *inode); -extern void affs_write_inode(struct inode *inode, int); +extern int affs_write_inode(struct inode *inode, int); extern int affs_add_entry(struct inode *dir, struct inode *inode, struct dentry *dentry, s32 type); /* super.c */ diff --git a/include/linux/ext3_fs.h b/include/linux/ext3_fs.h index 115d49ebc733..c95c5802852a 100644 --- a/include/linux/ext3_fs.h +++ b/include/linux/ext3_fs.h @@ -724,7 +724,7 @@ extern struct buffer_head * ext3_getblk (handle_t *, struct inode *, long, int, extern struct buffer_head * ext3_bread (handle_t *, struct inode *, int, int, int *); extern void ext3_read_inode (struct inode *); -extern void ext3_write_inode (struct inode *, int); +extern int ext3_write_inode (struct inode *, int); extern int ext3_setattr (struct dentry *, struct iattr *); extern void ext3_put_inode (struct inode *); extern void ext3_delete_inode (struct inode *); diff --git a/include/linux/fs.h b/include/linux/fs.h index 5f89bfe9c2de..76f96659507a 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -960,7 +960,7 @@ struct super_operations { void (*read_inode) (struct inode *); void (*dirty_inode) (struct inode *); - void (*write_inode) (struct inode *, int); + int (*write_inode) (struct inode *, int); void (*put_inode) (struct inode *); void (*drop_inode) (struct inode *); void (*delete_inode) (struct inode *); diff --git a/include/linux/msdos_fs.h b/include/linux/msdos_fs.h index 6d141394ff3e..951fe570b923 100644 --- a/include/linux/msdos_fs.h +++ b/include/linux/msdos_fs.h @@ -276,7 +276,7 @@ extern void fat_put_super(struct super_block *sb); int fat_fill_super(struct super_block *sb, void *data, int silent, struct inode_operations *fs_dir_inode_ops, int isvfat); extern int fat_statfs(struct super_block *sb, struct kstatfs *buf); -extern void fat_write_inode(struct inode *inode, int wait); +extern int fat_write_inode(struct inode *inode, int wait); extern int fat_notify_change(struct dentry * dentry, struct iattr * attr); /* fat/misc.c */ diff --git a/include/linux/reiserfs_fs.h b/include/linux/reiserfs_fs.h index a538e5487c95..2bcb5bb73ebb 100644 --- a/include/linux/reiserfs_fs.h +++ b/include/linux/reiserfs_fs.h @@ -1945,7 +1945,7 @@ void reiserfs_read_locked_inode(struct inode * inode, struct reiserfs_iget_args int reiserfs_find_actor(struct inode * inode, void *p) ; int reiserfs_init_locked_inode(struct inode * inode, void *p) ; void reiserfs_delete_inode (struct inode * inode); -void reiserfs_write_inode (struct inode * inode, int) ; +int reiserfs_write_inode (struct inode * inode, int) ; struct dentry *reiserfs_get_dentry(struct super_block *, void *) ; struct dentry *reiserfs_decode_fh(struct super_block *sb, __u32 *data, int len, int fhtype, diff --git a/include/linux/ufs_fs.h b/include/linux/ufs_fs.h index 0a800dee389f..2b71418e18d9 100644 --- a/include/linux/ufs_fs.h +++ b/include/linux/ufs_fs.h @@ -898,7 +898,7 @@ extern struct inode * ufs_new_inode (struct inode *, int); extern u64 ufs_frag_map (struct inode *, sector_t); extern void ufs_read_inode (struct inode *); extern void ufs_put_inode (struct inode *); -extern void ufs_write_inode (struct inode *, int); +extern int ufs_write_inode (struct inode *, int); extern int ufs_sync_inode (struct inode *); extern void ufs_delete_inode (struct inode *); extern struct buffer_head * ufs_getfrag (struct inode *, unsigned, int, int *); |
