1. 03 1月, 2018 1 次提交
  2. 06 11月, 2017 2 次提交
  3. 26 10月, 2017 2 次提交
    • C
      f2fs: fix to correct no_fggc_candidate · 7e515b31
      Chao Yu 提交于
      There may be extreme case as below:
      
      For one section contains one segment, and there are total 100 segments
      with 10% over-privision ratio in f2fs partition, fggc_threshold will
      be rounded down to 460 instead of 460.8 as below caclulation:
      
      sbi->fggc_threshold = div_u64((u64)(main_count - ovp_count) *
      			BLKS_PER_SEC(sbi), (main_count - resv_count));
      
      If section usage is as:
      60 segments which contain 460 valid blocks
      40 segments which contain 462 valid blocks
      
      As valid block number in all sections is large than fggc_threshold, so
      none of them will be chosen as candidate due to incorrect fggc_threshold.
      
      Let's just soften the term of choosing foreground GC candidates.
      Signed-off-by: NChao Yu <yuchao0@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      7e515b31
    • C
      f2fs: split discard policy · 78997b56
      Chao Yu 提交于
      There are many different scenarios such as fstrim, umount, urgent or
      background where we will issue discards, actually, they need use
      different policy in aspect of io aware, discard granularity, delay
      interval and so on. But now they just share one common discard policy,
      so there will be race when changing policy in between these scenarios,
      the interference of changing discard policy will be very serious.
      
      This patch changes to split discard policy for different scenarios.
      Signed-off-by: NChao Yu <yuchao0@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      78997b56
  4. 12 9月, 2017 1 次提交
  5. 30 8月, 2017 1 次提交
  6. 22 8月, 2017 1 次提交
  7. 16 8月, 2017 1 次提交
  8. 24 5月, 2017 1 次提交
    • J
      f2fs: split bio cache · a912b54d
      Jaegeuk Kim 提交于
      Split DATA/NODE type bio cache according to different temperature,
      so write IOs with the same temperature can be merged in corresponding
      bio cache as much as possible, otherwise, different temperature write
      IOs submitting into one bio cache will always cause split of bio.
      Signed-off-by: NChao Yu <yuchao0@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      a912b54d
  9. 09 5月, 2017 1 次提交
  10. 03 5月, 2017 1 次提交
  11. 25 4月, 2017 2 次提交
  12. 20 4月, 2017 1 次提交
    • H
      f2fs: introduce async IPU policy · 04485987
      Hou Pengyang 提交于
      This patch introduces an ASYNC IPU policy.
      
      Under senario of large # of async updating(e.g. log writing in Android),
      disk would be seriously fragmented, and higher frequent gc would be triggered.
      
      This patch uses IPU to rewrite the async update writting, since async is
      NOT sensitive to io latency.
      Signed-off-by: NHou Pengyang <houpengyang@huawei.com>
      04485987
  13. 11 4月, 2017 4 次提交
  14. 06 4月, 2017 1 次提交
  15. 30 3月, 2017 1 次提交
  16. 28 2月, 2017 1 次提交
  17. 24 2月, 2017 1 次提交
    • H
      f2fs: add ovp valid_blocks check for bg gc victim to fg_gc · e93b9865
      Hou Pengyang 提交于
      For foreground gc, greedy algorithm should be adapted, which makes
      this formula work well:
      
      	(2 * (100 / config.overprovision + 1) + 6)
      
      But currently, we fg_gc have a prior to select bg_gc victim segments to gc
      first, these victims are selected by cost-benefit algorithm, we can't guarantee
      such segments have the small valid blocks, which may destroy the f2fs rule, on
      the worstest case, would consume all the free segments.
      
      This patch fix this by add a filter in check_bg_victims, if segment's has # of
      valid blocks over overprovision ratio, skip such segments.
      
      Cc: <stable@vger.kernel.org>
      Signed-off-by: NHou Pengyang <houpengyang@huawei.com>
      Reviewed-by: NChao Yu <yuchao0@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      e93b9865
  18. 23 2月, 2017 2 次提交
  19. 29 1月, 2017 1 次提交
    • J
      f2fs: support IO alignment for DATA and NODE writes · 0a595eba
      Jaegeuk Kim 提交于
      This patch implements IO alignment by filling dummy blocks in DATA and NODE
      write bios. If we can guarantee, for example, 32KB or 64KB for such the IOs,
      we can eliminate underlying dummy page problem which FTL conducts in order to
      close MLC or TLC partial written pages.
      
      Note that,
       - it requires "-o mode=lfs".
       - IO size should be power of 2, not exceed BIO_MAX_PAGES, 256.
       - read IO is still 4KB.
       - do checkpoint at fsync, if dummy NODE page was written.
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      0a595eba
  20. 08 12月, 2016 1 次提交
  21. 24 11月, 2016 2 次提交
  22. 13 9月, 2016 1 次提交
  23. 25 8月, 2016 1 次提交
    • Y
      f2fs: not allow to write illegal blkaddr · bb413d6a
      Yunlei He 提交于
      we came across an error as below:
      
      [build_nat_area_bitmap:1710] nid[0x    1718] addr[0x         1c18ddc] ino[0x    1718]
      [build_nat_area_bitmap:1710] nid[0x    1719] addr[0x         1c193d5] ino[0x    1719]
      [build_nat_area_bitmap:1710] nid[0x    171a] addr[0x         1c1736e] ino[0x    171a]
      [build_nat_area_bitmap:1710] nid[0x    171b] addr[0x        58b3ee8f] ino[0x815f92ed]
      [build_nat_area_bitmap:1710] nid[0x    171c] addr[0x         fcdc94b] ino[0x49366377]
      [build_nat_area_bitmap:1710] nid[0x    171d] addr[0x        7cd2facf] ino[0xb3c55300]
      [build_nat_area_bitmap:1710] nid[0x    171e] addr[0x        bd4e25d0] ino[0x77c34c09]
      
      ... ...
      
      [build_nat_area_bitmap:1710] nid[0x    1718] addr[0x         1c18ddc] ino[0x    1718]
      [build_nat_area_bitmap:1710] nid[0x    1719] addr[0x         1c193d5] ino[0x    1719]
      [build_nat_area_bitmap:1710] nid[0x    171a] addr[0x         1c1736e] ino[0x    171a]
      [build_nat_area_bitmap:1710] nid[0x    171b] addr[0x        58b3ee8f] ino[0x815f92ed]
      [build_nat_area_bitmap:1710] nid[0x    171c] addr[0x         fcdc94b] ino[0x49366377]
      [build_nat_area_bitmap:1710] nid[0x    171d] addr[0x        7cd2facf] ino[0xb3c55300]
      [build_nat_area_bitmap:1710] nid[0x    171e] addr[0x        bd4e25d0] ino[0x77c34c09]
      
      One nat block may be stepped by a data block, so this patch forbid to
      write if the blkaddr is illegal
      Signed-off-by: NYunlei He <heyunlei@huawei.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      bb413d6a
  24. 16 7月, 2016 1 次提交
  25. 07 7月, 2016 1 次提交
  26. 14 6月, 2016 1 次提交
  27. 03 6月, 2016 3 次提交
  28. 08 5月, 2016 1 次提交
  29. 23 2月, 2016 2 次提交
    • C
      f2fs: split journal cache from curseg cache · b7ad7512
      Chao Yu 提交于
      In curseg cache, f2fs caches two different parts:
       - datas of current summay block, i.e. summary entries, footer info.
       - journal info, i.e. sparse nat/sit entries or io stat info.
      
      With this approach, 1) it may cause higher lock contention when we access
      or update both of the parts of cache since we use the same mutex lock
      curseg_mutex to protect the cache. 2) current summary block with last
      journal info will be writebacked into device as a normal summary block
      when flushing, however, we treat journal info as valid one only in current
      summary, so most normal summary blocks contain junk journal data, it wastes
      remaining space of summary block.
      
      So, in order to fix above issues, we split curseg cache into two parts:
      a) current summary block, protected by original mutex lock curseg_mutex
      b) journal cache, protected by newly introduced r/w semaphore journal_rwsem
      
      When loading curseg cache during ->mount, we store summary info and
      journal info into different caches; When doing checkpoint, we combine
      datas of two cache into current summary block for persisting.
      Signed-off-by: NChao Yu <chao2.yu@samsung.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      b7ad7512
    • C
      f2fs: support revoking atomic written pages · 28bc106b
      Chao Yu 提交于
      f2fs support atomic write with following semantics:
      1. open db file
      2. ioctl start atomic write
      3. (write db file) * n
      4. ioctl commit atomic write
      5. close db file
      
      With this flow we can avoid file becoming corrupted when abnormal power
      cut, because we hold data of transaction in referenced pages linked in
      inmem_pages list of inode, but without setting them dirty, so these data
      won't be persisted unless we commit them in step 4.
      
      But we should still hold journal db file in memory by using volatile
      write, because our semantics of 'atomic write support' is incomplete, in
      step 4, we could fail to submit all dirty data of transaction, once
      partial dirty data was committed in storage, then after a checkpoint &
      abnormal power-cut, db file will be corrupted forever.
      
      So this patch tries to improve atomic write flow by adding a revoking flow,
      once inner error occurs in committing, this gives another chance to try to
      revoke these partial submitted data of current transaction, it makes
      committing operation more like aotmical one.
      
      If we're not lucky, once revoking operation was failed, EAGAIN will be
      reported to user for suggesting doing the recovery with held journal file,
      or retrying current transaction again.
      Signed-off-by: NChao Yu <chao2.yu@samsung.com>
      Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
      28bc106b