f2fs: update inode page after creation
authorJaegeuk Kim <jaegeuk.kim@samsung.com>
Mon, 20 May 2013 01:10:29 +0000 (10:10 +0900)
committerChanho Park <chanho61.park@samsung.com>
Tue, 18 Nov 2014 02:43:45 +0000 (11:43 +0900)
commitafde31f3a7a4e80f7f288a60bd37a1ad7b55cf10
tree7f028a0485957f7252a591377be6a08d53b99512
parentc36d6d6085e40f33faa101e48638f70d14affda1
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>
fs/f2fs/data.c
fs/f2fs/dir.c
fs/f2fs/f2fs.h
fs/f2fs/node.c