From: David Sterba <dsterba@suse.com>
To: torvalds@linux-foundation.org
Cc: David Sterba <dsterba@suse.com>,
linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [GIT PULL] Btrfs updates for 6.5
Date: Mon, 26 Jun 2023 20:14:42 +0200 [thread overview]
Message-ID: <cover.1687802358.git.dsterba@suse.com> (raw)
Hi,
there are mainly core changes, refactoring and optimizations.
Performance is improved in some areas, overall there may be a cumulative
improvement due to refactoring that removed lookups in the IO path or
simplified IO submission tracking.
No merge conflicts. Please pull, thanks.
Core:
- submit IO synchronously for fast checksums (crc32c and xxhash), remove
high priority worker kthread
- read extent buffer in one go, simplify IO tracking, bio submission and
locking
- remove additional tracking of redirtied extent buffers, originally
added for zoned mode but actually not needed
- track ordered extent pointer in bio to avoid rbtree lookups during IO
- scrub, use recovered data stripes as cache to avoid unnecessary read
- in zoned mode, optimize logical to physical mappings of extents
- remove PageError handling, not set by VFS nor writeback
- cleanups, refactoring, better structure packing
- lots of error handling improvements
- more assertions, lockdep annotations
- print assertion failure with the exact line where it happens
- tracepoint updates
- more debugging prints
Performance:
- speedup in fsync(), better tracking of inode logged status can avoid
transaction commit
- IO path structures track logical offsets in data structures and does
not need to look it up
User visible changes:
- don't commit transaction for every created subvolume, this can reduce
time when many subvolumes are created in a batch
- print affected files when relocation fails
- trigger orphan file cleanup during START_SYNC ioctl
Notable fixes:
- fix crash when disabling quota and relocation
- fix crashes when removing roots from drity list
- fix transacion abort during relocation when converting from newer
profiles not covered by fallback
- in zoned mode, stop reclaiming block groups if filesystem becomes
read-only
- fix rare race condition in tree mod log rewind that can miss some
btree node slots
- with enabled fsverity, drop up-to-date page bit in case the
verification fails
----------------------------------------------------------------
The following changes since commit 45a3e24f65e90a047bef86f927ebdc4c710edaa1:
Linux 6.4-rc7 (2023-06-18 14:06:27 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-6.5
for you to fetch changes up to 8a4a0b2a3eaf75ca8854f856ef29690c12b2f531:
btrfs: fix race between quota disable and relocation (2023-06-19 20:29:25 +0200)
----------------------------------------------------------------
Anand Jain (11):
btrfs: use SECTOR_SHIFT to convert physical offset to LBA
btrfs: use SECTOR_SHIFT to convert LBA to physical offset
btrfs: reduce struct btrfs_fs_devices size by moving fsid_change
btrfs: streamline fsid checks in alloc_fs_devices
btrfs: merge calls to alloc_fs_devices in device_list_add
btrfs: add comment about metadata_uuid in btrfs_fs_devices
btrfs: return bool from check_tree_block_fsid instead of int
btrfs: simplify fsid and metadata_uuid comparisons
btrfs: simplify how changed fsid and metadata_uuid is checked
btrfs: consolidate uuid comparisons in btrfs_validate_super
btrfs: add and fix comments in btrfs_fs_devices
Ben Dooks (1):
btrfs: make btrfs_compressed_bioset static
Boris Burkov (2):
btrfs: warn on invalid slot in tree mod log rewind
btrfs: insert tree mod log move in push_node_left
Christoph Hellwig (80):
btrfs: submit IO synchronously for fast checksum implementations
btrfs: determine synchronous writers from bio or writeback control
btrfs: remove hipri_workers workqueue
btrfs: fix dirty_metadata_bytes for redirtied buffers
btrfs: don't hold an extra reference for redirtied buffers
btrfs: mark extent_buffer_under_io static
btrfs: subpage: fix error handling in end_bio_subpage_eb_writepage
btrfs: move setting the buffer uptodate out of validate_extent_buffer
btrfs: merge verify_parent_transid and btrfs_buffer_uptodate
btrfs: always read the entire extent_buffer
btrfs: don't use btrfs_bio_ctrl for extent buffer reading
btrfs: remove the mirror_num argument to btrfs_submit_compressed_read
btrfs: use a separate end_io handler for read_extent_buffer
btrfs: do not try to unlock the extent for non-subpage metadata reads
btrfs: return bool from lock_extent_buffer_for_io
btrfs: submit a writeback bio per extent_buffer
btrfs: move page locking from lock_extent_buffer_for_io to write_one_eb
btrfs: don't use btrfs_bio_ctrl for extent buffer writing
btrfs: use a separate end_io handler for extent_buffer writing
btrfs: remove the extent_buffer lookup in btree block checksumming
btrfs: remove the io_pages field in struct extent_buffer
btrfs: stop using PageError for extent_buffers
btrfs: don't check for uptodate pages in read_extent_buffer_pages
btrfs: stop using lock_extent in btrfs_buffer_uptodate
btrfs: use per-buffer locking for extent_buffer reading
btrfs: merge write_one_subpage_eb into write_one_eb
btrfs: fix the btrfs_get_global_root return value
btrfs: convert btrfs_get_global_root to use a switch statement
btrfs: remove a pointless NULL check in btrfs_lookup_fs_root
btrfs: optimize out btrfs_is_zoned for !CONFIG_BLK_DEV_ZONED
btrfs: don't call btrfs_record_physical_zoned for failed append
btrfs: mark the len field in struct btrfs_ordered_sum as unsigned
btrfs: rename the bytenr field in struct btrfs_ordered_sum to logical
btrfs: optimize the logical to physical mapping for zoned writes
btrfs: record orig_physical only for the original bio
btrfs: move split_extent_map to extent_map.c
btrfs: reorder conditions in btrfs_extract_ordered_extent
btrfs: return the new ordered_extent from btrfs_split_ordered_extent
btrfs: split btrfs_alloc_ordered_extent to allocation and insertion helpers
btrfs: atomically insert the new extent in btrfs_split_ordered_extent
btrfs: handle completed ordered extents in btrfs_split_ordered_extent
btrfs: defer splitting of ordered extents until I/O completion
btrfs: pass the new logical address to split_extent_map
btrfs: remove unused BTRFS_MAP_DISCARD
btrfs: optimize simple reads in btrfsic_map_block
btrfs: remove unused btrfs_map_block
btrfs: rename __btrfs_map_block to btrfs_map_block
btrfs: open code btrfs_map_sblock
btrfs: open code need_full_stripe conditions
btrfs: fix range_end calculation in extent_write_locked_range
btrfs: factor out a btrfs_verify_page helper
btrfs: fix fsverify read error handling in end_page_read
btrfs: don't check PageError in btrfs_verify_page
btrfs: don't fail writeback when allocating the compression context fails
btrfs: rename cow_file_range_async to run_delalloc_compressed
btrfs: don't check PageError in __extent_writepage
btrfs: stop setting PageError in the data I/O path
btrfs: remove PAGE_SET_ERROR
btrfs: remove non-standard extent handling in __extent_writepage_io
btrfs: move writeback_control::nr_to_write update to __extent_writepage
btrfs: only call __extent_writepage_io from extent_write_locked_range
btrfs: don't treat zoned writeback as being from an async helper thread
btrfs: fix file_offset for REQ_BTRFS_ONE_ORDERED bios that get split
btrfs: limit write bios to a single ordered extent
btrfs: merge the two calls to btrfs_add_ordered_extent in run_delalloc_nocow
btrfs: pass an ordered_extent to btrfs_reloc_clone_csums
btrfs: pass an ordered_extent to btrfs_submit_compressed_write
btrfs: remove btrfs_add_ordered_extent
btrfs: add a is_data_bbio helper
btrfs: open code btrfs_bio_end_io in btrfs_dio_submit_io
btrfs: add an ordered_extent pointer to struct btrfs_bio
btrfs: use bbio->ordered in btrfs_csum_one_bio
btrfs: factor out a can_finish_ordered_extent helper
btrfs: factor out a btrfs_queue_ordered_fn helper
btrfs: add a btrfs_finish_ordered_extent helper
btrfs: open code end_extent_writepage in end_bio_extent_writepage
btrfs: use btrfs_finish_ordered_extent to complete compressed writes
btrfs: use btrfs_finish_ordered_extent to complete direct writes
btrfs: use btrfs_finish_ordered_extent to complete buffered writes
btrfs: set FMODE_CAN_ODIRECT instead of a dummy direct_IO method
David Sterba (13):
btrfs: open code set_extent_defrag
btrfs: open code set_extent_delalloc
btrfs: open code set_extent_new
btrfs: open code set_extent_dirty
btrfs: open code set_extent_bits_nowait
btrfs: open code set_extent_bits
btrfs: drop NOFAIL from set_extent_bit allocation masks
btrfs: pass NOWAIT for set/clear extent bits as another bit
btrfs: drop gfp from parameter extent state helpers
btrfs: print assertion failure report and stack trace from the same line
btrfs: add xxhash to fast checksum implementations
btrfs: disable allocation warnings for compression workspaces
btrfs: add block-group tree to lockdep classes
Filipe Manana (51):
btrfs: unexport btrfs_prev_leaf()
btrfs: make btrfs_free_device() static
btrfs: tag as unlikely the key comparison when checking sibling keys
btrfs: avoid extra memory allocation when copying free space cache
btrfs: avoid searching twice for previous node when merging free space entries
btrfs: use precomputed end offsets at do_trimming()
btrfs: simplify arguments to tree_insert_offset()
btrfs: assert proper locks are held at tree_insert_offset()
btrfs: assert tree lock is held when searching for free space entries
btrfs: assert tree lock is held when linking free space
btrfs: assert tree lock is held when removing free space entries
btrfs: use inode_logged() at need_log_inode()
btrfs: use inode_logged() at btrfs_record_unlink_dir()
btrfs: update comments at btrfs_record_unlink_dir() to be more clear
btrfs: remove pointless label and goto at btrfs_record_unlink_dir()
btrfs: change for_rename argument of btrfs_record_unlink_dir() to bool
btrfs: fix comment referring to no longer existing btrfs_clean_tree_block()
btrfs: reorder some members of struct btrfs_delayed_ref_head
btrfs: remove unused is_head field from struct btrfs_delayed_ref_node
btrfs: remove pointless in_tree field from struct btrfs_delayed_ref_node
btrfs: use a bool to track qgroup record insertion when adding ref head
btrfs: make insert_delayed_ref() return a bool instead of an int
btrfs: get rid of label and goto at insert_delayed_ref()
btrfs: assert correct lock is held at btrfs_select_ref_head()
btrfs: use bool type for delayed ref head fields that are used as booleans
btrfs: use a single switch statement when initializing delayed ref head
btrfs: remove unnecessary prototype declarations at disk-io.c
btrfs: make btrfs_destroy_delayed_refs() return void
btrfs: update documentation for a block group's bg_list member
btrfs: add missing error handling when logging operation while COWing extent buffer
btrfs: fix extent buffer leak after tree mod log failure at split_node()
btrfs: avoid tree mod log ENOMEM failures when we don't need to log
btrfs: do not BUG_ON() on tree mod log failure at __btrfs_cow_block()
btrfs: do not BUG_ON() on tree mod log failure at balance_level()
btrfs: rename enospc label to out at balance_level()
btrfs: avoid unnecessarily setting the fs to RO and error state at balance_level()
btrfs: abort transaction at balance_level() when left child is missing
btrfs: abort transaction at update_ref_for_cow() when ref count is zero
btrfs: do not BUG_ON() on tree mod log failures at push_nodes_for_insert()
btrfs: do not BUG_ON() on tree mod log failure at insert_new_root()
btrfs: do not BUG_ON() on tree mod log failures at insert_ptr()
btrfs: do not BUG_ON() on tree mod log failures at btrfs_del_ptr()
btrfs: replace BUG_ON() at split_item() with proper error handling
btrfs: do not BUG_ON() when dropping inode items from log root
btrfs: send: do not BUG_ON() on unexpected symlink data extent
btrfs: do not BUG_ON on failure to get dir index for new snapshot
btrfs: do not BUG_ON after failure to migrate space during truncation
btrfs: fix race when deleting quota root from the dirty cow roots list
btrfs: fix race when deleting free space root from the dirty cow roots list
btrfs: add comment to struct btrfs_fs_info::dirty_cowonly_roots
btrfs: fix race between quota disable and relocation
Jeff Layton (1):
btrfs: update i_version in update_dev_time
Jiapeng Chong (1):
btrfs: scrub: remove more unused functions
Johannes Thumshirn (1):
btrfs: unexport btrfs_run_discard_work and make it static
Josef Bacik (12):
btrfs: move btrfs_check_trunc_cache_free_space into block-rsv.c
btrfs: remove level argument from btrfs_set_block_flags
btrfs: simplify btrfs_check_leaf_* helpers into a single helper
btrfs: add btrfs_tree_block_status definitions to tree-checker.h
btrfs: use btrfs_tree_block_status for leaf item errors
btrfs: extend btrfs_leaf_check to return btrfs_tree_block_status
btrfs: add __btrfs_check_node helper
btrfs: move btrfs_verify_level_key into tree-checker.c
btrfs: move split_flags/combine_flags helpers to inode-item.h
btrfs: add __KERNEL__ check for btrfs_no_printk
btrfs: add a btrfs_csum_type_size helper
btrfs: rename del_ptr to btrfs_del_ptr and export it
Matt Corallo (1):
btrfs: add handling for RAID1C23/DUP to btrfs_reduce_alloc_profile
Naohiro Aota (6):
btrfs: export bitmap_test_range_all_{set,zero}
btrfs: delete unused BGs while reclaiming BGs
btrfs: move out now unused BG from the reclaim list
btrfs: bail out reclaim process if filesystem is read-only
btrfs: reinsert BGs failed to reclaim
btrfs: tracepoints: also show actual number of the outstanding extents
Qu Wenruo (11):
btrfs: print-tree: pass const extent buffer pointer
btrfs: improve leaf dump and error handling
btrfs: output affected files when relocation fails
btrfs: scrub: use recovered data stripes as cache to avoid unnecessary read
btrfs: handle tree backref walk error properly
btrfs: trigger orphan inode cleanup during START_SYNC ioctl
btrfs: subpage: dump extra subpage bitmaps for debug
btrfs: subpage: make alloc_extent_buffer() handle previously uptodate range efficiently
btrfs: use the same uptodate variable for end_bio_extent_readpage()
btrfs: scrub: remove scrub_ctx::csum_list member
btrfs: scrub: remove btrfs_fs_info::scrub_wr_completion_workers
Sweet Tea Dorminy (1):
btrfs: don't commit transaction for every subvol create
Tejun Heo (1):
btrfs: use alloc_ordered_workqueue() to create ordered workqueues
Tom Rix (1):
btrfs: simplify transid initialization in btrfs_ioctl_wait_sync
fs/btrfs/async-thread.c | 44 +-
fs/btrfs/async-thread.h | 3 +
fs/btrfs/bio.c | 122 +++---
fs/btrfs/bio.h | 29 +-
fs/btrfs/block-group.c | 47 ++-
fs/btrfs/block-group.h | 9 +-
fs/btrfs/block-rsv.c | 19 +
fs/btrfs/block-rsv.h | 2 +
fs/btrfs/btrfs_inode.h | 23 +-
fs/btrfs/check-integrity.c | 21 +-
fs/btrfs/compression.c | 50 +--
fs/btrfs/compression.h | 7 +-
fs/btrfs/ctree.c | 429 +++++++++++++-------
fs/btrfs/ctree.h | 6 +-
fs/btrfs/defrag.c | 3 +-
fs/btrfs/delayed-ref.c | 110 ++---
fs/btrfs/delayed-ref.h | 25 +-
fs/btrfs/dev-replace.c | 6 +-
fs/btrfs/discard.c | 34 +-
fs/btrfs/discard.h | 1 -
fs/btrfs/disk-io.c | 451 ++++-----------------
fs/btrfs/disk-io.h | 7 +-
fs/btrfs/extent-io-tree.c | 37 +-
fs/btrfs/extent-io-tree.h | 62 +--
fs/btrfs/extent-tree.c | 186 ++++-----
fs/btrfs/extent-tree.h | 2 +-
fs/btrfs/extent_io.c | 848 +++++++++++----------------------------
fs/btrfs/extent_io.h | 11 +-
fs/btrfs/extent_map.c | 110 ++++-
fs/btrfs/extent_map.h | 6 +-
fs/btrfs/file-item.c | 90 ++---
fs/btrfs/file-item.h | 1 +
fs/btrfs/file.c | 12 +-
fs/btrfs/free-space-cache.c | 122 +++---
fs/btrfs/free-space-cache.h | 2 -
fs/btrfs/free-space-tree.c | 3 +
fs/btrfs/fs.h | 5 +-
fs/btrfs/inode-item.h | 16 +
fs/btrfs/inode.c | 592 ++++++++++++++++-----------
fs/btrfs/ioctl.c | 23 +-
fs/btrfs/locking.c | 5 +-
fs/btrfs/lzo.c | 6 +-
fs/btrfs/messages.c | 8 -
fs/btrfs/messages.h | 15 +-
fs/btrfs/misc.h | 20 +
fs/btrfs/ordered-data.c | 442 +++++++++++---------
fs/btrfs/ordered-data.h | 27 +-
fs/btrfs/print-tree.c | 16 +-
fs/btrfs/print-tree.h | 4 +-
fs/btrfs/qgroup.c | 20 +-
fs/btrfs/raid56.c | 49 ++-
fs/btrfs/raid56.h | 3 +
fs/btrfs/relocation.c | 61 +--
fs/btrfs/relocation.h | 3 +-
fs/btrfs/scrub.c | 125 ++----
fs/btrfs/send.c | 16 +-
fs/btrfs/subpage.c | 97 ++---
fs/btrfs/subpage.h | 12 +-
fs/btrfs/super.c | 1 -
fs/btrfs/tests/extent-io-tests.c | 16 +-
fs/btrfs/transaction.c | 16 +-
fs/btrfs/transaction.h | 3 -
fs/btrfs/tree-checker.c | 158 ++++++--
fs/btrfs/tree-checker.h | 29 +-
fs/btrfs/tree-log.c | 62 +--
fs/btrfs/tree-log.h | 2 +-
fs/btrfs/tree-mod-log.c | 257 ++++++++++--
fs/btrfs/volumes.c | 173 ++++----
fs/btrfs/volumes.h | 57 ++-
fs/btrfs/zlib.c | 2 +-
fs/btrfs/zoned.c | 159 ++++----
fs/btrfs/zoned.h | 8 +-
fs/btrfs/zstd.c | 2 +-
include/trace/events/btrfs.h | 39 +-
tools/objtool/check.c | 1 -
75 files changed, 2780 insertions(+), 2710 deletions(-)
next reply other threads:[~2023-06-26 18:22 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-26 18:14 David Sterba [this message]
2023-06-26 18:49 ` [GIT PULL] Btrfs updates for 6.5 Linus Torvalds
2023-06-26 19:04 ` David Sterba
2023-06-26 20:02 ` pr-tracker-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover.1687802358.git.dsterba@suse.com \
--to=dsterba@suse.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.