aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/data.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2015-02-25 22:25:01 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2015-04-10 18:08:26 -0400
commit2bca1e2388a8a9e8a3db0daf54fcc124516a3e83 (patch)
treee16f44f83f83a18ab3785f336812fb64d71a1023 /fs/f2fs/data.c
parent3c64298579a1343cbdf3d2f17adf774a58546aae (diff)
f2fs: clear page's up-to-date if block was deallocated
If page's on-disk block was deallocated, let's remove up-to-date flag to avoid further access with wrong contents. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/data.c')
-rw-r--r--fs/f2fs/data.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index ae5c41444e8f..62e31b2aa131 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1259,8 +1259,10 @@ int do_write_data_page(struct page *page, struct f2fs_io_info *fio)
1259 fio->blk_addr = dn.data_blkaddr; 1259 fio->blk_addr = dn.data_blkaddr;
1260 1260
1261 /* This page is already truncated */ 1261 /* This page is already truncated */
1262 if (fio->blk_addr == NULL_ADDR) 1262 if (fio->blk_addr == NULL_ADDR) {
1263 ClearPageUptodate(page);
1263 goto out_writepage; 1264 goto out_writepage;
1265 }
1264 1266
1265 set_page_writeback(page); 1267 set_page_writeback(page);
1266 1268
@@ -1355,6 +1357,8 @@ done:
1355 clear_cold_data(page); 1357 clear_cold_data(page);
1356out: 1358out:
1357 inode_dec_dirty_pages(inode); 1359 inode_dec_dirty_pages(inode);
1360 if (err)
1361 ClearPageUptodate(page);
1358 unlock_page(page); 1362 unlock_page(page);
1359 if (need_balance_fs) 1363 if (need_balance_fs)
1360 f2fs_balance_fs(sbi); 1364 f2fs_balance_fs(sbi);