summaryrefslogtreecommitdiff
path: root/fs/ext2
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ext2')
-rw-r--r--fs/ext2/fsync.c2
-rw-r--r--fs/ext2/inode.c5
2 files changed, 4 insertions, 3 deletions
diff --git a/fs/ext2/fsync.c b/fs/ext2/fsync.c
index 71ac1701a3a4..5ba02176b331 100644
--- a/fs/ext2/fsync.c
+++ b/fs/ext2/fsync.c
@@ -37,7 +37,7 @@ int ext2_sync_file(struct file * file, struct dentry *dentry, int datasync)
struct inode *inode = dentry->d_inode;
int err;
- err = fsync_inode_buffers(inode);
+ err = sync_mapping_buffers(inode->i_mapping);
if (!(inode->i_state & I_DIRTY))
return err;
if (datasync && !(inode->i_state & I_DIRTY_DATASYNC))
diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c
index 7200da15a9bf..b29af3b55ca1 100644
--- a/fs/ext2/inode.c
+++ b/fs/ext2/inode.c
@@ -41,7 +41,8 @@ static int ext2_update_inode(struct inode * inode, int do_sync);
*/
void ext2_put_inode (struct inode * inode)
{
- ext2_discard_prealloc (inode);
+ if (atomic_read(&inode->i_count) < 2)
+ ext2_discard_prealloc (inode);
}
/*
@@ -860,7 +861,7 @@ do_indirects:
}
inode->i_mtime = inode->i_ctime = CURRENT_TIME;
if (IS_SYNC(inode)) {
- fsync_inode_buffers(inode);
+ sync_mapping_buffers(inode->i_mapping);
ext2_sync_inode (inode);
} else {
mark_inode_dirty(inode);