diff options
| author | Jaegeuk Kim <jaegeuk@kernel.org> | 2017-04-11 19:01:26 -0700 |
|---|---|---|
| committer | Moyster <oysterized@gmail.com> | 2017-05-21 18:41:34 +0200 |
| commit | e661d56f2e45ca2d59730f728c04a47eb8c715dc (patch) | |
| tree | 16c5c6c0166c5cfa4764674f817273a0aa0b99ab /fs/f2fs/inode.c | |
| parent | 3ae77a6cb9af785511f8a4bbbfcb76331f3e89d4 (diff) | |
| download | android_kernel_m2note-e661d56f2e45ca2d59730f728c04a47eb8c715dc.tar.gz | |
f2fs: fix fs corruption due to zero inode page
This patch fixes the following scenario.
- f2fs_create/f2fs_mkdir - write_checkpoint
- f2fs_mark_inode_dirty_sync - block_operations
- f2fs_lock_all
- f2fs_sync_inode_meta
- f2fs_unlock_all
- sync_inode_metadata
- f2fs_lock_op
- f2fs_write_inode
- update_inode_page
- get_node_page
return -ENOENT
- new_inode_page
- fill_node_footer
- f2fs_mark_inode_dirty_sync
- ...
- f2fs_unlock_op
- f2fs_inode_synced
- f2fs_lock_all
- do_checkpoint
In this checkpoint, we can get an inode page which contains zeros having valid
node footer only.
Cc: <stable@vger.kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/inode.c')
| -rw-r--r-- | fs/f2fs/inode.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c index 8c42ad0f7..37e6b094e 100644 --- a/fs/f2fs/inode.c +++ b/fs/f2fs/inode.c @@ -316,7 +316,6 @@ retry: } else if (err != -ENOENT) { f2fs_stop_checkpoint(sbi, false); } - f2fs_inode_synced(inode); return 0; } ret = update_inode(inode, node_page); @@ -450,6 +449,7 @@ void handle_failed_inode(struct inode *inode) * in a panic when flushing dirty inodes in gdirty_list. */ update_inode_page(inode); + f2fs_inode_synced(inode); /* don't make bad inode, since it becomes a regular file. */ unlock_new_inode(inode); |
