Pull btrfs updates from David Sterba: "User visible changes: - fall back to buffered write if direct io is done on a file that requires checksums - this avoids a problem with checksum mismatch errors, observed e.g. on virtual images when writes to pages under writeback cause the checksum mismatch reports - this may lead to some performance degradation but currently the recommended setup for VM images is to use the NOCOW file attribute that also disables checksums - fast/realtime zstd levels -15 to -1 - supported by mount options (compress=zstd:-5) and defrag ioctl - improved speed, reduced compression ratio, check the commit for sample measurements - defrag ioctl extended to accept negative compression levels - subpage mode - remove warning when subpage mode is used, the feature is now reasonably complete and tested - in debug mode allow to create 2K b-tree nodes to allow testing subpage on x86_64 with 4K pages too Performance improvements: - in send, better file path caching improves runtime (on sample load by -30%) - on s390x with hardware zlib support prepare the input buffer in a better way to get the best results from the acceleration - minor speed improvement in encoded read, avoid memory allocation in synchronous mode Core: - enable stable writes on inodes, replacing manually waiting for writeback and allowing to skip that on inodes without checksums - add last checks and warnings for out-of-band dirty writes to pages, requiring a fixup ("fixup worker"), this should not be necessary since 5.8 where get_user_page() and pin_user_pages*() prevent this - long history behind that, we'll be happy to remove the whole infrastructure in the near future - more folio API conversions and preparations for large folio support - subpage cleanups and refactoring, split handling of data and metadata to allow future support for large folios - readpage works as block-by-block, no change for normal mode, this is preparation for future subpage updates - block group refcount fixes and hardening - delayed iput fixes - in zoned mode, fix zone activation on filesystem with missing devices Cleanups: - inode parameter cleanups - path auto-freeing updates - code flow simplifications in send - redundant parameter cleanups" * tag 'for-6.15-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux: (164 commits) btrfs: zoned: fix zone finishing with missing devices btrfs: zoned: fix zone activation with missing devices btrfs: remove end_no_trans label from btrfs_log_inode_parent() btrfs: simplify condition for logging new dentries at btrfs_log_inode_parent() btrfs: remove redundant else statement from btrfs_log_inode_parent() btrfs: use memcmp_extent_buffer() at replay_one_extent() btrfs: update outdated comment for overwrite_item() btrfs: use variables to store extent buffer and slot at overwrite_item() btrfs: avoid unnecessary memory allocation and copy at overwrite_item() btrfs: don't clobber ret in btrfs_validate_super() btrfs: prepare btrfs_page_mkwrite() for large folios btrfs: prepare extent_io.c for future large folio support btrfs: prepare btrfs_launcher_folio() for large folios support btrfs: replace PAGE_SIZE with folio_size for subpage.[ch] btrfs: add a size parameter to btrfs_alloc_subpage() btrfs: subpage: make btrfs_is_subpage() check against a folio btrfs: add extra warning if delayed iput is added when it's not allowed btrfs: avoid redundant path slot assignment in btrfs_search_forward() btrfs: remove unnecessary btrfs_key local variable in btrfs_search_forward() btrfs: simplify the return value handling in search_ioctl() ...
Showing the changes to include/uapi/linux (1 of 74 files). Show all
Unified · Split
| @@ -615,7 +615,9 @@ struct btrfs_ioctl_clone_range_args { · 614 unmodified lines | |||
| 615 | */ | 615 | */ |
| 616 | #define BTRFS_DEFRAG_RANGE_COMPRESS 1 | 616 | #define BTRFS_DEFRAG_RANGE_COMPRESS 1 |
| 617 | #define BTRFS_DEFRAG_RANGE_START_IO 2 | 617 | #define BTRFS_DEFRAG_RANGE_START_IO 2 |
| 618 | #define BTRFS_DEFRAG_RANGE_COMPRESS_LEVEL 4 | ||
| 618 | #define BTRFS_DEFRAG_RANGE_FLAGS_SUPP (BTRFS_DEFRAG_RANGE_COMPRESS | \ | 619 | #define BTRFS_DEFRAG_RANGE_FLAGS_SUPP (BTRFS_DEFRAG_RANGE_COMPRESS | \ |
| 620 | BTRFS_DEFRAG_RANGE_COMPRESS_LEVEL | \ | ||
| 619 | BTRFS_DEFRAG_RANGE_START_IO) | 621 | BTRFS_DEFRAG_RANGE_START_IO) |
| 620 | 622 | ||
| 621 | struct btrfs_ioctl_defrag_range_args { | 623 | struct btrfs_ioctl_defrag_range_args { |
| @@ -640,10 +642,18 @@ struct btrfs_ioctl_defrag_range_args { · 18 unmodified lines | |||
| 640 | 642 | ||
| 641 | /* | 643 | /* |
| 642 | * which compression method to use if turning on compression | 644 | * which compression method to use if turning on compression |
| 643 | * for this defrag operation. If unspecified, zlib will | 645 | * for this defrag operation. If unspecified, zlib will be |
| 644 | * be used | 646 | * used. If compression level is also being specified, set the |
| 647 | * BTRFS_DEFRAG_RANGE_COMPRESS_LEVEL flag and fill the compress | ||
| 648 | * member structure instead of the compress_type field. | ||
| 645 | */ | 649 | */ |
| 646 | __u32 compress_type; | 650 | union { |
| 651 | __u32 compress_type; | ||
| 652 | struct { | ||
| 653 | __u8 type; | ||
| 654 | __s8 level; | ||
| 655 | } compress; | ||
| 656 | }; | ||
| 647 | 657 | ||
| 648 | /* spare for later */ | 658 | /* spare for later */ |
| 649 | __u32 unused[4]; | 659 | __u32 unused[4]; |