linux/fs/f2fs
Jaegeuk Kim 88bd02c947 f2fs: fix conditions to remain recovery information in f2fs_sync_file
This patch revisited whole the recovery information during the f2fs_sync_file.

In this patch, there are three information to make a decision.

a) IS_CHECKPOINTED,	/* is it checkpointed before? */
b) HAS_FSYNCED_INODE,	/* is the inode fsynced before? */
c) HAS_LAST_FSYNC,	/* has the latest node fsync mark? */

And, the scenarios for our rule are based on:

[Term] F: fsync_mark, D: dentry_mark

1. inode(x) | CP | inode(x) | dnode(F)
2. inode(x) | CP | inode(F) | dnode(F)
3. inode(x) | CP | dnode(F) | inode(x) | inode(F)
4. inode(x) | CP | dnode(F) | inode(F)
5. CP | inode(x) | dnode(F) | inode(DF)
6. CP | inode(DF) | dnode(F)
7. CP | dnode(F) | inode(DF)
8. CP | dnode(F) | inode(x) | inode(DF)

For example, #3, the three conditions should be changed as follows.

   inode(x) | CP | dnode(F) | inode(x) | inode(F)
a)    x       o      o          o          o
b)    x       x      x          x          o
c)    x       o      o          x          o

If f2fs_sync_file stops   ------^,
 it should write inode(F)    --------------^

So, the need_inode_block_update should return true, since
 c) get_nat_flag(e, HAS_LAST_FSYNC), is false.

For example, #8,
      CP | alloc | dnode(F) | inode(x) | inode(DF)
a)    o      x        x          x          x
b)    x               x          x          o
c)    o               o          x          o

If f2fs_sync_file stops   -------^,
 it should write inode(DF)    --------------^

Note that, the roll-forward policy should follow this rule, which means,
if there are any missing blocks, we doesn't need to recover that inode.

Signed-off-by: Huang Ying <ying.huang@intel.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
2014-09-23 11:10:15 -07:00
..
acl.c f2fs: remove the redundant validation check of acl 2014-07-09 14:04:25 -07:00
acl.h f2fs: use generic posix ACL infrastructure 2014-01-25 23:58:19 -05:00
checkpoint.c f2fs: use meta_inode cache to improve roll-forward speed 2014-09-23 11:10:12 -07:00
data.c f2fs: fix conditions to remain recovery information in f2fs_sync_file 2014-09-23 11:10:15 -07:00
debug.c f2fs: fix typo 2014-08-19 10:01:33 -07:00
dir.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
f2fs.h f2fs: fix conditions to remain recovery information in f2fs_sync_file 2014-09-23 11:10:15 -07:00
file.c f2fs: fix conditions to remain recovery information in f2fs_sync_file 2014-09-23 11:10:15 -07:00
gc.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
gc.h f2fs: fix typo 2014-08-19 10:01:33 -07:00
hash.c f2fs: fix wrong casting for dentry name 2014-08-29 00:26:50 -07:00
inline.c f2fs: need fsck.f2fs when f2fs_bug_on is triggered 2014-09-09 13:15:02 -07:00
inode.c f2fs: expand counting dirty pages in the inode page cache 2014-09-16 04:10:39 -07:00
Kconfig f2fs: fix typo 2014-08-19 10:01:33 -07:00
Makefile f2fs: key functions to handle inline data 2013-12-26 20:40:09 +09:00
namei.c f2fs: introduce F2FS_I_SB, F2FS_M_SB, and F2FS_P_SB 2014-09-03 17:37:13 -07:00
node.c f2fs: fix conditions to remain recovery information in f2fs_sync_file 2014-09-23 11:10:15 -07:00
node.h f2fs: fix conditions to remain recovery information in f2fs_sync_file 2014-09-23 11:10:15 -07:00
recovery.c f2fs: use meta_inode cache to improve roll-forward speed 2014-09-23 11:10:12 -07:00
segment.c f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
segment.h f2fs: use meta_inode cache to improve roll-forward speed 2014-09-23 11:10:12 -07:00
super.c f2fs: give an option to enable in-place-updates during fsync to users 2014-09-16 04:10:44 -07:00
xattr.c f2fs: need fsck.f2fs when f2fs_bug_on is triggered 2014-09-09 13:15:02 -07:00
xattr.h f2fs: pass flags field to setxattr functions 2014-05-07 10:21:56 +09:00