aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/data.c
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk.kim@samsung.com>2013-05-20 10:10:29 +0900
committerJaegeuk Kim <jaegeuk.kim@samsung.com>2013-05-28 15:03:02 +0900
commit44a83ff6a81d84ab83bcb43a49ff1ba6c7e17cd1 (patch)
tree8b7c8b192d237ee774c0f1ab59f3a0007e463655 /fs/f2fs/data.c
parentf2fs: change get_new_data_page to pass a locked node page (diff)
downloadlinux-dev-44a83ff6a81d84ab83bcb43a49ff1ba6c7e17cd1.tar.xz
linux-dev-44a83ff6a81d84ab83bcb43a49ff1ba6c7e17cd1.zip
f2fs: update inode page after creation
I found a bug when testing power-off-recovery as follows. [Bug Scenario] 1. create a file 2. fsync the file 3. reboot w/o any sync 4. try to recover the file - found its fsync mark - found its dentry mark : try to recover its dentry - get its file name - get its parent inode number : here we got zero value The reason why we get the wrong parent inode number is that we didn't synchronize the inode page with its newly created inode information perfectly. Especially, previous f2fs stores fi->i_pino and writes it to the cached node page in a wrong order, which incurs the zero-valued i_pino during the recovery. So, this patch modifies the creation flow to fix the synchronization order of inode page with its inode. Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
Diffstat (limited to 'fs/f2fs/data.c')
-rw-r--r--fs/f2fs/data.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index af7454939362..c320f7f31327 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -279,6 +279,7 @@ repeat:
*
* Also, caller should grab and release a mutex by calling mutex_lock_op() and
* mutex_unlock_op().
+ * Note that, npage is set only by make_empty_dir.
*/
struct page *get_new_data_page(struct inode *inode,
struct page *npage, pgoff_t index, bool new_i_size)