1. 05 Sep, 2013 1 commit
    • Jaegeuk Kim's avatar
      f2fs: merge more bios of node block writes · 423e95cc
      Jaegeuk Kim authored
      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: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      423e95cc
  2. 03 Sep, 2013 2 commits
  3. 27 Aug, 2013 2 commits
  4. 26 Aug, 2013 6 commits
    • Jaegeuk Kim's avatar
      f2fs: support the inline xattrs · 65985d93
      Jaegeuk Kim authored
      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: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      65985d93
    • Jaegeuk Kim's avatar
      f2fs: add the truncate_xattr_node function · 4f16fb0f
      Jaegeuk Kim authored
      The truncate_xattr_node function will be used by inline xattr.
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      4f16fb0f
    • Jaegeuk Kim's avatar
      f2fs: introduce __find_xattr for readability · dd9cfe23
      Jaegeuk Kim authored
      The __find_xattr is to search the wanted xattr entry starting from the
      base_addr.
      
      If not found, the returned entry is the last empty xattr entry that can be
      allocated newly.
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      dd9cfe23
    • Jaegeuk Kim's avatar
      f2fs: reserve the xattr space dynamically · de93653f
      Jaegeuk Kim authored
      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: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      de93653f
    • Jaegeuk Kim's avatar
      f2fs: add flags for inline xattrs · 444c580f
      Jaegeuk Kim authored
      This patch adds basic inode flags for inline xattrs, F2FS_INLINE_XATTR,
      and add a mount option, inline_xattr, which is enabled when xattr is set.
      
      If the mount option is enabled, all the files are marked with the inline_xattrs
      flag.
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      444c580f
    • Wei Yongjun's avatar
      f2fs: fix error return code in init_f2fs_fs() · 6e6b978c
      Wei Yongjun authored
      Fix to return -ENOMEM in the kset create and add error handling
      case instead of 0, as done elsewhere in this function.
      
      Introduced by commit b59d0bae.
      (f2fs: add sysfs support for controlling the gc_thread)
      Signed-off-by: default avatarWei Yongjun <yongjun_wei@trendmicro.com.cn>
      Acked-by: default avatarNamjae Jeon <namjae.jeon@samsung.com>
      [Jaegeuk Kim: merge the patch with previous modification]
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      6e6b978c
  5. 20 Aug, 2013 2 commits
    • Jaegeuk Kim's avatar
      f2fs: fix wrong BUG_ON condition · d59ff4df
      Jaegeuk Kim authored
      This patch removes a false-alaramed BUG_ON.
      The previous BUG_ON condition didn't cover the following true scenario.
      
      In f2fs_add_link, 1) get_new_data_page gives an uptodate page successfully,
      and then, 2) init_inode_metadata returns -ENOSPC.
      At this moment, a new clean data page is remained in the page cache, but its
      block address still indicates NEW_ADDR.
      After then, even if sync is called, this clean data page cannot be written to
      the disk due to the clean state.
      
      So this means that get_lock_data_page should make a new empty page when its
      block address is NEW_ADDR and its page is not uptodated.
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      d59ff4df
    • Zhao Hongjiang's avatar
      f2fs: fix memory leak when init f2fs filesystem fail · 9890ff3f
      Zhao Hongjiang authored
      When any of the caches create fails in init_f2fs_fs(), the other caches which are
      create successful should be free.
      Signed-off-by: default avatarZhao Hongjiang <zhaohongjiang@huawei.com>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      9890ff3f
  6. 19 Aug, 2013 3 commits
  7. 12 Aug, 2013 3 commits
  8. 09 Aug, 2013 3 commits
  9. 08 Aug, 2013 1 commit
    • Jaegeuk Kim's avatar
      f2fs: fix a build failure due to missing the kobject header · c2d715d1
      Jaegeuk Kim authored
      This patch should resolve the following error reported by kbuild test robot.
      
      All error/warnings:
      
         In file included from fs/f2fs/dir.c:13:0:
         >> fs/f2fs/f2fs.h:435:17: error: field 's_kobj' has incomplete type
              struct kobject s_kobj;
      
      The failure was caused by missing the kobject header file in dir.c.
      So, this patch move the header file to the right location, f2fs.h.
      
      CC: Namjae Jeon <namjae.jeon@samsung.com>
      Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
      c2d715d1
  10. 06 Aug, 2013 4 commits
  11. 31 Jul, 2013 1 commit
  12. 30 Jul, 2013 12 commits