diff options
| author | Chao Yu <yuchao0@huawei.com> | 2016-10-11 22:57:04 +0800 |
|---|---|---|
| committer | Jaegeuk Kim <jaegeuk@google.com> | 2017-09-25 15:04:54 -0700 |
| commit | 9e3d0bf6d3714bc3481e32828bd56eecc0700d29 (patch) | |
| tree | d0b4a7da46dbcc57d3e187f74ba2a2e5dac487de | |
| parent | 332f40b43f2f4a86eec4a2aaf1d3e3295ed673f2 (diff) | |
f2fs: be aware of extent beyond EOF in fiemap
commit 58736fa60f6ae659ac72da8b1580c308b47e8edd upstream.
f2fs can support fallocating blocks beyond file size without changing the
size, but ->fiemap of f2fs was restricted and can't detect these extents
fallocated past EOF, now relieve the restriction.
Signed-off-by: Chao Yu <yuchao0@huawei.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
| -rw-r--r-- | fs/f2fs/data.c | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index c390542917e4..0cdabfce6c17 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -881,7 +881,6 @@ int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, struct buffer_head map_bh; sector_t start_blk, last_blk; pgoff_t next_pgofs; - loff_t isize; u64 logical = 0, phys = 0, size = 0; u32 flags = 0; int ret = 0; @@ -898,13 +897,6 @@ int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, inode_lock(inode); - isize = i_size_read(inode); - if (start >= isize) - goto out; - - if (start + len > isize) - len = isize - start; - if (logical_to_blk(inode, len) == 0) len = blk_to_logical(inode, 1); @@ -923,13 +915,11 @@ next: /* HOLE */ if (!buffer_mapped(&map_bh)) { start_blk = next_pgofs; - /* Go through holes util pass the EOF */ - if (blk_to_logical(inode, start_blk) < isize) + + if (blk_to_logical(inode, start_blk) < blk_to_logical(inode, + F2FS_I_SB(inode)->max_file_blocks)) goto prep_next; - /* Found a hole beyond isize means no more extents. - * Note that the premise is that filesystems don't - * punch holes beyond isize and keep size unchanged. - */ + flags |= FIEMAP_EXTENT_LAST; } |
