diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-07-13 17:44:14 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2015-07-25 08:54:25 -0700 |
commit | 548aedac5128e4bb256bab5c8e1db88e626697fc (patch) | |
tree | 2469f4784afd19e535858247dea683888daa0420 /fs | |
parent | 33b40178cb3bd75294d1a758b3f509a0d38682ab (diff) | |
download | lwn-548aedac5128e4bb256bab5c8e1db88e626697fc.tar.gz lwn-548aedac5128e4bb256bab5c8e1db88e626697fc.zip |
f2fs: handle error cases in move_encrypted_block
This patch fixes some missing error handlers.
Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/f2fs/gc.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index e1e73617d13b..883a841dfc6d 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -556,27 +556,34 @@ static void move_encrypted_block(struct inode *inode, block_t bidx) if (!fio.encrypted_page) goto put_out; - f2fs_submit_page_bio(&fio); + err = f2fs_submit_page_bio(&fio); + if (err) + goto put_page_out; + + /* write page */ + lock_page(fio.encrypted_page); + + if (unlikely(!PageUptodate(fio.encrypted_page))) + goto put_page_out; + if (unlikely(fio.encrypted_page->mapping != META_MAPPING(fio.sbi))) + goto put_page_out; + + set_page_writeback(fio.encrypted_page); /* allocate block address */ f2fs_wait_on_page_writeback(dn.node_page, NODE); - allocate_data_block(fio.sbi, NULL, fio.blk_addr, &fio.blk_addr, &sum, CURSEG_COLD_DATA); - dn.data_blkaddr = fio.blk_addr; - - /* write page */ - lock_page(fio.encrypted_page); - set_page_writeback(fio.encrypted_page); fio.rw = WRITE_SYNC; f2fs_submit_page_mbio(&fio); + dn.data_blkaddr = fio.blk_addr; set_data_blkaddr(&dn); f2fs_update_extent_cache(&dn); set_inode_flag(F2FS_I(inode), FI_APPEND_WRITE); if (page->index == 0) set_inode_flag(F2FS_I(inode), FI_FIRST_BLOCK_WRITTEN); - +put_page_out: f2fs_put_page(fio.encrypted_page, 1); put_out: f2fs_put_dnode(&dn); |