|
@@ -1007,6 +1007,7 @@ static int ext4_write_end(struct file *file,
|
|
|
{
|
|
|
handle_t *handle = ext4_journal_current_handle();
|
|
|
struct inode *inode = mapping->host;
|
|
|
+ loff_t old_size = inode->i_size;
|
|
|
int ret = 0, ret2;
|
|
|
int i_size_changed = 0;
|
|
|
|
|
@@ -1037,6 +1038,8 @@ static int ext4_write_end(struct file *file,
|
|
|
unlock_page(page);
|
|
|
page_cache_release(page);
|
|
|
|
|
|
+ if (old_size < pos)
|
|
|
+ pagecache_isize_extended(inode, old_size, pos);
|
|
|
/*
|
|
|
* Don't mark the inode dirty under page lock. First, it unnecessarily
|
|
|
* makes the holding time of page lock longer. Second, it forces lock
|
|
@@ -1078,6 +1081,7 @@ static int ext4_journalled_write_end(struct file *file,
|
|
|
{
|
|
|
handle_t *handle = ext4_journal_current_handle();
|
|
|
struct inode *inode = mapping->host;
|
|
|
+ loff_t old_size = inode->i_size;
|
|
|
int ret = 0, ret2;
|
|
|
int partial = 0;
|
|
|
unsigned from, to;
|
|
@@ -1110,6 +1114,9 @@ static int ext4_journalled_write_end(struct file *file,
|
|
|
unlock_page(page);
|
|
|
page_cache_release(page);
|
|
|
|
|
|
+ if (old_size < pos)
|
|
|
+ pagecache_isize_extended(inode, old_size, pos);
|
|
|
+
|
|
|
if (size_changed) {
|
|
|
ret2 = ext4_mark_inode_dirty(handle, inode);
|
|
|
if (!ret)
|