• Linus Torvalds's avatar
    Merge tag 'for-6.2-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux · 149c51f8
    Linus Torvalds authored
    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
      ...
    149c51f8
ordered-data.c 32.3 KB