Hi Linus, Could you consider this pull request? Thanks, The following changes since commit 1f02071358301e376f5a54e40531db37a1d7c7ab: Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi (2017-03-21 13:10:17 -0700) are available in the git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git tags/for-f2fs-4.12 for you to fetch changes up to e9cdd307704b5a8f685fa3fff4403691fbf64f97: f2fs: fix a mount fail for wrong next_scan_nid (2017-05-03 19:00:30 -0700) ---------------------------------------------------------------- for-f2fs-4.12 In this round, we've focused on enhancing performance with regards to block allocation, GC, and discard/in-place-update IO controls. There are a bunch of clean-ups as well as minor bug fixes. = Enhancement - disable heap-based allocation by default - issue small-sized discard commands by default - change the policy of data hotness for logging - distinguish IOs in terms of size and wbc type - start SSR earlier to avoid foreground GC - enhance data structures managing discard commands - enhance in-place update flow - add some more fault injection routines - secure one more xattr entry = Bug fix - calculate victim cost for GC correctly - remain correct victim segment number for GC - race condition in nid allocator and initializer - stale pointer produced by atomic_writes - fix missing REQ_SYNC for flush commands - handle missing errors in more corner cases ---------------------------------------------------------------- Arnd Bergmann (1): f2fs: improve definition of statistic macros Chao Yu (35): f2fs: don't allow volatile writes for non-regular file f2fs: cover update_free_nid_bitmap with nid_list_lock f2fs: add missing INMEM_REVOKE trace enum definition f2fs: fix recording invalid last_victim f2fs: fix race condition in between free nid allocator/initializer f2fs: show the max number of volatile operations f2fs: don't track volatile file in dirty inode list f2fs: clean up xattr operation f2fs: don't reserve additional space in xattr block f2fs: show issued flush/discard count f2fs: count discard command entry f2fs: clean up destroy_discard_cmd_control f2fs: use bitmap in discard_entry f2fs: split discard_cmd_list f2fs: introduce f2fs_wait_discard_bios f2fs: prevent waiter encountering incorrect discard states f2fs: extract rb-tree operation infrastructure f2fs: shrink blk plug region f2fs: use rb-tree to track pending discard commands f2fs: clean up discard_cmd_control structure f2fs: in prior to issue big discard f2fs: trace __submit_discard_cmd f2fs: introduce __check_rb_tree_consistence f2fs: unlock cp_rwsem early for IPU writes f2fs: add undiscard blocks stat f2fs: delay awaking discard thread f2fs: enable small discard by default f2fs: introduce __issue_discard_cmd f2fs: introduce __wait_discard_cmd f2fs: don't hold cmd_lock during waiting discard command f2fs: shrink size of struct discard_cmd f2fs: allow cpc->reason to indicate more than one reason f2fs: introduce CP_TRIMMED_FLAG to avoid unneeded discard f2fs: relocate inode_{,un}lock in F2FS_IOC_SETFLAGS f2fs: enhance scalability of trace macro Fan Li (1): f2fs: adjust the way of calculating nat block Hou Pengyang (5): f2fs: introduce async IPU policy f2fs: skip encrypted inode in ASYNC IPU policy f2fs: reconstruct code to write a data page f2fs: lookup extent cache first under IPU scenario f2fs: release cp and dnode lock before IPU Jaegeuk Kim (36): f2fs: don't need to invalidate wrong node page f2fs: le16_to_cpu for xattr->e_value_size f2fs: fix wrong error injection for evict_inode f2fs: don't allow to get pino when filename is encrypted f2fs: build stat_info before orphan inode recovery f2fs: fix stale ATOMIC_WRITTEN_PAGE private pointer f2fs: don't allow atomic writes for not regular files f2fs: show more precise message on orphan recovery failure f2fs: allocate a bio for discarding when actually issuing it f2fs: add fault injection on f2fs_truncate f2fs: fix wrong max cost initialization f2fs: allocate node and hot data in the beginning of partition f2fs: start SSR much eariler to avoid FG_GC f2fs: relax node version check for victim data in gc f2fs: write small sized IO to hot log f2fs: avoid IO split due to mixed WB_SYNC_ALL and WB_SYNC_NONE f2fs: submit bio of in-place-update pages Revert "f2fs: put allocate_segment after refresh_sit_entry" f2fs: use segment number for get_valid_blocks f2fs: clean up get_valid_blocks with consistent parameter f2fs: clean up some macros in terms of GET_SEGNO f2fs: avoid frequent checkpoint during f2fs_gc f2fs: fix fs corruption due to zero inode page f2fs: give time to flush dirty pages for checkpoint f2fs: allocate hot_data for atomic writes f2fs: fix not to set fsync/dentry mark f2fs: avoid dirty node pages in check_only recovery f2fs: add ioctl to flush data from faster device to cold area f2fs: fix _IOW usage f2fs: assign allocation hint for warm/cold data f2fs: add parentheses for macro variables more f2fs: fix out-of free segments f2fs: introduce valid_ipu_blkaddr to clean up f2fs: nullify fio->encrypted_page for each writes f2fs: flush dirty nats periodically f2fs: show available_nids in f2fs/status Jan Kara (1): f2fs: Make flush bios explicitely sync Jin Qian (1): f2fs: sanity check segment count Kaixu Xia (1): f2fs: remove the redundant variable definition Kinglong Mee (17): f2fs: le32_to_cpu for ckpt->cp_pack_total_block_count f2fs: fix the fault of checking F2FS_LINK_MAX for rename inode f2fs: fix the fault of calculating blkstart twice f2fs: make sure trace all f2fs_issue_flush f2fs: drop duplicate radix tree lookup of nat_entry_set f2fs: remove dead macro PGOFS_OF_NEXT_DNODE f2fs: drop duplicate new_size assign in f2fs_zero_range f2fs: avoid copy date to user-space if move file range fail f2fs: check new size by inode_newsize_ok in f2fs_insert_range f2fs: move mnt_want_write_file after arguments checking f2fs: clear FI_DATA_EXIST flag in truncate_inline_inode f2fs: fix bad prefetchw of NULL page f2fs: cleanup the disk level filename updating f2fs: sanity check of crc_offset from raw checkpoint f2fs: avoid stat_inc_atomic_write for non-atomic file f2fs: calculate the f2fs_stat_info into base_mem f2fs: more reasonable mem_size calculating of ino_entry Sheng Yong (3): f2fs: use parameter max_items instead of PIDVEC_SIZE f2fs: check range before defragment f2fs: fix multiple f2fs_add_link() having same name for inline dentry Tomohiro Kusumi (3): f2fs: split make_dentry_ptr() into block and inline versions f2fs: fix comment on f2fs_flush_merged_bios() after 86531d6b f2fs: guard macro variables with braces Yunlei He (7): f2fs: fix an error return value in truncate_partial_data_page f2fs: skip writeback meta pages if cp_mutex acquire failed f2fs: add a punch discard command function f2fs: use set_page_private marcro in f2fs_trace_pid f2fs: allow write page cache when writting cp f2fs: seperate read nat page from nat_tree_lock f2fs: fix a mount fail for wrong next_scan_nid fs/f2fs/checkpoint.c | 77 +++-- fs/f2fs/data.c | 200 +++++++++--- fs/f2fs/debug.c | 62 +++- fs/f2fs/dir.c | 46 +-- fs/f2fs/extent_cache.c | 326 +++++++++++-------- fs/f2fs/f2fs.h | 320 +++++++++++------- fs/f2fs/file.c | 173 +++++++--- fs/f2fs/gc.c | 93 ++++-- fs/f2fs/inline.c | 34 +- fs/f2fs/inode.c | 23 +- fs/f2fs/namei.c | 53 +-- fs/f2fs/node.c | 144 ++++---- fs/f2fs/node.h | 31 +- fs/f2fs/recovery.c | 8 +- fs/f2fs/segment.c | 776 ++++++++++++++++++++++++++++++++------------ fs/f2fs/segment.h | 139 ++++---- fs/f2fs/super.c | 48 ++- fs/f2fs/trace.c | 4 +- fs/f2fs/xattr.c | 31 +- fs/f2fs/xattr.h | 8 +- include/linux/f2fs_fs.h | 17 +- include/trace/events/f2fs.h | 62 ++-- 22 files changed, 1747 insertions(+), 928 deletions(-)