• Linus Torvalds's avatar
    Merge tag 'bcachefs-2024-01-10' of https://evilpiepirate.org/git/bcachefs · 999a36b5
    Linus Torvalds authored
    Pull bcachefs updates from Kent Overstreet:
    
     - btree write buffer rewrite: instead of adding keys to the btree write
       buffer at transaction commit time, we now journal them with a
       different journal entry type and copy them from the journal to the
       write buffer just prior to journal write.
    
       This reduces the number of atomic operations on shared cachelines in
       the transaction commit path and is a signicant performance
       improvement on some workloads: multithreaded 4k random writes went
       from ~650k iops to ~850k iops.
    
     - Bring back optimistic spinning for six locks: the new implementation
       doesn't use osq locks; instead we add to the lock waitlist as normal,
       and then spin on the lock_acquired bit in the waitlist entry, _not_
       the lock itself.
    
     - New ioctls:
    
        - BCH_IOCTL_DEV_USAGE_V2, which allows for new data types
    
        - BCH_IOCTL_OFFLINE_FSCK, which runs the kernel implementation of
          fsck but without mounting: useful for transparently using the
          kernel version of fsck from 'bcachefs fsck' when the kernel
          version is a better match for the on disk filesystem.
    
        - BCH_IOCTL_ONLINE_FSCK: online fsck. Not all passes are supported
          yet, but the passes that are supported are fully featured - errors
          may be corrected as normal.
    
       The new ioctls use the new 'thread_with_file' abstraction for kicking
       off a kthread that's tied to a file descriptor returned to userspace
       via the ioctl.
    
     - btree_paths within a btree_trans are now dynamically growable,
       instead of being limited to 64. This is important for the
       check_directory_structure phase of fsck, and also fixes some issues
       we were having with btree path overflow in the reflink btree.
    
     - Trigger refactoring; prep work for the upcoming disk space accounting
       rewrite
    
     - Numerous bugfixes :)
    
    * tag 'bcachefs-2024-01-10' of https://evilpiepirate.org/git/bcachefs: (226 commits)
      bcachefs: eytzinger0_find() search should be const
      bcachefs: move "ptrs not changing" optimization to bch2_trigger_extent()
      bcachefs: fix simulateously upgrading & downgrading
      bcachefs: Restart recovery passes more reliably
      bcachefs: bch2_dump_bset() doesn't choke on u64s == 0
      bcachefs: improve checksum error messages
      bcachefs: improve validate_bset_keys()
      bcachefs: print sb magic when relevant
      bcachefs: __bch2_sb_field_to_text()
      bcachefs: %pg is banished
      bcachefs: Improve would_deadlock trace event
      bcachefs: fsck_err()s don't need to manually check c->sb.version anymore
      bcachefs: Upgrades now specify errors to fix, like downgrades
      bcachefs: no thread_with_file in userspace
      bcachefs: Don't autofix errors we can't fix
      bcachefs: add missing bch2_latency_acct() call
      bcachefs: increase max_active on io_complete_wq
      bcachefs: add time_stats for btree_node_read_done()
      bcachefs: don't clear accessed bit in btree node fill
      bcachefs: Add an option to control btree node prefetching
      ...
    999a36b5
super-io.c 35.3 KB