1. 24 9月, 2014 1 次提交
    • J
      f2fs: fix conditions to remain recovery information in f2fs_sync_file · 88bd02c9
      Jaegeuk Kim 提交于
      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: NHuang Ying <ying.huang@intel.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      88bd02c9
  2. 16 9月, 2014 1 次提交
  3. 10 9月, 2014 1 次提交
  4. 04 9月, 2014 1 次提交
  5. 22 8月, 2014 2 次提交
    • J
      f2fs: avoid double lock in truncate_blocks · 764aa3e9
      Jaegeuk Kim 提交于
      The init_inode_metadata calls truncate_blocks when error is occurred.
      The callers holds f2fs_lock_op, so we should not call it again in
      truncate_blocks.
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      764aa3e9
    • J
      f2fs: handle EIO not to break fs consistency · cf779cab
      Jaegeuk Kim 提交于
      There are two rules when EIO is occurred.
      1. don't write any checkpoint data to preserve the previous checkpoint
      2. don't lose the cached dentry/node/meta pages
      
      So, at first, this patch adds set_page_dirty in f2fs_write_end_io's failure.
      Then, writing checkpoint/dentry/node blocks is not allowed.
      
      Note that, for the data pages, we can't just throw away by redirtying them.
      Otherwise, kworker can fall into infinite loop to flush them.
      (Ref. xfstests/019)
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      cf779cab
  6. 20 8月, 2014 2 次提交
  7. 02 8月, 2014 1 次提交
  8. 29 7月, 2014 2 次提交
  9. 25 7月, 2014 1 次提交
  10. 10 7月, 2014 2 次提交
  11. 23 6月, 2014 1 次提交
  12. 08 6月, 2014 1 次提交
  13. 04 6月, 2014 1 次提交
  14. 07 5月, 2014 15 次提交
  15. 02 4月, 2014 1 次提交
  16. 01 4月, 2014 1 次提交
  17. 18 3月, 2014 3 次提交
  18. 28 2月, 2014 1 次提交
    • C
      f2fs: fix dirty page accounting when redirty · 9cf3c389
      Chao Yu 提交于
      We should de-account dirty counters for page when redirty in ->writepage().
      
      Wu Fengguang described in 'commit 971767ca':
      "writeback: fix dirtied pages accounting on redirty
      De-account the accumulative dirty counters on page redirty.
      
      Page redirties (very common in ext4) will introduce mismatch between
      counters (a) and (b)
      
      a) NR_DIRTIED, BDI_DIRTIED, tsk->nr_dirtied
      b) NR_WRITTEN, BDI_WRITTEN
      
      This will introduce systematic errors in balanced_rate and result in
      dirty page position errors (ie. the dirty pages are no longer balanced
      around the global/bdi setpoints)."
      Signed-off-by: NChao Yu <chao2.yu@samsung.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      9cf3c389
  19. 24 2月, 2014 1 次提交
    • J
      f2fs: fix not to write data pages on the page reclaiming path · 8618b881
      Jaegeuk Kim 提交于
      Even if f2fs_write_data_page is called by the page reclaiming path, we should
      not write the page to provide enough free segments for the worst case scenario.
      Otherwise, f2fs can face with no free segment while gc is conducted, resulting
      in:
      
       ------------[ cut here ]------------
       kernel BUG at /home/zeus/f2fs_test/src/fs/f2fs/segment.c:565!
       RIP: 0010:[<ffffffffa02c3b11>]  [<ffffffffa02c3b11>] new_curseg+0x331/0x340 [f2fs]
       Call Trace:
        allocate_segment_by_default+0x204/0x280 [f2fs]
        allocate_data_block+0x108/0x210 [f2fs]
        write_data_page+0x8a/0xc0 [f2fs]
        do_write_data_page+0xe1/0x2a0 [f2fs]
        move_data_page+0x8a/0xf0 [f2fs]
        f2fs_gc+0x446/0x970 [f2fs]
        f2fs_balance_fs+0xb6/0xd0 [f2fs]
        f2fs_write_begin+0x50/0x350 [f2fs]
        ? unlock_page+0x27/0x30
        ? unlock_page+0x27/0x30
        generic_file_buffered_write+0x10a/0x280
        ? file_update_time+0xa3/0xf0
        __generic_file_aio_write+0x1c8/0x3d0
        ? generic_file_aio_write+0x52/0xb0
        ? generic_file_aio_write+0x52/0xb0
        generic_file_aio_write+0x65/0xb0
        do_sync_write+0x5a/0x90
        vfs_write+0xc5/0x1f0
        SyS_write+0x55/0xa0
        system_call_fastpath+0x16/0x1b
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      8618b881
  20. 17 2月, 2014 1 次提交