|
@@ -132,7 +132,8 @@ static inline int ext4_begin_ordered_truncate(struct inode *inode,
|
|
new_size);
|
|
new_size);
|
|
}
|
|
}
|
|
|
|
|
|
-static void ext4_invalidatepage(struct page *page, unsigned long offset);
|
|
|
|
|
|
+static void ext4_invalidatepage(struct page *page, unsigned int offset,
|
|
|
|
+ unsigned int length);
|
|
static int __ext4_journalled_writepage(struct page *page, unsigned int len);
|
|
static int __ext4_journalled_writepage(struct page *page, unsigned int len);
|
|
static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh);
|
|
static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh);
|
|
static int ext4_discard_partial_page_buffers_no_lock(handle_t *handle,
|
|
static int ext4_discard_partial_page_buffers_no_lock(handle_t *handle,
|
|
@@ -1606,7 +1607,7 @@ static void ext4_da_block_invalidatepages(struct mpage_da_data *mpd)
|
|
break;
|
|
break;
|
|
BUG_ON(!PageLocked(page));
|
|
BUG_ON(!PageLocked(page));
|
|
BUG_ON(PageWriteback(page));
|
|
BUG_ON(PageWriteback(page));
|
|
- block_invalidatepage(page, 0);
|
|
|
|
|
|
+ block_invalidatepage(page, 0, PAGE_CACHE_SIZE);
|
|
ClearPageUptodate(page);
|
|
ClearPageUptodate(page);
|
|
unlock_page(page);
|
|
unlock_page(page);
|
|
}
|
|
}
|
|
@@ -2829,7 +2830,8 @@ static int ext4_da_write_end(struct file *file,
|
|
return ret ? ret : copied;
|
|
return ret ? ret : copied;
|
|
}
|
|
}
|
|
|
|
|
|
-static void ext4_da_invalidatepage(struct page *page, unsigned long offset)
|
|
|
|
|
|
+static void ext4_da_invalidatepage(struct page *page, unsigned int offset,
|
|
|
|
+ unsigned int length)
|
|
{
|
|
{
|
|
/*
|
|
/*
|
|
* Drop reserved blocks
|
|
* Drop reserved blocks
|
|
@@ -2841,7 +2843,7 @@ static void ext4_da_invalidatepage(struct page *page, unsigned long offset)
|
|
ext4_da_page_release_reservation(page, offset);
|
|
ext4_da_page_release_reservation(page, offset);
|
|
|
|
|
|
out:
|
|
out:
|
|
- ext4_invalidatepage(page, offset);
|
|
|
|
|
|
+ ext4_invalidatepage(page, offset, length);
|
|
|
|
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
@@ -2989,14 +2991,15 @@ ext4_readpages(struct file *file, struct address_space *mapping,
|
|
return mpage_readpages(mapping, pages, nr_pages, ext4_get_block);
|
|
return mpage_readpages(mapping, pages, nr_pages, ext4_get_block);
|
|
}
|
|
}
|
|
|
|
|
|
-static void ext4_invalidatepage(struct page *page, unsigned long offset)
|
|
|
|
|
|
+static void ext4_invalidatepage(struct page *page, unsigned int offset,
|
|
|
|
+ unsigned int length)
|
|
{
|
|
{
|
|
trace_ext4_invalidatepage(page, offset);
|
|
trace_ext4_invalidatepage(page, offset);
|
|
|
|
|
|
/* No journalling happens on data buffers when this function is used */
|
|
/* No journalling happens on data buffers when this function is used */
|
|
WARN_ON(page_has_buffers(page) && buffer_jbd(page_buffers(page)));
|
|
WARN_ON(page_has_buffers(page) && buffer_jbd(page_buffers(page)));
|
|
|
|
|
|
- block_invalidatepage(page, offset);
|
|
|
|
|
|
+ block_invalidatepage(page, offset, PAGE_CACHE_SIZE - offset);
|
|
}
|
|
}
|
|
|
|
|
|
static int __ext4_journalled_invalidatepage(struct page *page,
|
|
static int __ext4_journalled_invalidatepage(struct page *page,
|
|
@@ -3017,7 +3020,8 @@ static int __ext4_journalled_invalidatepage(struct page *page,
|
|
|
|
|
|
/* Wrapper for aops... */
|
|
/* Wrapper for aops... */
|
|
static void ext4_journalled_invalidatepage(struct page *page,
|
|
static void ext4_journalled_invalidatepage(struct page *page,
|
|
- unsigned long offset)
|
|
|
|
|
|
+ unsigned int offset,
|
|
|
|
+ unsigned int length)
|
|
{
|
|
{
|
|
WARN_ON(__ext4_journalled_invalidatepage(page, offset) < 0);
|
|
WARN_ON(__ext4_journalled_invalidatepage(page, offset) < 0);
|
|
}
|
|
}
|