From: Daeho Jeong <daehoje...@google.com>

Need to add block address range check to compressed file case and
avoid calling get_data_block_bmap() for compressed file.

Signed-off-by: Daeho Jeong <daehoje...@google.com>
---
 fs/f2fs/data.c | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index c1b676be67b9..48cab85205e2 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1755,10 +1755,6 @@ static int get_data_block_dio(struct inode *inode, 
sector_t iblock,
 static int get_data_block_bmap(struct inode *inode, sector_t iblock,
                        struct buffer_head *bh_result, int create)
 {
-       /* Block number less than F2FS MAX BLOCKS */
-       if (unlikely(iblock >= F2FS_I_SB(inode)->max_file_blocks))
-               return -EFBIG;
-
        return __get_data_block(inode, iblock, bh_result, create,
                                                F2FS_GET_BLOCK_BMAP, NULL,
                                                NO_CHECK_TYPE, create);
@@ -3753,11 +3749,16 @@ static sector_t f2fs_bmap(struct address_space 
*mapping, sector_t block)
        if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
                filemap_write_and_wait(mapping);
 
-       if (f2fs_compressed_file(inode))
-               blknr = f2fs_bmap_compress(inode, block);
+       /* Block number less than F2FS MAX BLOCKS */
+       if (unlikely(block >= F2FS_I_SB(inode)->max_file_blocks))
+               goto out;
 
-       if (!get_data_block_bmap(inode, block, &tmp, 0))
-               blknr = tmp.b_blocknr;
+       if (f2fs_compressed_file(inode)) {
+               blknr = f2fs_bmap_compress(inode, block);
+       } else {
+               if (!get_data_block_bmap(inode, block, &tmp, 0))
+                       blknr = tmp.b_blocknr;
+       }
 out:
        trace_f2fs_bmap(inode, block, blknr);
        return blknr;
-- 
2.28.0.402.g5ffc5be6b7-goog

Reply via email to