@@ -36,6 +36,7 @@ Pull requests:
3636 if supported
3737 - send 'otime' (inode creation time) among other timestamps
3838 - send file attributes (a.k.a file flags and xflags)
39+
3940 - this is first version bump, backward compatibility on send and
4041 receive side is provided
4142 - there are still some known and wanted commands that will be
@@ -439,31 +440,36 @@ Pull requests:
439440
440441New features:
441442
442- - raid-stripe-tree: New tree for logical file extent mapping where the
443- physical mapping may not match on multiple devices. This is now used in zoned
444- mode to implement RAID0/RAID1* profiles, but can be used in non-zoned mode as
445- well. The support for RAID56 is in development and will eventually fix the
446- problems with the current implementation. This is a backward incompatible
447- feature and has to be enabled at mkfs time.
443+ - raid-stripe-tree:
444+
445+ - New tree for logical file extent mapping where the physical mapping may not
446+ match on multiple devices. This is now used in zoned mode to implement
447+ RAID0/RAID1* profiles, but can be used in non-zoned mode as well. The
448+ support for RAID56 is in development and will eventually fix the problems
449+ with the current implementation. This is a backward incompatible feature
450+ and has to be enabled at mkfs time.
451+
452+ - simple quota accounting (squota):
453+
454+ - A simplified mode of qgroup that accounts all space on the initial extent
455+ owners (a subvolume), the snapshots are then cheap to create and delete.
456+ The deletion of snapshots in fully accounting qgroups is a known CPU/IO
457+ performance bottleneck.
448458
449- - simple quota accounting ( squota): A simplified mode of qgroup that accounts
450- all space on the initial extent owners (a subvolume), the snapshots are then
451- cheap to create and delete. The deletion of snapshots in fully accounting
452- qgroups is a known CPU/IO performance bottleneck .
459+ - Note: The squota is not suitable for the general use case but works well
460+ for containers where the original subvolume exists for the whole time. This
461+ is a backward incompatible feature as it needs extending some structures,
462+ but can be enabled on an existing filesystem .
453463
454- Note: The squota is not suitable for the general use case but works well for
455- containers where the original subvolume exists for the whole time. This is a
456- backward incompatible feature as it needs extending some structures, but can
457- be enabled on an existing filesystem.
464+ - temporary filesystem fsid (temp_fsid):
458465
459- - temporary filesystem fsid (temp_fsid): The fsid identifies a filesystem and
460- is hard coded in the structures, which disallows mounting the same fsid found
461- on different devices.
466+ - The fsid identifies a filesystem and is hard coded in the structures, which
467+ disallows mounting the same fsid found on different devices.
462468
463- For a single device filesystem this is not strictly necessary, a new
464- temporary fsid can be generated on mount e.g. after a device is cloned. This
465- will be used by Steam Deck for root partition A/B testing, or can be used for
466- VM root images.
469+ - For a single device filesystem this is not strictly necessary, a new
470+ temporary fsid can be generated on mount e.g. after a device is cloned.
471+ This will be used by Steam Deck for root partition A/B testing, or can be
472+ used for VM root images.
467473
468474- filesystems with partially finished metadata_uuid conversion cannot be
469475 mounted anymore and the uuid fixup has to be done by btrfs-progs (btrfstune).
@@ -512,20 +518,22 @@ Pull requests:
512518Core changes:
513519
514520- convert extent buffers to folios:
515- - direct API conversion where possible
516- - performance can drop by a few percent on metadata heavy
517- workloads, the folio sizes are not constant and the calculations
518- add up in the item helpers
519- - both regular and subpage modes
520- - data cannot be converted yet, we need to port that to iomap and
521- there are some other generic changes required
521+
522+ - direct API conversion where possible
523+ - performance can drop by a few percent on metadata heavy
524+ workloads, the folio sizes are not constant and the calculations
525+ add up in the item helpers
526+ - both regular and subpage modes
527+ - data cannot be converted yet, we need to port that to iomap and
528+ there are some other generic changes required
522529
523530- convert mount to the new API, should not be user visible:
524- - options deprecated long time ago have been removed: inode_cache,
525- recovery
526- - the new logic that splits mount to two phases slightly changes
527- timing of device scanning for multi-device filesystems
528- - LSM options will now work (like for selinux)
531+
532+ - options deprecated long time ago have been removed: inode_cache,
533+ recovery
534+ - the new logic that splits mount to two phases slightly changes
535+ timing of device scanning for multi-device filesystems
536+ - LSM options will now work (like for selinux)
529537
530538- convert delayed nodes radix tree to xarray, preserving the
531539 preload-like logic that still allows to allocate with GFP_NOFS
@@ -576,15 +584,17 @@ Performance improvements:
576584 delayed allocation bits, applies to several common workload types
577585
578586- features under CONFIG_BTRFS_DEBUG:
579- - sysfs knob for setting the how checksums are calculated when submitting IO,
580- inline or offloaded to a thread, this affects latency and throughput on some
581- block group profiles
587+
588+ - sysfs knob for setting the how checksums are calculated when submitting IO,
589+ inline or offloaded to a thread, this affects latency and throughput on some
590+ block group profiles
582591
583592Notable fixes:
584593
585594- fix device tracking in memory that broke grub-probe
586595
587596- zoned mode fixes:
597+
588598 - use zone-aware super block access during scrub
589599 - delete zones that are 100% unusable to reclaim space
590600
@@ -643,29 +653,32 @@ Pull requests:
643653User visible features:
644654
645655- dynamic block group reclaim:
646- - tunable framework to avoid situations where eager data allocations prevent
647- creating new metadata chunks due to lack of unallocated space
648- - reuse sysfs knob bg_reclaim_threshold (otherwise used only in zoned mode)
649- for a fixed value threshold
650- - new on/off sysfs knob "dynamic_reclaim" calculating the value based on
651- heuristics, aiming to keep spare working space for relocating chunks but
652- not to needlessly relocate partially utilized block groups or reclaim newly
653- allocated ones
654- - stats are exported in sysfs per block group type, files "reclaim_*"
655- - this may increase IO load at unexpected times but the corner case of no
656- allocatable block groups is known to be worse
656+
657+ - tunable framework to avoid situations where eager data allocations prevent
658+ creating new metadata chunks due to lack of unallocated space
659+ - reuse sysfs knob bg_reclaim_threshold (otherwise used only in zoned mode)
660+ for a fixed value threshold
661+ - new on/off sysfs knob "dynamic_reclaim" calculating the value based on
662+ heuristics, aiming to keep spare working space for relocating chunks but
663+ not to needlessly relocate partially utilized block groups or reclaim newly
664+ allocated ones
665+ - stats are exported in sysfs per block group type, files "reclaim_*"
666+ - this may increase IO load at unexpected times but the corner case of no
667+ allocatable block groups is known to be worse
657668
658669- automatically remove qgroup of deleted subvolumes:
659- - adjust qgroup removal conditions, make sure all related subvolume data are
660- already removed, or return EBUSY, also take into account setting of sysfs
661- drop_subtree_threshold
662- - also works in squota mode
663670
664- - mount option updates: new modes of 'rescue=' that allow to mount images
665- (read-only) that could have been partially converted by user space tools
666- - ignoremetacsums - invalid metadata checksums are ignored
667- - ignoresuperflags - super block flags that track conversion in progress
668- (like UUID or checksums)
671+ - adjust qgroup removal conditions, make sure all related subvolume data are
672+ already removed, or return EBUSY, also take into account setting of sysfs
673+ drop_subtree_threshold
674+ - also works in squota mode
675+
676+ - mount option updates: new modes of 'rescue=' that allow to mount images
677+ (read-only) that could have been partially converted by user space tools
678+
679+ - ignoremetacsums - invalid metadata checksums are ignored
680+ - ignoresuperflags - super block flags that track conversion in progress
681+ (like UUID or checksums)
669682
670683Other notable changes or fixes:
671684
@@ -771,15 +784,17 @@ Performance improvements:
771784Core changes:
772785
773786- raid-stripe-tree feature updates:
774- - make device replace and scrub work
775- - implement partial deletion of stripe extents
776- - new selftests
787+
788+ - make device replace and scrub work
789+ - implement partial deletion of stripe extents
790+ - new selftests
777791
778792- split the config option BTRFS_DEBUG and add EXPERIMENTAL for
779793 features that are experimental or with known problems so we don't
780794 misuse debugging config for that
781795
782796- subpage mode updates (sector < page):
797+
783798 - update compression implementations
784799 - update writepage, writeback
785800
@@ -840,27 +855,30 @@ Core:
840855 (post-read, pre-write)
841856
842857- subpage mode fixes:
843- - fix double accounting of blocks due to some races
844- - improved or fixed error handling in a few cases (compression,
845- delalloc)
858+
859+ - fix double accounting of blocks due to some races
860+ - improved or fixed error handling in a few cases (compression,
861+ delalloc)
846862
847863- raid stripe tree:
848- - fix various cases with extent range splitting or deleting
849- - implement hole punching to extent range
850- - reduce number of stripe tree lookups during bio submission
851- - more self-tests
864+
865+ - fix various cases with extent range splitting or deleting
866+ - implement hole punching to extent range
867+ - reduce number of stripe tree lookups during bio submission
868+ - more self-tests
852869
853870- updated self-tests (delayed refs)
854871
855872- error handling improvements
856873
857874- cleanups, refactoring
858- - remove rest of backref caching infrastructure from relocation,
859- not needed anymore
860- - error message updates
861- - remove unnecessary calls when extent buffer was marked dirty
862- - unused parameter removal
863- - code moved to new files
875+
876+ - remove rest of backref caching infrastructure from relocation,
877+ not needed anymore
878+ - error message updates
879+ - remove unnecessary calls when extent buffer was marked dirty
880+ - unused parameter removal
881+ - code moved to new files
864882
8658836.15 (May 2025)
866884^^^^^^^^^^^^^^^
@@ -2036,7 +2054,7 @@ Fixes:
20362054^^^^^^^^^^^^^^
20372055
20382056* restriper - infrastructure to change btrfs raid profiles on the fly via balance
2039- * optional integrity checker infrastructure ([ http://lwn.net/Articles/466493/ details] )
2057+ * optional integrity checker infrastructure (http://lwn.net/Articles/466493)
20402058* fixed a few corner cases where TRIM did not process some blocks
20412059* cluster allocator improvements (less fragmentation, some speedups)
20422060
@@ -2073,8 +2091,8 @@ Fixes:
20732091^^^^^^^^^^^^^^
20742092
20752093* subvolume-aware quotas (''qgroups'')
2076- * support for send/receive between snapshot changes ([ http://lwn.net/Articles/506244/ LWN article] )
2077- * ''atime'' is not updated on read-only snapshots ([ http://lwn.net/Articles/499293/ LWN article] )
2094+ * support for send/receive between snapshot changes (http://lwn.net/Articles/506244)
2095+ * ''atime'' is not updated on read-only snapshots (http://lwn.net/Articles/499293)
20782096* allowed cross-subvolume file clone (aka. reflink)
20792097* remount with ''no'' compression possible
20802098* new ioctl to read device readiness status
@@ -2085,37 +2103,37 @@ Fixes:
20852103
20862104* ''fsync'' speedups
20872105* removed limitation of number of hardlinks in a single directory
2088- * file hole punching ([ http://lwn.net/Articles/415889/ LWN article] )
2106+ * file hole punching (http://lwn.net/Articles/415889)
20892107* per-file ''NOCOW''
20902108* fixes to send/receive
20912109
209221103.8 (Feb 2013)
20932111^^^^^^^^^^^^^^
20942112
2095- * ability to replace devices at runtime in an effective way ([ http://lwn.net/Articles/524589/ description] )
2113+ * ability to replace devices at runtime in an effective way (http://lwn.net/Articles/524589)
20962114* speed improvements (cumulative effect of many small improvements)
20972115* a few more bugfixes
20982116
209921173.9 (Apr 2013)
21002118^^^^^^^^^^^^^^
21012119
2102- * preliminary Raid 5/6 support (details in the [ http://www.spinics.net/lists/linux-btrfs/msg22169.html announcement] )
2120+ * preliminary Raid 5/6 support (details in http://www.spinics.net/lists/linux-btrfs/msg22169.html)
21032121* snapshot-aware defrag
21042122* a mode of ''send'' to avoid transferring file data
2105- * direct IO speedup ([ https://patchwork.kernel.org/patch/2114921/ numbers] )
2123+ * direct IO speedup (https://patchwork.kernel.org/patch/2114921)
21062124* new ''ioctl''s to set/get filesystem label
21072125* defrag is cancellable
21082126
210921273.10 (Jun 2013)
21102128^^^^^^^^^^^^^^^
21112129
2112- * reduced size of metadata by so-called :ref: `skinny extents<mkfs-feature-skinny-metadata> ` [ http://git.kernel.org/linus/3173a18f70554fe7880bb2d85c7da566e364eb3c]
2113- * enhanced syslog message format [ http://permalink.gmane.org/gmane.comp.file-systems.btrfs/24330]
2130+ * reduced size of metadata by so-called :ref: `skinny extents<mkfs-feature-skinny-metadata> ` ( http://git.kernel.org/linus/3173a18f70554fe7880bb2d85c7da566e364eb3c)
2131+ * enhanced syslog message format ( http://permalink.gmane.org/gmane.comp.file-systems.btrfs/24330)
21142132* the mount option ''subvolrootid'' is deprecated
21152133* lots of stability improvements, removed many< BUG_ONs
2116- * qgroups are automatically created when quotas are enabled [ http://git.kernel.org/linus/7708f029dca5f1b9e9d6ea01ab10cd83e4c74ff2]
2134+ * qgroups are automatically created when quotas are enabled ( http://git.kernel.org/linus/7708f029dca5f1b9e9d6ea01ab10cd83e4c74ff2)
21172135* qgroups are able to ''rescan'' current filesystem and sync the quota state with the existing subvolumes
2118- * enhanced ''send/recv '' format for multiplexing more data into one stream [ http://git.kernel.org/linus/c2c71324ecb471c932bc1ff59e46ffcf82f274fc]
2136+ * enhanced ''send/recv '' format for multiplexing more data into one stream ( http://git.kernel.org/linus/c2c71324ecb471c932bc1ff59e46ffcf82f274fc)
21192137* various unsorted code cleanups, minor performance updates
21202138
212121393.11 (Sep 2013)
@@ -2159,29 +2177,29 @@ Fixes:
215921773.16 (Aug 2014)
21602178^^^^^^^^^^^^^^^
21612179
2162- * ''O_TMPFILE'' support [ http://kernelnewbies.org/Linux_3.11#head-8be09d59438b31c2a724547838f234cb33c40357]
2180+ * ''O_TMPFILE'' support ( http://kernelnewbies.org/Linux_3.11#head-8be09d59438b31c2a724547838f234cb33c40357)
21632181* reworked qgroup accounting, to fix negative numbers after subvol deletion
2164- * SEARCH_TREE ioctl v2, extended for retrieving more data [ http://www.spinics.net/lists/linux-btrfs/msg31213.html]
2165- * new balance filter ''limit'' for more finegrained balancing [ http://www.spinics.net/lists/linux-btrfs/msg33872.html]
2182+ * SEARCH_TREE ioctl v2, extended for retrieving more data ( http://www.spinics.net/lists/linux-btrfs/msg31213.html)
2183+ * new balance filter ''limit'' for more finegrained balancing ( http://www.spinics.net/lists/linux-btrfs/msg33872.html)
21662184* ioctl FS_INFO and it's sysfs counterpart export information about ''nodesize'', ''sectorsize'' and ''clone_alignment''
21672185* snapshots are protected during send
21682186
216921873.17 (Oct 2014)
21702188^^^^^^^^^^^^^^^
21712189
2172- * fix for the infamous deadlock [ https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]
2173- * fixed longstanding bug in qgroups accounting after snapshot deletion [ https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30]
2174- * updated (less inaccurate) ''df'' numbers [ https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d]
2175- * speedup for ''rename'' and ''truncate'', less strict flushes [ https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc]
2190+ * fix for the infamous deadlock ( https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d)
2191+ * fixed longstanding bug in qgroups accounting after snapshot deletion ( https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30)
2192+ * updated (less inaccurate) ''df'' numbers ( https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d)
2193+ * speedup for ''rename'' and ''truncate'', less strict flushes ( https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc)
21762194* updated and fixes to the ''seeding'' feature
21772195
217821963.17 (Oct 2014)
21792197^^^^^^^^^^^^^^^
21802198
2181- * fix for the infamous deadlock [ https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]
2182- * fixed longstanding bug in qgroups accounting after snapshot deletion [ https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30]
2183- * updated (less inaccurate) ''df'' numbers [ https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d]
2184- * speedup for ''rename'' and ''truncate'', less strict flushes [ https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc]
2199+ * fix for the infamous deadlock ( https://git.kernel.org/linus/9e0af23764344f7f1b68e4eefbe7dc865018b63d]
2200+ * fixed longstanding bug in qgroups accounting after snapshot deletion ( https://git.kernel.org/linus/1152651a081720ef6a8c76bb7da676e8c900ac30)
2201+ * updated (less inaccurate) ''df'' numbers ( https://git.kernel.org/linus/ba7b6e62f420f5a8832bc161ab0c7ba767f65b3d)
2202+ * speedup for ''rename'' and ''truncate'', less strict flushes ( https://git.kernel.org/linus/8d875f95da43c6a8f18f77869f2ef26e9594fecc)
21852203* updated and fixes to the ''seeding'' feature
21862204
218722053.18 (Dec 2014)
@@ -2211,8 +2229,7 @@ get/set ioctl, allow compression during defrag.
22112229
22122230On-disk free space cache, asynchronous snapshots, unprivileged subvolume
22132231deletion, extent buffer switches from a rbtree with spinlocks to a radix tree
2214- with RCU. (Explanations of these features are described in
2215- [http://www.linux-mag.com/id/7945 this] article [registration needed]).
2232+ with RCU.
22162233
221722342.6.35 (August 2010)
22182235^^^^^^^^^^^^^^^^^^^^
@@ -2245,16 +2262,16 @@ of space and still show some free space. That space comes from a data/metadata
22452262chunk that can't get filled because there's not space left to create its
22462263metadata/data counterpart chunk. This is unrelated to the -ENOSPC handling and
22472264will be fixed in the future. Code:
2248- [ http://git.kernel.org/linus/9ed74f2dba6ebf9f30b80554290bfc73cc3ef083 (commit)]
2265+ ( http://git.kernel.org/linus/9ed74f2dba6ebf9f30b80554290bfc73cc3ef083)
22492266
22502267Proper snapshot and subvolume deletion
22512268
22522269In the last btrfs-progs version you have options that allow to delete snapshots
22532270and subvolumes without having to use rm. This is much faster because it does
22542271the deletion via btree walking. It's also now possible to rename snapshots and
22552272subvols. Work done by Yan Zheng (Oracle). Code:
2256- [ http://git.kernel.org/linus/4df27c4d5cc1dda54ed7d0a8389347f2df359cf9 (commit
2257- 1)], [ http://git.kernel.org/linus/76dda93c6ae2c1dc3e6cde34569d6aca26b0c918 2)]
2273+ ( http://git.kernel.org/linus/4df27c4d5cc1dda54ed7d0a8389347f2df359cf9,
2274+ http://git.kernel.org/linus/76dda93c6ae2c1dc3e6cde34569d6aca26b0c918)
22582275
22592276Performance improvements
22602277
@@ -2270,9 +2287,8 @@ Support for "discard" operation on SSD devices
22702287
22712288"Discard" support is a way to telling SSD devices which blocks are free so that
22722289the underlying firmware knows that it's safe to do some optimizations
2273- [http://git.kernel.org/linus/e244a0aeb6a599c19a7c802cda6e2d67c847b154
2274- (commit)],
2275- [http://git.kernel.org/linus/0634857488ec6e28fa22920cd0bee3c2ac07ccfd (commit)]
2290+ (http://git.kernel.org/linus/e244a0aeb6a599c19a7c802cda6e2d67c847b154,
2291+ http://git.kernel.org/linus/0634857488ec6e28fa22920cd0bee3c2ac07ccfd )
22762292
227722930.x
22782294---
0 commit comments