mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
Merge tag 'for-6.11-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs updates from David Sterba:
"The highlights are new logic behind background block group reclaim,
automatic removal of qgroup after removing a subvolume and new
'rescue=' mount options.
The rest is optimizations, cleanups and refactoring.
User visible features:
- dynamic block group reclaim:
- tunable framework to avoid situations where eager data
allocations prevent creating new metadata chunks due to lack of
unallocated space
- reuse sysfs knob bg_reclaim_threshold (otherwise used only in
zoned mode) for a fixed value threshold
- new on/off sysfs knob "dynamic_reclaim" calculating the value
based on heuristics, aiming to keep spare working space for
relocating chunks but not to needlessly relocate partially
utilized block groups or reclaim newly allocated ones
- stats are exported in sysfs per block group type, files
"reclaim_*"
- this may increase IO load at unexpected times but the corner
case of no allocatable block groups is known to be worse
- automatically remove qgroup of deleted subvolumes:
- adjust qgroup removal conditions, make sure all related
subvolume data are already removed, or return EBUSY, also take
into account setting of sysfs drop_subtree_threshold
- also works in squota mode
- mount option updates: new modes of 'rescue=' that allow to mount
images (read-only) that could have been partially converted by user
space tools
- ignoremetacsums - invalid metadata checksums are ignored
- ignoresuperflags - super block flags that track conversion in
progress (like UUID or checksums)
Core:
- size of struct btrfs_inode is now below 1024 (on a release config),
improved memory packing and other secondary effects
- switch tracking of open inodes from rb-tree to xarray, minor
performance improvement
- reduce number of empty transaction commits when there are no dirty
data/metadata
- memory allocation optimizations (reduced numbers, reordering out of
critical sections)
- extent map structure optimizations and refactoring, more sanity
checks
- more subpage in zoned mode preparations or fixes
- general snapshot code cleanups, improvements and documentation
- tree-checker updates: more file extent ram_bytes fixes, continued
- raid-stripe-tree update (not backward compatible):
- remove extent encoding field from the structure, can be inferred
from other information
- requires btrfs-progs 6.9.1 or newer
- cleanups and refactoring
- error message updates
- error handling improvements
- return type and parameter cleanups and improvements"
* tag 'for-6.11-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (152 commits)
btrfs: fix extent map use-after-free when adding pages to compressed bio
btrfs: fix bitmap leak when loading free space cache on duplicate entry
btrfs: remove the BUG_ON() inside extent_range_clear_dirty_for_io()
btrfs: move extent_range_clear_dirty_for_io() into inode.c
btrfs: enhance compression error messages
btrfs: fix data race when accessing the last_trans field of a root
btrfs: rename the extra_gfp parameter of btrfs_alloc_page_array()
btrfs: remove the extra_gfp parameter from btrfs_alloc_folio_array()
btrfs: introduce new "rescue=ignoresuperflags" mount option
btrfs: introduce new "rescue=ignoremetacsums" mount option
btrfs: output the unrecognized super block flags as hex
btrfs: remove unused Opt enums
btrfs: tree-checker: add extra ram_bytes and disk_num_bytes check
btrfs: fix the ram_bytes assignment for truncated ordered extents
btrfs: make validate_extent_map() catch ram_bytes mismatch
btrfs: ignore incorrect btrfs_file_extent_item::ram_bytes
btrfs: cleanup the bytenr usage inside btrfs_extent_item_to_extent_map()
btrfs: fix typo in error message in btrfs_validate_super()
btrfs: move the direct IO code into its own file
btrfs: pass a btrfs_inode to btrfs_set_prop()
...
This commit is contained in:
@@ -291,9 +291,6 @@ TRACE_EVENT_CONDITION(btrfs_get_extent,
|
||||
__field( u64, ino )
|
||||
__field( u64, start )
|
||||
__field( u64, len )
|
||||
__field( u64, orig_start )
|
||||
__field( u64, block_start )
|
||||
__field( u64, block_len )
|
||||
__field( u32, flags )
|
||||
__field( int, refs )
|
||||
),
|
||||
@@ -303,23 +300,15 @@ TRACE_EVENT_CONDITION(btrfs_get_extent,
|
||||
__entry->ino = btrfs_ino(inode);
|
||||
__entry->start = map->start;
|
||||
__entry->len = map->len;
|
||||
__entry->orig_start = map->orig_start;
|
||||
__entry->block_start = map->block_start;
|
||||
__entry->block_len = map->block_len;
|
||||
__entry->flags = map->flags;
|
||||
__entry->refs = refcount_read(&map->refs);
|
||||
),
|
||||
|
||||
TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu "
|
||||
"orig_start=%llu block_start=%llu(%s) "
|
||||
"block_len=%llu flags=%s refs=%u",
|
||||
TP_printk_btrfs("root=%llu(%s) ino=%llu start=%llu len=%llu flags=%s refs=%u",
|
||||
show_root_type(__entry->root_objectid),
|
||||
__entry->ino,
|
||||
__entry->start,
|
||||
__entry->len,
|
||||
__entry->orig_start,
|
||||
show_map_type(__entry->block_start),
|
||||
__entry->block_len,
|
||||
show_map_flags(__entry->flags),
|
||||
__entry->refs)
|
||||
);
|
||||
@@ -2617,7 +2606,6 @@ TRACE_EVENT(btrfs_extent_map_shrinker_remove_em,
|
||||
__field( u64, root_id )
|
||||
__field( u64, start )
|
||||
__field( u64, len )
|
||||
__field( u64, block_start )
|
||||
__field( u32, flags )
|
||||
),
|
||||
|
||||
@@ -2626,15 +2614,12 @@ TRACE_EVENT(btrfs_extent_map_shrinker_remove_em,
|
||||
__entry->root_id = inode->root->root_key.objectid;
|
||||
__entry->start = em->start;
|
||||
__entry->len = em->len;
|
||||
__entry->block_start = em->block_start;
|
||||
__entry->flags = em->flags;
|
||||
),
|
||||
|
||||
TP_printk_btrfs(
|
||||
"ino=%llu root=%llu(%s) start=%llu len=%llu block_start=%llu(%s) flags=%s",
|
||||
TP_printk_btrfs("ino=%llu root=%llu(%s) start=%llu len=%llu flags=%s",
|
||||
__entry->ino, show_root_type(__entry->root_id),
|
||||
__entry->start, __entry->len,
|
||||
show_map_type(__entry->block_start),
|
||||
show_map_flags(__entry->flags))
|
||||
);
|
||||
|
||||
|
||||
@@ -747,21 +747,9 @@ struct btrfs_raid_stride {
|
||||
__le64 physical;
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
/* The stripe_extent::encoding, 1:1 mapping of enum btrfs_raid_types. */
|
||||
#define BTRFS_STRIPE_RAID0 1
|
||||
#define BTRFS_STRIPE_RAID1 2
|
||||
#define BTRFS_STRIPE_DUP 3
|
||||
#define BTRFS_STRIPE_RAID10 4
|
||||
#define BTRFS_STRIPE_RAID5 5
|
||||
#define BTRFS_STRIPE_RAID6 6
|
||||
#define BTRFS_STRIPE_RAID1C3 7
|
||||
#define BTRFS_STRIPE_RAID1C4 8
|
||||
|
||||
struct btrfs_stripe_extent {
|
||||
__u8 encoding;
|
||||
__u8 reserved[7];
|
||||
/* An array of raid strides this stripe is composed of. */
|
||||
struct btrfs_raid_stride strides[];
|
||||
__DECLARE_FLEX_ARRAY(struct btrfs_raid_stride, strides);
|
||||
} __attribute__ ((__packed__));
|
||||
|
||||
#define BTRFS_HEADER_FLAG_WRITTEN (1ULL << 0)
|
||||
@@ -777,6 +765,14 @@ struct btrfs_stripe_extent {
|
||||
#define BTRFS_SUPER_FLAG_CHANGING_FSID (1ULL << 35)
|
||||
#define BTRFS_SUPER_FLAG_CHANGING_FSID_V2 (1ULL << 36)
|
||||
|
||||
/*
|
||||
* Those are temporaray flags utilized by btrfs-progs to do offline conversion.
|
||||
* They are rejected by kernel.
|
||||
* But still keep them all here to avoid conflicts.
|
||||
*/
|
||||
#define BTRFS_SUPER_FLAG_CHANGING_BG_TREE (1ULL << 38)
|
||||
#define BTRFS_SUPER_FLAG_CHANGING_DATA_CSUM (1ULL << 39)
|
||||
#define BTRFS_SUPER_FLAG_CHANGING_META_CSUM (1ULL << 40)
|
||||
|
||||
/*
|
||||
* items in the extent btree are used to record the objectid of the
|
||||
|
||||
Reference in New Issue
Block a user