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)
|
||||
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.
|
||||
*/
|
||||
|
@ -1563,16 +1566,11 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
|
|||
* Then do more f2fs_map_blocks() calls until we are
|
||||
* 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) {
|
||||
map.m_lblk = block_in_file;
|
||||
map.m_len = last_block - block_in_file;
|
||||
|
||||
if (f2fs_map_blocks(inode, &map, 0,
|
||||
F2FS_GET_BLOCK_DEFAULT))
|
||||
goto set_error_page;
|
||||
}
|
||||
if (f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT))
|
||||
goto set_error_page;
|
||||
got_it:
|
||||
if ((map.m_flags & F2FS_MAP_MAPPED)) {
|
||||
block_nr = map.m_pblk + block_in_file - map.m_lblk;
|
||||
|
@ -1587,6 +1585,7 @@ got_it:
|
|||
DATA_GENERIC))
|
||||
goto set_error_page;
|
||||
} else {
|
||||
zero_out:
|
||||
zero_user_segment(page, 0, PAGE_SIZE);
|
||||
if (!PageUptodate(page))
|
||||
SetPageUptodate(page);
|
||||
|
|
Loading…
Reference in New Issue