summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorAndrey V. Savochkin <saw@saw.sw.com.sg>2004-09-16 22:03:20 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2004-09-16 22:03:20 -0700
commit73441a0edd8030afdc0c455272585fb7f4fbeaa0 (patch)
tree238825f4ecc3db36e37b459dd66479a2b46fe18b /include/linux
parent0855040e79e53064f73b5c34fb7b1ccd196f9b52 (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.h2
-rw-r--r--include/linux/ext3_fs.h2
-rw-r--r--include/linux/fs.h2
-rw-r--r--include/linux/msdos_fs.h2
-rw-r--r--include/linux/reiserfs_fs.h2
-rw-r--r--include/linux/ufs_fs.h2
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 *);