Merge tag 'for-6.9-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Mar 2024 19:28:34 +0000 (12:28 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Mar 2024 19:28:34 +0000 (12:28 -0700)
Pull btrfs updates from David Sterba:
 "Mostly stabilization, refactoring and cleanup changes. There rest are
  minor performance optimizations due to caching or lock contention
  reduction and a few notable fixes.

  Performance improvements:

   - minor speedup in logging when repeatedly allocated structure is
     preallocated only once, improves latency and decreases lock
     contention

   - minor throughput increase (+6%), reduced lock contention after
     clearing delayed allocation bits, applies to several common
     workload types

   - skip full quota rescan if a new relation is added in the same
     transaction

  Fixes:

   - zstd fix for inline compressed file in subpage mode, updated
     version from the 6.8 time

   - proper qgroup inheritance ioctl parameter validation

   - more fiemap followup fixes after reduced locking done in 6.8:
      - fix race when detecting delalloc ranges

  Core changes:

   - more debugging code:
      - added assertions for a very rare crash in raid56 calculation
      - tree-checker dumps page state to give more insights into
        possible reference counting issues

   - add checksum calculation offloading sysfs knob, for now enabled
     under DEBUG only to determine a good heuristic for deciding the
     offload or synchronous, depends on various factors (block group
     profile, device speed) and is not as clear as initially thought
     (checksum type)

   - error handling improvements, added assertions

   - more page to folio conversion (defrag, truncate), cached size and
     shift

   - preparation for more fine grained locking of sectors in subpage
     mode

   - cleanups and refactoring:
      - include cleanups, forward declarations
      - pointer-to-structure helpers
      - redundant argument removals
      - removed unused code
      - slab cache updates, last use of SLAB_MEM_SPREAD removed"

* tag 'for-6.9-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (114 commits)
  btrfs: reuse cloned extent buffer during fiemap to avoid re-allocations
  btrfs: fix race when detecting delalloc ranges during fiemap
  btrfs: fix off-by-one chunk length calculation at contains_pending_extent()
  btrfs: qgroup: allow quick inherit if snapshot is created and added to the same parent
  btrfs: qgroup: validate btrfs_qgroup_inherit parameter
  btrfs: include device major and minor numbers in the device scan notice
  btrfs: mark btrfs_put_caching_control() static
  btrfs: remove SLAB_MEM_SPREAD flag use
  btrfs: qgroup: always free reserved space for extent records
  btrfs: tree-checker: dump the page status if hit something wrong
  btrfs: compression: remove dead comments in btrfs_compress_heuristic()
  btrfs: subpage: make writer lock utilize bitmap
  btrfs: subpage: make reader lock utilize bitmap
  btrfs: unexport btrfs_subpage_start_writer() and btrfs_subpage_end_and_test_writer()
  btrfs: pass a valid extent map cache pointer to __get_extent_map()
  btrfs: merge btrfs_del_delalloc_inode() helpers
  btrfs: pass btrfs_device to btrfs_scratch_superblocks()
  btrfs: handle transaction commit errors in flush_reservations()
  btrfs: use KMEM_CACHE() to create btrfs_free_space cache
  btrfs: use KMEM_CACHE() to create delayed ref caches
  ...

1  2 
fs/btrfs/dev-replace.c
fs/btrfs/ioctl.c
fs/btrfs/volumes.c
fs/btrfs/volumes.h
fs/btrfs/zoned.c

Simple merge
index 9876ee27f069e693f47c74170f5c54167b8c0268,38459a89b27c4d82b2bb0eb81eadf7ebfda98da3..294e31edec9d3bbe566e9234c8ef76d73612adbc
@@@ -2696,9 -2715,9 +2715,9 @@@ static long btrfs_ioctl_rm_dev_v2(struc
  {
        BTRFS_DEV_LOOKUP_ARGS(args);
        struct inode *inode = file_inode(file);
-       struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
+       struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);
        struct btrfs_ioctl_vol_args_v2 *vol_args;
 -      struct bdev_handle *bdev_handle = NULL;
 +      struct file *bdev_file = NULL;
        int ret;
        bool cancel = false;
  
@@@ -2761,9 -2783,9 +2783,9 @@@ static long btrfs_ioctl_rm_dev(struct f
  {
        BTRFS_DEV_LOOKUP_ARGS(args);
        struct inode *inode = file_inode(file);
-       struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
+       struct btrfs_fs_info *fs_info = inode_to_fs_info(inode);
        struct btrfs_ioctl_vol_args *vol_args;
 -      struct bdev_handle *bdev_handle = NULL;
 +      struct file *bdev_file = NULL;
        int ret;
        bool cancel = false;
  
        }
  
        mnt_drop_write_file(file);
 -      if (bdev_handle)
 -              bdev_release(bdev_handle);
 +      if (bdev_file)
 +              fput(bdev_file);
  out:
        btrfs_put_dev_args_from_path(&args);
+ out_free:
        kfree(vol_args);
        return ret;
  }
index e180da4cc227317370401651d495c303d5a79782,e49935a54da0a398a672ac4c79d2e007a532a913..a2d07fa3cfdff4081f34365d121cc7acdf845750
@@@ -2182,13 -2184,12 +2184,12 @@@ int btrfs_rm_device(struct btrfs_fs_inf
         * free the device.
         *
         * We cannot call btrfs_close_bdev() here because we're holding the sb
 -       * write lock, and bdev_release() will pull in the ->open_mutex on
 -       * the block device and it's dependencies.  Instead just flush the
 -       * device and let the caller do the final bdev_release.
 +       * write lock, and fput() on the block device will pull in the
 +       * ->open_mutex on the block device and it's dependencies.  Instead
 +       *  just flush the device and let the caller do the final bdev_release.
         */
        if (test_bit(BTRFS_DEV_STATE_WRITEABLE, &device->dev_state)) {
-               btrfs_scratch_superblocks(fs_info, device->bdev,
-                                         device->name->str);
+               btrfs_scratch_superblocks(fs_info, device);
                if (device->bdev) {
                        sync_blockdev(device->bdev);
                        invalidate_bdev(device->bdev);
Simple merge
Simple merge