diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-05 14:53:53 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-03-05 14:53:53 -0500 |
commit | 9467c4fdd66f6810cecef0f1173330f3c6e67d45 (patch) | |
tree | 5fea180a10127c893b288dff2c8788b72d2eaea3 /fs/ext4 | |
parent | 35c2e967d067ff02dc944f2434f024419c2fe83a (diff) | |
parent | a9185b41a4f84971b930c519f0c63bd450c4810d (diff) |
Merge branch 'write_inode2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'write_inode2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6:
pass writeback_control to ->write_inode
make sure data is on disk before calling ->write_inode
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/ext4.h | 2 | ||||
-rw-r--r-- | fs/ext4/inode.c | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 6e5787a29b90..bf938cf7c5f0 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -1446,7 +1446,7 @@ int ext4_get_block(struct inode *inode, sector_t iblock, | |||
1446 | struct buffer_head *bh_result, int create); | 1446 | struct buffer_head *bh_result, int create); |
1447 | 1447 | ||
1448 | extern struct inode *ext4_iget(struct super_block *, unsigned long); | 1448 | extern struct inode *ext4_iget(struct super_block *, unsigned long); |
1449 | extern int ext4_write_inode(struct inode *, int); | 1449 | extern int ext4_write_inode(struct inode *, struct writeback_control *); |
1450 | extern int ext4_setattr(struct dentry *, struct iattr *); | 1450 | extern int ext4_setattr(struct dentry *, struct iattr *); |
1451 | extern int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry, | 1451 | extern int ext4_getattr(struct vfsmount *mnt, struct dentry *dentry, |
1452 | struct kstat *stat); | 1452 | struct kstat *stat); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index f55df7192b95..f977aade0d1b 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -5348,7 +5348,7 @@ out_brelse: | |||
5348 | * `stuff()' is running, and the new i_size will be lost. Plus the inode | 5348 | * `stuff()' is running, and the new i_size will be lost. Plus the inode |
5349 | * will no longer be on the superblock's dirty inode list. | 5349 | * will no longer be on the superblock's dirty inode list. |
5350 | */ | 5350 | */ |
5351 | int ext4_write_inode(struct inode *inode, int wait) | 5351 | int ext4_write_inode(struct inode *inode, struct writeback_control *wbc) |
5352 | { | 5352 | { |
5353 | int err; | 5353 | int err; |
5354 | 5354 | ||
@@ -5362,7 +5362,7 @@ int ext4_write_inode(struct inode *inode, int wait) | |||
5362 | return -EIO; | 5362 | return -EIO; |
5363 | } | 5363 | } |
5364 | 5364 | ||
5365 | if (!wait) | 5365 | if (wbc->sync_mode != WB_SYNC_ALL) |
5366 | return 0; | 5366 | return 0; |
5367 | 5367 | ||
5368 | err = ext4_force_commit(inode->i_sb); | 5368 | err = ext4_force_commit(inode->i_sb); |
@@ -5372,7 +5372,7 @@ int ext4_write_inode(struct inode *inode, int wait) | |||
5372 | err = ext4_get_inode_loc(inode, &iloc); | 5372 | err = ext4_get_inode_loc(inode, &iloc); |
5373 | if (err) | 5373 | if (err) |
5374 | return err; | 5374 | return err; |
5375 | if (wait) | 5375 | if (wbc->sync_mode == WB_SYNC_ALL) |
5376 | sync_dirty_buffer(iloc.bh); | 5376 | sync_dirty_buffer(iloc.bh); |
5377 | if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) { | 5377 | if (buffer_req(iloc.bh) && !buffer_uptodate(iloc.bh)) { |
5378 | ext4_error(inode->i_sb, "IO error syncing inode, " | 5378 | ext4_error(inode->i_sb, "IO error syncing inode, " |