mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-07 12:44:32 -04:00
Merge tag 'f2fs-for-6.10.rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs
Pull f2fs updates from Jaegeuk Kim:
"In this round, we've tried to address some performance issues on zoned
storage such as direct IO and write_hints. In addition, we've migrated
some IO paths using folio. Meanwhile, there are multiple bug fixes in
the compression paths, sanity check conditions, and error handlers.
Enhancements:
- allow direct io of pinned files for zoned storage
- assign the write hint per stream by default
- convert read paths and test_writeback to folio
- avoid allocating WARM_DATA segment for direct IO
Bug fixes:
- fix false alarm on invalid block address
- fix to add missing iput() in gc_data_segment()
- fix to release node block count in error path of
f2fs_new_node_page()
- compress:
- don't allow unaligned truncation on released compress inode
- cover {reserve,release}_compress_blocks() w/ cp_rwsem lock
- fix error path of inc_valid_block_count()
- fix to update i_compr_blocks correctly
- fix block migration when section is not aligned to pow2
- don't trigger OPU on pinfile for direct IO
- fix to do sanity check on i_xattr_nid in sanity_check_inode()
- write missing last sum blk of file pinning section
- clear writeback when compression failed
- fix to adjust appropirate defragment pg_end
As usual, there are several minor code clean-ups, and fixes to manage
missing corner cases in the error paths"
* tag 'f2fs-for-6.10.rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs: (50 commits)
f2fs: initialize last_block_in_bio variable
f2fs: Add inline to f2fs_build_fault_attr() stub
f2fs: fix some ambiguous comments
f2fs: fix to add missing iput() in gc_data_segment()
f2fs: allow dirty sections with zero valid block for checkpoint disabled
f2fs: compress: don't allow unaligned truncation on released compress inode
f2fs: fix to release node block count in error path of f2fs_new_node_page()
f2fs: compress: fix to cover {reserve,release}_compress_blocks() w/ cp_rwsem lock
f2fs: compress: fix error path of inc_valid_block_count()
f2fs: compress: fix typo in f2fs_reserve_compress_blocks()
f2fs: compress: fix to update i_compr_blocks correctly
f2fs: check validation of fault attrs in f2fs_build_fault_attr()
f2fs: fix to limit gc_pin_file_threshold
f2fs: remove unused GC_FAILURE_PIN
f2fs: use f2fs_{err,info}_ratelimited() for cleanup
f2fs: fix block migration when section is not aligned to pow2
f2fs: zone: fix to don't trigger OPU on pinfile for direct IO
f2fs: fix to do sanity check on i_xattr_nid in sanity_check_inode()
f2fs: fix to avoid allocating WARM_DATA segment for direct IO
f2fs: remove redundant parameter in is_next_segment_free()
...
This commit is contained in:
@@ -394,7 +394,8 @@ struct f2fs_nat_block {
|
||||
|
||||
/*
|
||||
* F2FS uses 4 bytes to represent block address. As a result, supported size of
|
||||
* disk is 16 TB and it equals to 16 * 1024 * 1024 / 2 segments.
|
||||
* disk is 16 TB for a 4K page size and 64 TB for a 16K page size and it equals
|
||||
* to 16 * 1024 * 1024 / 2 segments.
|
||||
*/
|
||||
#define F2FS_MAX_SEGMENT ((16 * 1024 * 1024) / 2)
|
||||
|
||||
@@ -424,8 +425,10 @@ struct f2fs_sit_block {
|
||||
/*
|
||||
* For segment summary
|
||||
*
|
||||
* One summary block contains exactly 512 summary entries, which represents
|
||||
* exactly one segment by default. Not allow to change the basic units.
|
||||
* One summary block with 4KB size contains exactly 512 summary entries, which
|
||||
* represents exactly one segment with 2MB size.
|
||||
* Similarly, in the case of block with 16KB size, it represents one segment with 8MB size.
|
||||
* Not allow to change the basic units.
|
||||
*
|
||||
* NOTE: For initializing fields, you must use set_summary
|
||||
*
|
||||
@@ -556,6 +559,7 @@ typedef __le32 f2fs_hash_t;
|
||||
|
||||
/*
|
||||
* space utilization of regular dentry and inline dentry (w/o extra reservation)
|
||||
* when block size is 4KB.
|
||||
* regular dentry inline dentry (def) inline dentry (min)
|
||||
* bitmap 1 * 27 = 27 1 * 23 = 23 1 * 1 = 1
|
||||
* reserved 1 * 3 = 3 1 * 7 = 7 1 * 1 = 1
|
||||
|
||||
@@ -1304,11 +1304,11 @@ TRACE_EVENT(f2fs_write_end,
|
||||
__entry->copied)
|
||||
);
|
||||
|
||||
DECLARE_EVENT_CLASS(f2fs__page,
|
||||
DECLARE_EVENT_CLASS(f2fs__folio,
|
||||
|
||||
TP_PROTO(struct page *page, int type),
|
||||
TP_PROTO(struct folio *folio, int type),
|
||||
|
||||
TP_ARGS(page, type),
|
||||
TP_ARGS(folio, type),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field(dev_t, dev)
|
||||
@@ -1321,14 +1321,14 @@ DECLARE_EVENT_CLASS(f2fs__page,
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = page_file_mapping(page)->host->i_sb->s_dev;
|
||||
__entry->ino = page_file_mapping(page)->host->i_ino;
|
||||
__entry->dev = folio_file_mapping(folio)->host->i_sb->s_dev;
|
||||
__entry->ino = folio_file_mapping(folio)->host->i_ino;
|
||||
__entry->type = type;
|
||||
__entry->dir =
|
||||
S_ISDIR(page_file_mapping(page)->host->i_mode);
|
||||
__entry->index = page->index;
|
||||
__entry->dirty = PageDirty(page);
|
||||
__entry->uptodate = PageUptodate(page);
|
||||
S_ISDIR(folio_file_mapping(folio)->host->i_mode);
|
||||
__entry->index = folio_index(folio);
|
||||
__entry->dirty = folio_test_dirty(folio);
|
||||
__entry->uptodate = folio_test_uptodate(folio);
|
||||
),
|
||||
|
||||
TP_printk("dev = (%d,%d), ino = %lu, %s, %s, index = %lu, "
|
||||
@@ -1341,32 +1341,32 @@ DECLARE_EVENT_CLASS(f2fs__page,
|
||||
__entry->uptodate)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(f2fs__page, f2fs_writepage,
|
||||
DEFINE_EVENT(f2fs__folio, f2fs_writepage,
|
||||
|
||||
TP_PROTO(struct page *page, int type),
|
||||
TP_PROTO(struct folio *folio, int type),
|
||||
|
||||
TP_ARGS(page, type)
|
||||
TP_ARGS(folio, type)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(f2fs__page, f2fs_do_write_data_page,
|
||||
DEFINE_EVENT(f2fs__folio, f2fs_do_write_data_page,
|
||||
|
||||
TP_PROTO(struct page *page, int type),
|
||||
TP_PROTO(struct folio *folio, int type),
|
||||
|
||||
TP_ARGS(page, type)
|
||||
TP_ARGS(folio, type)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(f2fs__page, f2fs_readpage,
|
||||
DEFINE_EVENT(f2fs__folio, f2fs_readpage,
|
||||
|
||||
TP_PROTO(struct page *page, int type),
|
||||
TP_PROTO(struct folio *folio, int type),
|
||||
|
||||
TP_ARGS(page, type)
|
||||
TP_ARGS(folio, type)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(f2fs__page, f2fs_set_page_dirty,
|
||||
DEFINE_EVENT(f2fs__folio, f2fs_set_page_dirty,
|
||||
|
||||
TP_PROTO(struct page *page, int type),
|
||||
TP_PROTO(struct folio *folio, int type),
|
||||
|
||||
TP_ARGS(page, type)
|
||||
TP_ARGS(folio, type)
|
||||
);
|
||||
|
||||
TRACE_EVENT(f2fs_replace_atomic_write_block,
|
||||
|
||||
Reference in New Issue
Block a user