f2fs: don't trigger read IO for beyond EOF page
In f2fs_mpage_readpages(), if page is beyond EOF, we should just zero out it, but previously, before checking previous mapping info, we missed to check filesize boundary, fix it. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
240a59156d
commit
86109c9064
|
@ -1551,6 +1551,9 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
|
||||||
if (last_block > last_block_in_file)
|
if (last_block > last_block_in_file)
|
||||||
last_block = last_block_in_file;
|
last_block = last_block_in_file;
|
||||||
|
|
||||||
|
/* just zeroing out page which is beyond EOF */
|
||||||
|
if (block_in_file >= last_block)
|
||||||
|
goto zero_out;
|
||||||
/*
|
/*
|
||||||
* Map blocks using the previous result first.
|
* Map blocks using the previous result first.
|
||||||
*/
|
*/
|
||||||
|
@ -1563,16 +1566,11 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
|
||||||
* Then do more f2fs_map_blocks() calls until we are
|
* Then do more f2fs_map_blocks() calls until we are
|
||||||
* done with this page.
|
* done with this page.
|
||||||
*/
|
*/
|
||||||
map.m_flags = 0;
|
map.m_lblk = block_in_file;
|
||||||
|
map.m_len = last_block - block_in_file;
|
||||||
|
|
||||||
if (block_in_file < last_block) {
|
if (f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT))
|
||||||
map.m_lblk = block_in_file;
|
goto set_error_page;
|
||||||
map.m_len = last_block - block_in_file;
|
|
||||||
|
|
||||||
if (f2fs_map_blocks(inode, &map, 0,
|
|
||||||
F2FS_GET_BLOCK_DEFAULT))
|
|
||||||
goto set_error_page;
|
|
||||||
}
|
|
||||||
got_it:
|
got_it:
|
||||||
if ((map.m_flags & F2FS_MAP_MAPPED)) {
|
if ((map.m_flags & F2FS_MAP_MAPPED)) {
|
||||||
block_nr = map.m_pblk + block_in_file - map.m_lblk;
|
block_nr = map.m_pblk + block_in_file - map.m_lblk;
|
||||||
|
@ -1587,6 +1585,7 @@ got_it:
|
||||||
DATA_GENERIC))
|
DATA_GENERIC))
|
||||||
goto set_error_page;
|
goto set_error_page;
|
||||||
} else {
|
} else {
|
||||||
|
zero_out:
|
||||||
zero_user_segment(page, 0, PAGE_SIZE);
|
zero_user_segment(page, 0, PAGE_SIZE);
|
||||||
if (!PageUptodate(page))
|
if (!PageUptodate(page))
|
||||||
SetPageUptodate(page);
|
SetPageUptodate(page);
|
||||||
|
|
Loading…
Reference in New Issue