summaryrefslogtreecommitdiffstats
path: root/fs/f2fs
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2015-10-19 19:29:51 +0200
committerJaegeuk Kim <jaegeuk@kernel.org>2015-10-20 20:33:11 +0200
commit1d373a0ef7a7bc08f95ca820c627e961fb21e188 (patch)
tree77dcb78b91ed83d9595d2232f8ceaa764f3d73fa /fs/f2fs
parentf2fs: relocate the tracepoint for background_gc (diff)
downloadlinux-1d373a0ef7a7bc08f95ca820c627e961fb21e188.tar.xz
linux-1d373a0ef7a7bc08f95ca820c627e961fb21e188.zip
f2fs: flush dirty data for bmap
Users expect bmap will give allocated block addresses. Let's play likewise ext4. Reviewed-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs')
-rw-r--r--fs/f2fs/data.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index 77dfc9eee380..b052e7c262ac 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1667,12 +1667,13 @@ static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
{
struct inode *inode = mapping->host;
- /* we don't need to use inline_data strictly */
- if (f2fs_has_inline_data(inode)) {
- int err = f2fs_convert_inline_inode(inode);
- if (err)
- return err;
- }
+ if (f2fs_has_inline_data(inode))
+ return 0;
+
+ /* make sure allocating whole blocks */
+ if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
+ filemap_write_and_wait(mapping);
+
return generic_block_bmap(mapping, block, get_data_block_bmap);
}