• Linus Torvalds's avatar
    Merge tag 'for-5.20/io_uring-buffered-writes-2022-07-29' of git://git.kernel.dk/linux-block · 98e24746
    Linus Torvalds authored
    Pull io_uring buffered writes support from Jens Axboe:
     "This contains support for buffered writes, specifically for XFS. btrfs
      is in progress, will be coming in the next release.
    
      io_uring does support buffered writes on any file type, but since the
      buffered write path just always -EAGAIN (or -EOPNOTSUPP) any attempt
      to do so if IOCB_NOWAIT is set, any buffered write will effectively be
      handled by io-wq offload. This isn't very efficient, and we even have
      specific code in io-wq to serialize buffered writes to the same inode
      to avoid further inefficiencies with thread offload.
    
      This is particularly sad since most buffered writes don't block, they
      simply copy data to a page and dirty it. With this pull request, we
      can handle buffered writes a lot more effiently.
    
      If balance_dirty_pages() needs to block, we back off on writes as
      indicated.
    
      This improves buffered write support by 2-3x.
    
      Jan Kara helped with the mm bits for this, and Stefan handled the
      fs/iomap/xfs/io_uring parts of it"
    
    * tag 'for-5.20/io_uring-buffered-writes-2022-07-29' of git://git.kernel.dk/linux-block:
      mm: honor FGP_NOWAIT for page cache page allocation
      xfs: Add async buffered write support
      xfs: Specify lockmode when calling xfs_ilock_for_iomap()
      io_uring: Add tracepoint for short writes
      io_uring: fix issue with io_write() not always undoing sb_start_write()
      io_uring: Add support for async buffered writes
      fs: Add async write file modification handling.
      fs: Split off inode_needs_update_time and __file_update_time
      fs: add __remove_file_privs() with flags parameter
      fs: add a FMODE_BUF_WASYNC flags for f_mode
      iomap: Return -EAGAIN from iomap_write_iter()
      iomap: Add async buffered write support
      iomap: Add flags parameter to iomap_page_create()
      mm: Add balance_dirty_pages_ratelimited_flags() function
      mm: Move updates of dirty_exceeded into one place
      mm: Move starting of background writeback into the main balancing loop
    98e24746
read_write.c 40.3 KB