Commit c14a8a4c04c5 for kernel

commit c14a8a4c04c5859322eb5801db662b56b2294f67
Merge: 3e7447ab48d1 e82c936293aa
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Mon Nov 18 16:37:41 2024 -0800

    Merge tag 'for-6.13-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux

    Pull btrfs updates from David Sterba:
     "Changes outside of btrfs: add io_uring command flag to track a dying
      task (the rest will go via the block git tree).

      User visible changes:

       - wire encoded read (ioctl) to io_uring commands, this can be used on
         itself, in the future this will allow 'send' to be asynchronous. As
         a consequence, the encoded read ioctl can also work in non-blocking
         mode

       - new ioctl to wait for cleaned subvolumes, no need to use the
         generic and root-only SEARCH_TREE ioctl, will be used by "btrfs
         subvol sync"

       - recognize different paths/symlinks for the same devices and don't
         report them during rescanning, this can be observed with LVM or DM

       - seeding device use case change, the sprout device (the one
         capturing new writes) will not clear the read-only status of the
         super block; this prevents accumulating space from deleted
         snapshots

      Performance improvements:

       - reduce lock contention when traversing extent buffers

       - reduce extent tree lock contention when searching for inline
         backref

       - switch from rb-trees to xarray for delayed ref tracking,
         improvements due to better cache locality, branching factors and
         more compact data structures

       - enable extent map shrinker again (prevent memory exhaustion under
         some types of IO load), reworked to run in a single worker thread
         (there used to be problems causing long stalls under memory
         pressure)

      Core changes:

       - raid-stripe-tree feature updates:
           - make device replace and scrub work
           - implement partial deletion of stripe extents
           - new selftests

       - split the config option BTRFS_DEBUG and add EXPERIMENTAL for
         features that are experimental or with known problems so we don't
         misuse debugging config for that

       - subpage mode updates (sector < page):
           - update compression implementations
           - update writepage, writeback

       - continued folio API conversions:
           - buffered writes

       - make buffered write copy one page at a time, preparatory work for
         future integration with large folios, may cause performance drop

       - proper locking of root item regarding starting send

       - error handling improvements

       - code cleanups and refactoring:
           - dead code removal
           - unused parameter reduction
           - lockdep assertions"

    * tag 'for-6.13-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (119 commits)
      btrfs: send: check for read-only send root under critical section
      btrfs: send: check for dead send root under critical section
      btrfs: remove check for NULL fs_info at btrfs_folio_end_lock_bitmap()
      btrfs: fix warning on PTR_ERR() against NULL device at btrfs_control_ioctl()
      btrfs: fix a typo in btrfs_use_zone_append
      btrfs: avoid superfluous calls to free_extent_map() in btrfs_encoded_read()
      btrfs: simplify logic to decrement snapshot counter at btrfs_mksnapshot()
      btrfs: remove hole from struct btrfs_delayed_node
      btrfs: update stale comment for struct btrfs_delayed_ref_node::add_list
      btrfs: add new ioctl to wait for cleaned subvolumes
      btrfs: simplify range tracking in cow_file_range()
      btrfs: remove conditional path allocation in btrfs_read_locked_inode()
      btrfs: push cleanup into btrfs_read_locked_inode()
      io_uring/cmd: let cmds to know about dying task
      btrfs: add struct io_btrfs_cmd as type for io_uring_cmd_to_pdu()
      btrfs: add io_uring command for encoded reads (ENCODED_READ ioctl)
      btrfs: move priv off stack in btrfs_encoded_read_regular_fill_pages()
      btrfs: don't sleep in btrfs_encoded_read() if IOCB_NOWAIT is set
      btrfs: change btrfs_encoded_read() so that reading of extent is done by caller
      btrfs: remove pointless iocb::ki_pos addition in btrfs_encoded_read()
      ...

diff --cc fs/btrfs/file.c
index e5384ceb8acf,fbb753300071..588c353d2969
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@@ -1120,7 -1067,27 +1067,7 @@@ void btrfs_check_nocow_unlock(struct bt
  	btrfs_drew_write_unlock(&inode->root->snapshot_lock);
  }

- int btrfs_write_check(struct kiocb *iocb, struct iov_iter *from, size_t count)
 -static void update_time_for_write(struct inode *inode)
 -{
 -	struct timespec64 now, ts;
 -
 -	if (IS_NOCMTIME(inode))
 -		return;
 -
 -	now = current_time(inode);
 -	ts = inode_get_mtime(inode);
 -	if (!timespec64_equal(&ts, &now))
 -		inode_set_mtime_to_ts(inode, now);
 -
 -	ts = inode_get_ctime(inode);
 -	if (!timespec64_equal(&ts, &now))
 -		inode_set_ctime_to_ts(inode, now);
 -
 -	if (IS_I_VERSION(inode))
 -		inode_inc_iversion(inode);
 -}
 -
+ int btrfs_write_check(struct kiocb *iocb, size_t count)
  {
  	struct file *file = iocb->ki_filp;
  	struct inode *inode = file_inode(file);