diff options
Diffstat (limited to 'fs/ext2')
| -rw-r--r-- | fs/ext2/fsync.c | 2 | ||||
| -rw-r--r-- | fs/ext2/inode.c | 5 |
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); |
