Merge branch 'ext3-latency-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
* 'ext3-latency-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: ext3: Add replace-on-rename hueristics for data=writeback mode ext3: Add replace-on-truncate hueristics for data=writeback mode ext3: Use WRITE_SYNC for commits which are caused by fsync() block_write_full_page: Use synchronous writes for WBC_SYNC_ALL writebacks
This commit is contained in:
@@ -33,6 +33,10 @@
|
||||
*/
|
||||
static int ext3_release_file (struct inode * inode, struct file * filp)
|
||||
{
|
||||
if (EXT3_I(inode)->i_state & EXT3_STATE_FLUSH_ON_CLOSE) {
|
||||
filemap_flush(inode->i_mapping);
|
||||
EXT3_I(inode)->i_state &= ~EXT3_STATE_FLUSH_ON_CLOSE;
|
||||
}
|
||||
/* if we are the last writer on the inode, drop the block reservation */
|
||||
if ((filp->f_mode & FMODE_WRITE) &&
|
||||
(atomic_read(&inode->i_writecount) == 1))
|
||||
|
@@ -2363,6 +2363,9 @@ void ext3_truncate(struct inode *inode)
|
||||
if (!ext3_can_truncate(inode))
|
||||
return;
|
||||
|
||||
if (inode->i_size == 0 && ext3_should_writeback_data(inode))
|
||||
ei->i_state |= EXT3_STATE_FLUSH_ON_CLOSE;
|
||||
|
||||
/*
|
||||
* We have to lock the EOF page here, because lock_page() nests
|
||||
* outside journal_start().
|
||||
|
@@ -2274,7 +2274,7 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
|
||||
struct inode * old_inode, * new_inode;
|
||||
struct buffer_head * old_bh, * new_bh, * dir_bh;
|
||||
struct ext3_dir_entry_2 * old_de, * new_de;
|
||||
int retval;
|
||||
int retval, flush_file = 0;
|
||||
|
||||
old_bh = new_bh = dir_bh = NULL;
|
||||
|
||||
@@ -2410,6 +2410,8 @@ static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
|
||||
ext3_mark_inode_dirty(handle, new_inode);
|
||||
if (!new_inode->i_nlink)
|
||||
ext3_orphan_add(handle, new_inode);
|
||||
if (ext3_should_writeback_data(new_inode))
|
||||
flush_file = 1;
|
||||
}
|
||||
retval = 0;
|
||||
|
||||
@@ -2418,6 +2420,8 @@ end_rename:
|
||||
brelse (old_bh);
|
||||
brelse (new_bh);
|
||||
ext3_journal_stop(handle);
|
||||
if (retval == 0 && flush_file)
|
||||
filemap_flush(old_inode->i_mapping);
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user