Skip to content

Commit 149c51f

Browse files
committed
Merge tag 'for-6.2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
Pull btrfs updates from David Sterba: "This round there are a lot of cleanups and moved code so the diffstat looks huge, otherwise there are some nice performance improvements and an update to raid56 reliability. User visible features: - raid56 reliability vs performance trade off: - fix destructive RMW for raid5 data (raid6 still needs work): do full checksum verification for all data during RMW cycle, this should prevent rewriting potentially corrupted data without notice - stripes are cached in memory which should reduce the performance impact but still can hurt some workloads - checksums are verified after repair again - this is the last option without introducing additional features (write intent bitmap, journal, another tree), the extra checksum read/verification was supposed to be avoided by the original implementation exactly for performance reasons but that caused all the reliability problems - discard=async by default for devices that support it - implement emergency flush reserve to avoid almost all unnecessary transaction aborts due to ENOSPC in cases where there are too many delayed refs or delayed allocation - skip block group synchronization if there's no change in used bytes, can reduce transaction commit count for some workloads Performance improvements: - fiemap and lseek: - overall speedup due to skipping unnecessary or duplicate searches (-40% run time) - cache some data structures and sharedness of extents (-30% run time) - send: - faster backref resolution when finding clones - cached leaf to root mapping for faster backref walking - improved clone/sharing detection - overall run time improvements (-70%) Core: - module initialization converted to a table of function pointers run in a sequence - preparation for fscrypt, extend passing file names across calls, dir item can store encryption status - raid56 updates: - more accurate error tracking of sectors within stripe - simplify recovery path and remove dedicated endio worker kthread - simplify scrub call paths - refactoring to support the extra data checksum verification during RMW cycle - tree block parentness checks consolidated and done at metadata read time - improved error handling - cleanups: - move a lot of code for better synchronization between kernel and user space sources, split big files - enum cleanups - GFP flag cleanups - header file cleanups, prototypes, dependencies - redundant parameter cleanups - inline extent handling simplifications - inode parameter conversion - data structure cleanups, reductions, renames, merges" * tag 'for-6.2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (249 commits) btrfs: print transaction aborted messages with an error level btrfs: sync some cleanups from progs into uapi/btrfs.h btrfs: do not BUG_ON() on ENOMEM when dropping extent items for a range btrfs: fix extent map use-after-free when handling missing device in read_one_chunk btrfs: remove outdated logic from overwrite_item() and add assertion btrfs: unify overwrite_item() and do_overwrite_item() btrfs: replace strncpy() with strscpy() btrfs: fix uninitialized variable in find_first_clear_extent_bit btrfs: fix uninitialized parent in insert_state btrfs: add might_sleep() annotations btrfs: add stack helpers for a few btrfs items btrfs: add nr_global_roots to the super block definition btrfs: remove BTRFS_LEAF_DATA_OFFSET btrfs: add helpers for manipulating leaf items and data btrfs: add eb to btrfs_node_key_ptr_offset btrfs: pass the extent buffer for the btrfs_item_nr helpers btrfs: move the csum helpers into ctree.h btrfs: move eb offset helpers into extent_io.h btrfs: move file_extent_item helpers into file-item.h btrfs: move leaf_data_end into ctree.c ...
2 parents 97971df + b7af063 commit 149c51f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

121 files changed

+11439
-9681
lines changed

fs/btrfs/Makefile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ obj-$(CONFIG_BTRFS_FS) := btrfs.o
2323

2424
btrfs-y += super.o ctree.o extent-tree.o print-tree.o root-tree.o dir-item.o \
2525
file-item.o inode-item.o disk-io.o \
26-
transaction.o inode.o file.o tree-defrag.o \
27-
extent_map.o sysfs.o struct-funcs.o xattr.o ordered-data.o \
26+
transaction.o inode.o file.o defrag.o \
27+
extent_map.o sysfs.o accessors.o xattr.o ordered-data.o \
2828
extent_io.o volumes.o async-thread.o ioctl.o locking.o orphan.o \
2929
export.o tree-log.o free-space-cache.o zlib.o lzo.o zstd.o \
3030
compression.o delayed-ref.o relocation.o delayed-inode.o scrub.o \
3131
backref.o ulist.o qgroup.o send.o dev-replace.o raid56.o \
3232
uuid-tree.o props.o free-space-tree.o tree-checker.o space-info.o \
3333
block-rsv.o delalloc-space.o block-group.o discard.o reflink.o \
34-
subpage.o tree-mod-log.o extent-io-tree.o
34+
subpage.o tree-mod-log.o extent-io-tree.o fs.o messages.o bio.o
3535

3636
btrfs-$(CONFIG_BTRFS_FS_POSIX_ACL) += acl.o
3737
btrfs-$(CONFIG_BTRFS_FS_CHECK_INTEGRITY) += check-integrity.o

fs/btrfs/struct-funcs.c renamed to fs/btrfs/accessors.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
*/
55

66
#include <asm/unaligned.h>
7-
7+
#include "messages.h"
88
#include "ctree.h"
9+
#include "accessors.h"
910

1011
static bool check_setget_bounds(const struct extent_buffer *eb,
1112
const void *ptr, unsigned off, int size)
@@ -23,6 +24,13 @@ static bool check_setget_bounds(const struct extent_buffer *eb,
2324
return true;
2425
}
2526

27+
void btrfs_init_map_token(struct btrfs_map_token *token, struct extent_buffer *eb)
28+
{
29+
token->eb = eb;
30+
token->kaddr = page_address(eb->pages[0]);
31+
token->offset = 0;
32+
}
33+
2634
/*
2735
* Macro templates that define helpers to read/write extent buffer data of a
2836
* given size, that are also used via ctree.h for access to item members by
@@ -160,7 +168,7 @@ DEFINE_BTRFS_SETGET_BITS(64)
160168
void btrfs_node_key(const struct extent_buffer *eb,
161169
struct btrfs_disk_key *disk_key, int nr)
162170
{
163-
unsigned long ptr = btrfs_node_key_ptr_offset(nr);
171+
unsigned long ptr = btrfs_node_key_ptr_offset(eb, nr);
164172
read_eb_member(eb, (struct btrfs_key_ptr *)ptr,
165173
struct btrfs_key_ptr, key, disk_key);
166174
}

0 commit comments

Comments
 (0)