diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-06-30 18:09:55 +0900 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-07-09 05:59:31 -0700 |
commit | b2c0829912493df596706a1a036c67beb1bd6ff5 (patch) | |
tree | c5a59caddd99f7c354813c2c36f6bf74857ea722 /virt | |
parent | dd4d961fe7d1cb1cba6e9d8d132475d4917ba864 (diff) | |
download | linux-stable-b2c0829912493df596706a1a036c67beb1bd6ff5.tar.gz linux-stable-b2c0829912493df596706a1a036c67beb1bd6ff5.tar.bz2 linux-stable-b2c0829912493df596706a1a036c67beb1bd6ff5.zip |
f2fs: do checkpoint for the renamed inode
If an inode is renamed, it should be registered as file_lost_pino to conduct
checkpoint at f2fs_sync_file.
Otherwise, the inode cannot be recovered due to no dent_mark in the following
scenario.
Note that, this scenario is from xfstests/322.
1. create "a"
2. fsync "a"
3. rename "a" to "b"
4. fsync "b"
5. Sudden power-cut
After recovery is done, "b" should be seen.
However, the result shows "a", since the recovery procedure does not enter
recover_dentry due to no dent_mark.
The reason is like below.
- The nid of "a" is checkpointed during #2, f2fs_sync_file.
- The inode page for "b" produced by #3 is written without dent_mark by
sync_node_pages.
So, this patch fixes this bug by assinging file_lost_pino to the "a"'s inode.
If the pino is lost, f2fs_sync_file conducts checkpoint, and then recovers
the latest pino and its dentry information for further recovery.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'virt')
0 files changed, 0 insertions, 0 deletions