1. 22 1月, 2014 2 次提交
  2. 20 1月, 2014 1 次提交
  3. 08 1月, 2014 1 次提交
    • J
      f2fs: improve write performance under frequent fsync calls · fb5566da
      Jaegeuk Kim 提交于
      When considering a bunch of data writes with very frequent fsync calls, we
      are able to think the following performance regression.
      
      N: Node IO, D: Data IO, IO scheduler: cfq
      
      Issue    pending IOs
      	 D1 D2 D3 D4
       D1         D2 D3 D4 N1
       D2            D3 D4 N1 N2
       N1            D3 D4 N2 D1
       --> N1 can be selected by cfq becase of the same priority of N and D.
           Then D3 and D4 would be delayed, resuling in performance degradation.
      
      So, when processing the fsync call, it'd better give higher priority to data IOs
      than node IOs by assigning WRITE and WRITE_SYNC respectively.
      This patch improves the random wirte performance with frequent fsync calls by up
      to 10%.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      fb5566da
  4. 06 1月, 2014 1 次提交
    • S
      f2fs: fix truncate_partial_nodes bug · a225dca3
      shifei10.ge 提交于
      The truncate_partial_nodes puts pages incorrectly in the following two cases.
      Note that the value for argc 'depth' can only be 2 or 3.
      Please see truncate_inode_blocks() and truncate_partial_nodes().
      
      1) An err is occurred in the first 'for' loop
        When err is occurred with depth = 2, pages[0] is invalid, so this page doesn't
        need to be put. There is no problem, however, when depth is 3, it doesn't put
        the pages correctly where pages[0] is valid and pages[1] is invalid.
        In this case, depth is set to 2 (ref to statemnt depth = i + 1), and then
        'goto fail'.
        In label 'fail', for (i = depth - 3; i >= 0; i--) cannot meet the condition
        because i = -1, so pages[0] cann't be put.
      
      2) An err happened in the second 'for' loop
        Now we've got pages[0] with depth = 2, or we've got pages[0] and pages[1]
        with depth = 3. When an err is detected, we need 'goto fail' to put such
        the pages.
        When depth is 2, in label 'fail', for (i = depth - 3; i >= 0; i--) cann't
        meet the condition because i = -1, so pages[0] cann't be put.
        When depth is 3, in label 'fail', for (i = depth - 3; i >= 0; i--) can
        only put pages[0], pages[1] also cann't be put.
      
      Note that 'depth' has been changed before first 'goto fail' (ref to statemnt
      depth = i + 1), so passing this modified 'depth' to the tracepoint,
      trace_f2fs_truncate_partial_nodes, is also incorrect.
      Signed-off-by: NShifei Ge <shifei10.ge@samsung.com>
      [Jaegeuk Kim: modify the description and fix one bug]
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      a225dca3
  5. 26 12月, 2013 1 次提交
  6. 23 12月, 2013 13 次提交
  7. 04 11月, 2013 1 次提交
  8. 31 10月, 2013 1 次提交
  9. 29 10月, 2013 1 次提交
  10. 25 10月, 2013 4 次提交
  11. 22 10月, 2013 1 次提交
  12. 18 10月, 2013 1 次提交
  13. 05 9月, 2013 1 次提交
    • J
      f2fs: merge more bios of node block writes · 423e95cc
      Jaegeuk Kim 提交于
      Previously, we experience bio traces as follows when running simple sequential
      write test.
      
       f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500104928, size = 4K
       f2fs_do_submit_bio: type = NODE, io = no sync, sector = 499922208, size = 368K
       f2fs_do_submit_bio: type = NODE, io = no sync, sector = 499914752, size = 140K
      
       -> total 512K
      
      The first one is to write an indirect node block, and the others are to write
      direct node blocks.
      
      The reason why there are two separate bios for direct node blocks is:
      0. initial state
      ------------------    ------------------
      |                |    |xxxxxxxx        |
      ------------------    ------------------
      
      1. write 368K
      ------------------    ------------------
      |                |    |xxxxxxxxWWWWWWWW|
      ------------------    ------------------
      
      2. write 140K
      ------------------    ------------------
      |WWWWWWW         |    |xxxxxxxxWWWWWWWW|
      ------------------    ------------------
      
      This is because f2fs_write_node_pages tries to write just 512K totally, so that
      we can lose the chance to merge more bios nicely.
      
      After this patch is applied, we can get the following bio traces.
      
        f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500103168, size = 8K
        f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500111368, size = 4K
        f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500107272, size = 512K
        f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500108296, size = 512K
        f2fs_do_submit_bio: type = NODE, io = no sync, sector = 500109320, size = 500K
      
      And finally, we can improve the sequential write performance,
          from 458.775 MB/s to 479.945 MB/s on SSD.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      423e95cc
  14. 26 8月, 2013 3 次提交
    • J
      f2fs: support the inline xattrs · 65985d93
      Jaegeuk Kim 提交于
      0. modified inode structure
      --------------------------------------
      metadata (e.g., i_mtime, i_ctime, etc)
      --------------------------------------
      direct pointers [0 ~ 873]
      
      inline xattrs (200 bytes by default)
      
      indirect pointers [0 ~ 4]
      --------------------------------------
      node footer
      --------------------------------------
      
      1. setxattr flow
       - read_all_xattrs copies all the xattrs from inline and xattr node block.
       - handle xattr entries
       - write_all_xattrs copies modified xattrs into inline and xattr node block.
      
      2. getxattr flow
       - read_all_xattrs copies all the xattrs from inline and xattr node block.
       - check target entries
      
      3. Usage
       # mount -t f2fs -o inline_xattr $DEV $MNT
      
       Once mounted with the inline_xattr option, f2fs marks all the newly created
       files to reserve an amount of inline xattr space explicitly inside the inode
       block. Without the mount option, f2fs will not touch any existing files and
       newly created files as well.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      65985d93
    • J
      f2fs: add the truncate_xattr_node function · 4f16fb0f
      Jaegeuk Kim 提交于
      The truncate_xattr_node function will be used by inline xattr.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      4f16fb0f
    • J
      f2fs: reserve the xattr space dynamically · de93653f
      Jaegeuk Kim 提交于
      This patch enables the number of direct pointers inside on-disk inode block to
      be changed dynamically according to the size of inline xattr space.
      
      The number of direct pointers, ADDRS_PER_INODE, can be changed only if the file
      has inline xattr flag.
      
      The number of direct pointers that will be used by inline xattrs is defined as
      F2FS_INLINE_XATTR_ADDRS.
      Current patch assigns F2FS_INLINE_XATTR_ADDRS to 0 temporarily.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      de93653f
  15. 19 8月, 2013 1 次提交
  16. 12 8月, 2013 3 次提交
  17. 30 7月, 2013 1 次提交
  18. 11 6月, 2013 1 次提交
    • J
      f2fs: support xattr security labels · 8ae8f162
      Jaegeuk Kim 提交于
      This patch adds the support of security labels for f2fs, which will be used
      by Linus Security Models (LSMs).
      
      Quote from http://en.wikipedia.org/wiki/Linux_Security_Modules:
      "Linux Security Modules (LSM) is a framework that allows the Linux kernel to
      support a variety of computer security models while avoiding favoritism toward
      any single security implementation. The framework is licensed under the terms of
      the GNU General Public License and is standard part of the Linux kernel since
      Linux 2.6. AppArmor, SELinux, Smack and TOMOYO Linux are the currently accepted
      modules in the official kernel.".
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      8ae8f162
  19. 28 5月, 2013 2 次提交
    • J
      f2fs: add debug msgs in the recovery routine · f356fe0c
      Jaegeuk Kim 提交于
      This patch adds some trivial debugging messages in the recovery process.
      Signed-off-by: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      f356fe0c
    • J
      f2fs: update inode page after creation · 44a83ff6
      Jaegeuk Kim 提交于
      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: NJaegeuk Kim <jaegeuk.kim@samsung.com>
      44a83ff6