Bcachefs
Bcachefs is a copy-on-write (CoW) filesystem for Linux operating systems, primarily developed by Kent Overstreet and first announced in 2015 as an evolution of the earlier bcache block caching layer.[1][2] It incorporates advanced features such as multi-device spanning, integrated RAID-like redundancy including erasure coding, inline compression and deduplication, end-to-end checksumming for data integrity, and configurable consistency modes prioritizing either performance or durability.[1][3] Designed to rival established CoW filesystems like Btrfs and ZFS, bcachefs employs a novel B-tree-based architecture for efficient metadata management and snapshotting, with an emphasis on robustness against corruption through mechanisms like journaled replays and self-healing.[4][5] Merged into the Linux kernel with version 6.7 in late 2023, it faced persistent stability challenges, including data loss bugs and incomplete feature implementations, prompting extensive patches and scrutiny from kernel maintainers.[6][7] These issues, compounded by Overstreet's contentious interactions with the Linux kernel mailing list—including public criticisms of other developers and resistance to merge freezes—led Linus Torvalds to reclassify it as "externally maintained" in August 2025 and ultimately excise the code from the mainline kernel ahead of version 6.18, shifting its distribution to DKMS modules outside core kernel trees.[8][9][10] Despite these setbacks, ongoing development continues via Overstreet's repositories, supported by community funding, with goals to refine reliability for production use in high-performance storage scenarios.[11][12]Overview and Design
Core Design Principles
Bcachefs is a copy-on-write (CoW) filesystem that employs b+trees for all metadata and data storage, treating the filesystem as a database-like structure to ensure consistency and efficient querying.[1] This design inherits from bcache, a block-layer caching system, prioritizing efficient invalidation of cached data and rapid reuse of disk space through bucket-based allocation and generation counters, which prevent fragmentation and enable writeback caching across multiple devices.[4] Unlike traditional filesystems, bcachefs uses large, log-structured btree nodes with journalled updates to handle random writes efficiently, avoiding the overhead of small, frequent allocations.[4] A primary goal is data integrity and robustness, achieved through per-extent checksumming (using CRC32c by default on up to 64 KiB blocks) and support for AEAD encryption with ChaCha20/Poly1305, establishing a cryptographic trust chain from superblock to leaves.[4] CoW mechanics ensure atomic updates, preventing partial writes from corrupting data, while built-in repair tools allow automatic detection and correction of corruption without user intervention, addressing failures in hardware or media.[1] The system supports replication, erasure coding (under development as of 2023), and full online filesystem checks, aiming to eliminate data loss risks common in less robust filesystems.[1] Performance is oriented toward soft real-time operation, with btree traversals designed for minimal latency by releasing locks before I/O submission and using compacted nodes to reduce seek overhead.[4] This enables low-latency workloads on spinning disks or SSDs, with features like compression and caching tiers (writeback, writethrough, or none) to optimize for diverse hardware configurations, including petabyte-scale volumes.[1] Developer Kent Overstreet has emphasized avoiding design flaws in on-disk formats that plague predecessors, focusing instead on verifiable correctness through extensive assertions and testing.[4]Key Features
Bcachefs is a copy-on-write (CoW) filesystem that utilizes a B-tree-based structure for all metadata and data extents, facilitating atomic updates, efficient snapshots, and inherent protection against data corruption through immutable snapshots.[1][4] This design descends from the bcache block cache, integrating caching directly into the filesystem layer to enable tiered storage where faster devices, such as SSDs, can cache slower backing storage like HDDs without requiring separate block-layer configuration.[1][3] The filesystem supports multi-device operation natively, allowing users to span volumes across multiple drives with flexible replication levels (e.g., RAID1-like mirroring) and dynamic reconfiguration, including online addition or removal of devices.[13][3] Erasure coding is implemented as a background process: foreground writes use replication for speed, while eligible data is later converted to parity-protected stripes across devices, reducing storage overhead compared to pure mirroring while maintaining redundancy against drive failures.[14][15] End-to-end checksumming verifies both data and metadata integrity, with cryptographic hashes stored alongside blocks to detect silent corruption during reads or scrubs.[13][16] Native compression employs multiple algorithms (e.g., zstd, lzo) applied in tiers, allowing per-file or per-subvolume selection, while built-in encryption uses kernel-native mechanisms for device-level protection.[3][17] Additional capabilities include subvolume management akin to modern filesystems, online filesystem checks (fsck) that leverage the CoW structure for rapid verification without unmounting, and support for deduplication through extent sharing in the B-tree.[4][18]Technical Architecture
On-Disk Format and Copy-on-Write Mechanics
The on-disk format of Bcachefs centers on a superblock followed by btrees storing metadata as key-value pairs, with data organized into fixed-size buckets for efficient allocation and garbage collection. The superblock resides 4KB from the start of each device, with redundant copies—one immediately following the primary and another at the device's end—to ensure recoverability. It includes essential metadata such as filesystem UUIDs, on-disk format version numbers, device count, default block size of 4KB, creation timestamp, and mount options, alongside variable sections for journal entries, device member details, encryption keys, replication policies, quotas, disk group labels, and clean shutdown indicators.[19][4] The format supports versioning, with the last major upgrade integrated into Linux kernel 6.14 in January 2025, after which changes became optional rather than mandatory, stabilizing the structure as of February 2025.[19] Btrees form the core data structure, implementing a multi-type index (e.g., extents, inodes, directory entries, xattrs) where keys use astruct bpos comprising inode number, logical offset, and reserved snapshot ID, paired with struct bkey values encoding pointers, sizes, and types like KEY_TYPE_extent for file data or KEY_TYPE_inode for attributes. Nodes are large (typically 256KB) and log-structured, holding multiple sorted bset trees of bkeys to minimize fragmentation and enable efficient merging during reads via mergesort. Data extents reference physical locations in buckets of 128KB to 2MB, tracked by generation counters to invalidate stale pointers without immediate overwrites.[20][19] The journal, embedded in superblocks and journal buckets, logs updates as struct jset entries—including btree keys, root pointers, timestamps, and usage counters—for atomic replay on mount, enforcing sequential consistency across devices.[4]
Copy-on-write (CoW) mechanics operate through the btree's append-only updates: modifications insert new keys into leaf nodes, appending to existing bset logs until the node fills, at which point the node is rewritten entirely with compacted, duplicate-free content, propagating changes recursively to parent nodes up to the root. Old keys are not overwritten in place but marked with KEY_TYPE_deleted and pruned during rewrites, preserving historical versions via the snapshot field in bpos for future subvolume and reflink support. This avoids metadata fragmentation and enables features like snapshots by forking btree roots without data duplication initially. Data writes follow suit, allocating fresh buckets sequentially and using copy garbage collection (copygc) to evacuate live extents from partially filled or fragmented buckets, ensuring no in-place mutations and facilitating replication or erasure coding.[20][4] Concurrency is managed via SIX locks on nodes (shared for reads, intent for traversals, exclusive for writes), with auxiliary search trees per cacheline accelerating lookups in sorted bsets.[20]
Multi-Device and Caching Support
Bcachefs natively supports multi-device filesystems, enabling data distribution across devices of heterogeneous sizes and performance levels without requiring uniform partitioning. The allocator stripes extents across all devices by default, dynamically favoring those with greater free space to balance utilization and prevent fragmentation on any single device. This approach integrates seamlessly with copy-on-write mechanics, where new data allocations respect device capacities and availability during striping.[4] Device management relies on hierarchical labels, formatted as paths (e.g.,ssd.cache1 or hdd.pool1.disk2), which group devices logically for targeted operations. During filesystem creation, labels are assigned via the bcachefs format command, such as bcachefs format --label=ssd.ssd /dev/nvme0n1 --label=hdd.hdd /dev/sda. Mount options then reference these labels through targets like --foreground_target, --background_target, and --promote_target to direct I/O flows—foreground for synchronous writes, background for asynchronous data relocation, and promote for read-hit caching. This labeling system allows flexible topologies, including multiple cache tiers or backing pools, while supporting online device addition and removal via bcachefs device add and bcachefs device remove without filesystem downtime.[21][4]
Caching extends multi-device capabilities into tiered storage, designating fast devices (e.g., NVMe SSDs) as caches atop slower backing devices (e.g., HDDs). In writeback mode, foreground writes land on the cache target, with background flushes marking originals as cached copies; read misses trigger promotion to the promote target via LRU eviction when space constrains. Writethrough and writearound variants are configurable by adjusting targets and durability (e.g., --durability=0 for non-replicated writethrough on volatile caches), ensuring data integrity through end-to-end checksumming across tiers. Eviction prioritizes least-recently-used extents, with fallbacks to available space if primary targets fill, preventing I/O stalls. This contrasts with external caching layers like bcache by embedding tiering directly in the filesystem, avoiding separate block-device indirection.[21]
Erasure Coding and Data Integrity
Bcachefs implements comprehensive data integrity through end-to-end checksumming of both data and metadata blocks, enabling the filesystem to detect silent corruption caused by hardware faults or bit rot and, where possible, recover from it without returning incorrect data to users.[1] This checksumming is integrated into the copy-on-write (CoW) architecture, which prevents in-place modifications and ensures atomic updates, reducing the risk of inconsistent states during failures.[1] Recovery mechanisms include runtime metadata verification and btree node scans, with ongoing development of full online filesystem checks (fsck) for automated repair of damage with minimal intervention.[1] Redundancy in Bcachefs is primarily achieved via configurable replication, where thereplicas option specifies the number of copies (e.g., replicas=2 tolerates one device failure), distributing data across multiple devices to protect against disk loss.[15] Checksumming verifies replicas during reads, allowing the filesystem to select valid copies and repair inconsistencies. This approach provides straightforward fault tolerance but incurs higher storage overhead compared to parity-based methods.[1]
For more space-efficient redundancy, Bcachefs supports Reed-Solomon erasure coding on data blocks (excluding metadata), mimicking RAID5/6 functionality while leveraging CoW to eliminate the "write hole" vulnerability present in traditional RAID arrays and filesystems like Btrfs or ZFS.[14] [15] Writes are initially replicated across devices in bucket-sized stripes (typically 512 KiB to 2 MiB), forming a full stripe before computing and appending parity blocks (P and Q for single- and dual-parity configurations); excess replicas are then discarded, ensuring all data is journaled before parity to maintain consistency.[14] This process avoids fragmentation by preserving sequential I/O patterns and simplifies implementation relative to Linux's md RAID5/6, as it operates at the filesystem level with built-in checksumming for parity validation.[14] Erasure coding is enabled via the ec filesystem option and kernel configuration CONFIG_BCACHEFS_ERASURE_CODING, with redundancy level set by data_replicas; it corrects up to the specified number of device failures but remains experimental, lacking full optimizations like bucket reuse in data journaling and certain reconstruction paths as of late 2023 documentation updates.[15][22] In conjunction with checksumming, it enhances integrity by enabling reconstruction of lost blocks from surviving parity and data, though metadata relies solely on replication.[14]
Development History
Origins and Initial Development (2015–2020)
Bcachefs originated as an extension of the bcache block caching layer, developed by Kent Overstreet and merged into the Linux kernel with version 3.10 in July 2013. Overstreet, a former Google engineer, initiated bcachefs to apply bcache's b-tree-based data structures—optimized for SSDs through log-structured nodes and eytzinger search trees—to a full copy-on-write (COW) filesystem, addressing limitations in existing systems like Btrfs and ZFS by prioritizing performance comparable to ext4 or XFS while incorporating advanced reliability features.[18] The project was publicly announced by Overstreet on August 20, 2015, via the Linux Kernel Mailing List (LKML), where he described bcachefs as a "general purpose COW filesystem" with initial implementations of core mechanics including checksumming, compression, encryption, and multi-device support.[23] Early development emphasized a "filesystem-as-database" paradigm, using persistent ordered key-value stores for metadata and extents to enable efficient snapshotting, deduplication, and erasure coding without the fragmentation issues plaguing RAIDZ or similar schemes.[1] By May 2018, Overstreet provided an update at the Linux Storage, Filesystem, and Memory-Management Summit (LSFMM), noting that the codebase had expanded to approximately 50,000 lines—exceeding his initial 2012-era estimate of one year and 15,000 lines—and included a functional fsck repair tool alongside testing on NVMe, RAID, and caching setups.[18] Reflinks were under active implementation, while snapshots and erasure coding awaited on-disk format finalization to ensure forward compatibility; the focus remained on upstream integration, with plans to post patches post-LSFMM and phase out the original bcache in favor of bcachefs compatibility modes.[18] Throughout 2015–2020, development proceeded iteratively outside the mainline kernel, prioritizing empirical validation of scalability claims through real-world workloads rather than premature feature completeness.[1]Path to Kernel Integration (2021–2023)
In 2021 and 2022, Bcachefs development proceeded primarily out-of-tree, with Kent Overstreet emphasizing stability enhancements, such as improved error handling and multi-device support, while users tested it via DKMS modules amid ongoing feature maturation.[1] Integration efforts toward the mainline Linux kernel remained preparatory, involving incremental patch submissions for related components like dynamic arrays, but without full filesystem upstreaming attempts on LKML during this period.[24] By early 2023, Overstreet escalated submission activities, including git pull requests for bug fixes and features, as discussed at events like LSFMMBPF where reviewers urged prioritizing core patches to facilitate broader acceptance.[25] In July 2023, a pull request targeted refinements to bcachefs internals, reflecting iterative refinements to meet kernel standards.[26] A pivotal review occurred in August 2023 when Linus Torvalds examined the codebase, critiquing elements of the locking mechanisms for potential complexity and suggesting simplifications to align with kernel conventions. Overstreet addressed feedback through targeted fixes, though an initial bid for Linux 6.6 inclusion faltered due to timing constraints in the merge window.[27] On September 12, 2023, the Bcachefs repository was integrated into the linux-next tree, enabling extensive automated testing, build validation, and community scrutiny as a precursor to mainline consideration.[28] This step marked a key milestone, exposing the code to broader regression checks and subsystem interactions ahead of the subsequent pull request for Linux 6.7.[29]Mainline Inclusion and Early Kernel Versions (2023–2024)
Bcachefs was merged into the mainline Linux kernel for version 6.7, with the initial pull request accepted by Linus Torvalds on October 31, 2023, less than 24 hours after submission.[30] The Linux 6.7 release, incorporating this foundational support, occurred on January 7, 2024, marking the filesystem's formal debut in upstream kernels while retaining an experimental designation due to its relative maturity.[31] At inclusion, core functionality encompassed copy-on-write mechanics, checksumming for metadata and data integrity, and basic multi-device support, though advanced features like full erasure coding remained in development.[30] In the lead-up to and following the 6.7 stable release, additional fixes refined performance and reliability, with a secondary patch set merged in December 2023 to address initial integration issues.[32] For Linux 6.8, released March 10, 2024, further updates arrived just prior to the release candidate phase on January 22, 2024, emphasizing performance optimizations and bug resolutions, including contributions to rc4 for filesystem stability.[33] [34] These iterations focused on maturing the on-disk format and operational robustness without introducing breaking changes, though proposals for extent format revisions were evaluated for potential deferral to 6.9.[35] Linux 6.9, released May 26, 2024, incorporated extensive Bcachefs patches, notably in rc3 on April 7, 2024, targeting recovery and repair mechanisms to mitigate extreme filesystem damage scenarios.[36] Enhancements included subvolume renaming capabilities and preallocations for logging efficiency, alongside ongoing repair tooling advancements submitted post-merge window.[37] [38] By Linux 6.10, released July 14, 2024, safety-focused improvements dominated, with merge-window changes on May 19, 2024, bolstering trigger handling and preparatory work for future scalability, reflecting iterative stabilization efforts amid high patch volume.[39] [40] Throughout these versions, maintainer Kent Overstreet upstreamed fixes via targeted pull requests, prioritizing data integrity over rapid feature expansion.[38]Stability and Reliability
Reported Bugs and Data Loss Incidents
Bcachefs has faced reports of data corruption and loss, primarily in edge cases during its integration into mainline Linux kernels from version 6.7 onward. Developer Kent Overstreet acknowledged two significant data loss bugs since upstream inclusion in Linux 6.7 (January 2024), both debugged relatively quickly with accompanying repair code.[41] These incidents underscore ongoing stability challenges in an experimental filesystem, despite built-in checksumming and repair mechanisms designed to prevent silent corruption.[1] A notable data loss bug affected Linux kernel 6.15, occurring when users executedfsck.bcachefs -y without adhering to release notes recommending dry-run verification first. This automated repair mode triggered unverified operations on experimental filesystems, resulting in irrecoverable data loss for affected users.[42] Overstreet attributed debugging delays to users bypassing recommended precautions, but emphasized the filesystem's prior strong record absent such misuse; fixes, including enhanced repair logic and recovery tools, were merged for Linux 6.16 in June 2025.[42]
In May 2025, a GitHub issue documented data corruption on kernel versions 6.12.28 and 6.14, involving "Journal stuck? Waited for 10 seconds..." errors during parallel file operations on a setup with SSD caching over HDD storage. The reporter observed files differing from originals post-copy, with missing backpointers and incomplete data despite healthy hardware checks via tools like memtester and SMART. Overstreet recommended upgrading to kernels 6.15 or 6.16 for relevant fixes, but the issue remained unresolved as the user migrated to a stable alternative filesystem.[43]
User reports have included scenarios like power loss interrupting writes, leading to partial file loss where the filesystem claimed completion but data was incomplete. Such incidents, while infrequent, have fueled concerns over reliability for production use, prompting advice against deploying Bcachefs on critical data without backups.[7] Overstreet has stressed rapid response to bug reports and the value of user-provided diagnostics for iterative improvements, though the filesystem's alpha status has been cited as a factor in these vulnerabilities.[42]
Patch Frequency and Maintenance Challenges
Bcachefs development has been characterized by a high volume of patches submitted by lead maintainer Kent Overstreet, often in large series that reflect rapid iteration on features and fixes. For instance, during the Linux 6.16 release cycle in mid-2025, Overstreet submitted a 70-line patch for a new feature during the release candidate phase, which Linus Torvalds rejected as it violated the kernel's policy against substantive changes post-merge window.[44] This pattern of frequent, late-stage submissions has been recurrent, with Overstreet defending such pulls by citing user demands for urgent fixes, though Torvalds emphasized adherence to the established development cadence to maintain stability.[45] Maintenance challenges arise primarily from the filesystem's fast-paced evolution clashing with the Linux kernel's biannual release schedule, which prioritizes predictability over ongoing rewrites. Overstreet's approach, involving substantial code churn—evidenced by the majority of bcachefs commits originating from him—has led to difficulties in timely integration, as patches frequently arrive after merge windows close, forcing reliance on out-of-tree updates or deferred inclusion.[46] This has strained reviewer resources and contributed to broader tensions, culminating in Torvalds marking bcachefs as "externally maintained" on August 29, 2025, signaling reduced mainline support and shifting burden to external modules like DKMS for ongoing patches.[8] The single-developer dominance exacerbates these issues, as Overstreet handles most code reviews and mentoring, limiting scalability despite growing community contributions.[47] Critics, including kernel maintainers, argue that this model hinders reliable long-term maintenance, with rushed patches prioritizing functionality over rigorous testing alignment with kernel norms, as seen in rejected pulls for releases like 6.12-rc2 and beyond.[45] Consequently, users face compatibility risks across kernel versions, prompting recommendations for DKMS-based deployments to apply patches independently of mainline trees.[48]Controversies and Community Conflicts
Kent Overstreet's Development Style
Kent Overstreet, the primary developer and maintainer of bcachefs, has pursued a highly individualistic approach, handling the bulk of coding, testing, and upstreaming efforts with limited collaboration from a broader team. This solo-centric style has enabled rapid feature development and iteration, including the integration of advanced capabilities like copy-on-write snapshots and built-in caching, but it has also raised concerns about the project's bus factor—the risk of stalled progress if the lead maintainer is unavailable—and dependency on large, monolithic patch sets that complicate review and integration.[8][48] Overstreet's interactions on the Linux Kernel Mailing List (LKML) have often been marked by confrontational and abrasive rhetoric, particularly in response to technical critiques or suggestions for code refactoring. For instance, during discussions on memory management patches related to bcachefs, he has publicly accused other developers of incompetence and referenced past errors like "silent data corruption bugs" in heated exchanges, refusing subsequent calls for public apologies.[49] This style, which Overstreet defends as passionate advocacy for technical correctness amid flawed kernel processes, has alienated maintainers in subsystems like memory management (mm), contributing to delays in bcachefs fixes and broader resistance to his pull requests.[50] The cumulative effect of this development demeanor led to enforcement under the Linux kernel's Code of Conduct in November 2024, when the Technical Advisory Board restricted Overstreet's participation for the 6.13 development cycle, declining his pull requests following an abusive message toward another developer. While Overstreet attributes such incidents to frustration with opaque processes and maintainer intransigence—arguing that kernel culture favors established interests over innovative fixes—community observers, including Linus Torvalds, have cited his behavior, rather than code quality, as a barrier to sustained mainline inclusion.[49][50][51]Interactions with Linus Torvalds
Kent Overstreet, the primary developer of Bcachefs, has had a contentious relationship with Linux kernel maintainer Linus Torvalds, primarily centered on adherence to kernel development protocols following the filesystem's inclusion in Linux 6.7 on December 10, 2023. Torvalds initially reviewed and approved the merge after extensive code scrutiny, but post-merger interactions escalated due to Overstreet's repeated submissions of patches during release candidate (RC) phases, which Torvalds designated exclusively for critical bug fixes rather than new features or non-essential changes.[52][53] In August 2024, during the Linux 6.11 RC cycle, Torvalds publicly expressed regret for merging Bcachefs after Overstreet submitted a pull request exceeding 1,000 lines of code, which included modifications beyond bug fixes, such as optimizations and refactoring. Torvalds stated in an email on the Linux Kernel Mailing List (LKML), "I regret ever allowing bcachefs to be merged," citing Overstreet's disregard for merge window guidelines as evidence of treating the mainline kernel as a personal development branch rather than a stable upstream. Overstreet defended the submissions as necessary fixes, arguing that Bcachefs's rapid evolution required flexibility, but Torvalds countered that such practices undermined kernel stability and his authority over the release process.[53] Tensions intensified in 2025, particularly during the Linux 6.16 RC phase. On June 19, 2025, Torvalds rejected Overstreet's pull request for RC3, which included the "journal_rewind" feature—a disaster recovery tool enabling filesystem rollback—deeming it a new functionality disguised as a fix amid unrelated bug discoveries. Torvalds wrote on LKML, "We don't start adding new features just because you found other bugs. I remain steadfastly convinced that anybody who uses bcachefs is expecting data corruption," highlighting his view that Overstreet's approach prioritized innovation over reliability, potentially risking user data. This exchange exemplified broader frustrations, with Torvalds accusing Overstreet of serial violations of RC rules, including a prior April 2025 dispute over case-insensitivity implementation where Torvalds issued a stern rebuke to enforce consistency across filesystems.[54][55][56] By October 5, 2024, during the 6.12 RC2 cycle, Torvalds escalated threats of removal, stating on LKML, "I'm contemplating just removing bcachefs entirely from the mainline tree. Because you show again and again that you have no interest in trying to make mainline work for you, you only want mainline to work for you." These interactions culminated in Torvalds marking Bcachefs as "externally maintained" on August 29, 2025, for Linux 6.17, refusing further mainline integrations, and fully excising the code on September 30, 2025, for 6.18, citing irreconcilable differences in development discipline. Overstreet maintained that Bcachefs's complexity necessitated such updates, but Torvalds prioritized kernel-wide stability, viewing the filesystem's maintenance as incompatible with mainline standards.[57][8][58]Code of Conduct Enforcement and Restrictions
In September 2024, Kent Overstreet, the primary developer of Bcachefs, engaged in a heated email exchange on the Linux kernel mailing list (LKML), resulting in an abusive message directed at another kernel developer, which was deemed a violation of the project's Code of Conduct (CoC).[49][59] The CoC, established to promote professional conduct in kernel discussions, prohibits personal attacks and harassment, with enforcement handled by the Code of Conduct Committee and the Linux Foundation Technical Advisory Board (TAB). Following the incident, committee member Shuah Khan intervened, seeking a public apology from Overstreet to resolve the matter, but initial efforts failed as Overstreet did not comply promptly.[60] On November 22, 2024, the TAB announced its enforcement decision, restricting Overstreet's participation in the kernel development process specifically during the Linux 6.13 cycle.[49][59] The restrictions included declining all pull requests submitted by Overstreet, effectively barring his direct contributions to the mainline kernel for that development window, which spanned from late 2024 into early 2025.[61] This measure was justified by the committee as necessary to restore community trust after "insufficient action" from Overstreet, though it did not extend to permanent exclusion or affect non-mainline work.[59] Linus Torvalds, the kernel's principal maintainer, supported the enforcement by suspending Overstreet's involvement in related merges.[62] The restrictions directly impacted Bcachefs, as Overstreet's pull requests for filesystem updates and fixes were rejected, delaying integration of improvements into Linux 6.13 and heightening scrutiny on the project's stability and maintenance.[59] Overstreet subsequently issued a limited apology on LKML, acknowledging the disruption while defending his technical focus amid emotional tensions in open-source development.[63] In a detailed Patreon post, Overstreet attributed the conflict to broader cultural and procedural flaws in the kernel community, including inconsistent application of conduct rules favoring established figures like Torvalds, and criticized the CoC process as exacerbating rather than resolving disputes rooted in high-stakes technical debates.[50] Community reactions were divided, with some kernel participants praising the enforcement for upholding civility on official channels, while others questioned its proportionality given Overstreet's longstanding contributions to kernel subsystems like bcache.[49] These events underscored ongoing tensions between rigorous CoC adherence—often viewed by critics as prioritizing tone over substance—and the collaborative demands of filesystem development.[60]Removal from Mainline and Current Status
Transition to External Maintenance (2025)
In August 2025, Linus Torvalds modified the Linux kernel's MAINTAINERS file to classify bcachefs as "Externally maintained," a status signaling that the primary developer, Kent Overstreet, would no longer submit changes for inclusion in the mainline kernel, though existing code would remain unless explicitly removed.[8] This shift occurred amid persistent maintenance difficulties, including unmerged fixes and escalating tensions over code quality and upstreaming processes.[8] The designation took effect with Linux kernel version 6.17, released in late July 2025, effectively halting any new bcachefs development within the official kernel tree.[10] Distributions such as openSUSE responded by disabling bcachefs support in their 6.17 kernels, citing the external status as justification for avoiding unmaintained code.[64] By September 2025, with bcachefs pivoting to out-of-tree DKMS modules for continued viability, Torvalds excised the entire filesystem codebase from the kernel repository on September 29, ahead of the Linux 6.18 merge window.[10] He justified the removal by noting that the in-kernel implementation had become stale relative to external updates, risking user confusion and compatibility issues without ongoing mainline synchronization.[10] This action aligned with kernel policy for obsolete modules, ensuring cleaner trees while leaving bcachefs reliant on external packaging for users.[58]DKMS Adoption and Ongoing Development
Following its removal from the Linux kernel mainline in version 6.18, released in late September 2025, Bcachefs adopted Dynamic Kernel Module Support (DKMS) for out-of-tree distribution, allowing the filesystem to load as a kernel module independent of official kernel builds.[58] This shift, announced by lead developer Kent Overstreet on September 11, 2025, enables rapid iteration on features and fixes without reliance on the kernel's biannual merge cycles or upstream review processes, which had previously delayed updates.[65] Overstreet emphasized that DKMS deployment would prioritize user-facing stability, with bcachefs-tools version 1.3.2 providing initial support for kernels up to 6.16, and subsequent releases extending compatibility.[66] Distributions began packaging Bcachefs DKMS modules shortly after the transition; Arch Linux included it in theextra repository as version 3:1.31.1-2 by mid-September 2025, though some users reported mounting issues post-installation due to kernel updates.[67] Overstreet also released Debian and Ubuntu-compatible DKMS packages on September 20, 2025, facilitating installation on stock kernels without custom recompilation.[68] These packages support mixed workloads, with benchmarks indicating generally positive performance in recent iterations, though adoption remains limited by the need for manual module management and potential compatibility gaps with future kernel ABI changes.[48]
Ongoing development under the DKMS model focuses on enhancing reliability features, such as improved error handling and replication, while addressing prior data integrity concerns reported in mainline versions.[12] As of October 2025, the project maintains an active external repository, with Overstreet committing updates decoupled from kernel versioning to accelerate progress on copy-on-write optimizations and multi-device support.[48] However, the approach introduces maintenance overhead for users and distributors, as DKMS modules require rebuilding on kernel upgrades, potentially hindering broader enterprise uptake compared to in-tree filesystems like ext4 or BTRFS.[66] Despite these challenges, the model aligns with Overstreet's vision for agile evolution, positioning Bcachefs for niche applications in high-performance storage environments.[69]
Reception and Impact
Performance Evaluations and Benchmarks
Independent benchmarks of Bcachefs, primarily from Phoronix Test Suite evaluations on recent Linux kernels, indicate that it frequently underperforms established filesystems such as EXT4, XFS, and F2FS across a range of workloads, including compilation, database operations, and file creation tasks, while occasionally surpassing Btrfs.[70][71] In tests on Linux 6.11 using default mount options on a PCIe 5.0 NVMe SSD, Bcachefs outperformed Btrfs in 9 of 11 evaluated benchmarks but trailed EXT4, F2FS, and XFS in all 11, highlighting its relative immaturity as a copy-on-write filesystem compared to non-CoW alternatives optimized for raw throughput.[70][72] Subsequent evaluations on Linux 6.15, conducted across 16 tests encompassing AI inference, software compilation, and database simulations on a 2TB PCIe 5.0 NVMe drive, positioned Bcachefs as the slowest or second-slowest performer in every case, with XFS leading overall, followed by F2FS, and EXT4/Btrfs tying for third.[71][66][73] These results underscore persistent overhead from Bcachefs's advanced features like built-in caching and replication, which impose costs in out-of-the-box scenarios without custom tuning. On Linux 6.17, similar patterns emerged in filesystem comparisons including OpenZFS, though specific quantitative edges for Bcachefs were not dominant.[74] Following its transition to external DKMS maintenance in 2025, updated Bcachefs modules demonstrated notable gains in select areas, such as multi-threaded SQLite write performance, where significant speedups were observed over the frozen in-kernel version, potentially closing gaps in database-heavy workloads.[75] User-reported tests on older kernels, like sequential per-character writes on Fedora, showed Bcachefs substantially outperforming Btrfs and narrowly exceeding it in random file creation reads, suggesting advantages in certain I/O patterns amenable to its write-ahead logging design.[76] However, developer assertions of superior speed and reliability over ZFS remain unverified by broad independent replication, with empirical data favoring tuned configurations for realizing potential benefits.[13] Overall, while Bcachefs exhibits CoW filesystem traits with lower metadata overhead than Btrfs in targeted scenarios, its benchmarks reveal a need for further optimization to compete with production staples on general-purpose hardware.[77]Comparisons with BTRFS and ZFS
Bcachefs, BTRFS, and ZFS are copy-on-write (CoW) filesystems designed for data integrity through checksumming, with support for snapshots, compression, and multi-device configurations.[13] Bcachefs differentiates itself by integrating caching and block-layer features natively, aiming for a unified approach to storage management that avoids the layered complexities seen in ZFS's ARC (Adaptive Replacement Cache) or BTRFS's separate bcache origins.[13] Unlike ZFS, which operates out-of-tree due to its CDDL license conflicting with the Linux GPL kernel, Bcachefs is implemented directly in the kernel, enabling seamless integration without module loading overhead.[78] BTRFS, while also kernel-native, has faced criticism for incomplete features like delayed native encryption implementation, which Bcachefs provides from inception.[79] In terms of multi-device support, BTRFS deprecated RAID5/6 modes in 2020 due to persistent data corruption risks during degraded operations, recommending alternatives like RAID1 or external RAID controllers.[80] ZFS offers mature RAID-Z equivalents with self-healing via scrub operations but requires pool recreation for vdev additions, limiting flexibility compared to Bcachefs's dynamic member addition and removal without full rebuilds.[81] Bcachefs employs erasure coding for redundancy, claiming robustness against the "write hole" vulnerability—a metadata inconsistency issue plaguing BTRFS in power-loss scenarios—through its journaling and replication design.[13] ZFS mitigates similar risks via ZIL (ZFS Intent Log) and SLOG devices but incurs higher CPU and RAM overhead for transaction guarantees.[74] Performance benchmarks reveal mixed results. In Phoronix tests on Linux 6.17 with NVMe SSDs, EXT4 and XFS outperformed CoW filesystems overall, but among CoW options, Bcachefs trailed BTRFS in aggregate throughput for workloads like SQLite and compilation, while OpenZFS showed higher latency due to its caching model.[74] Earlier Linux 6.11 benchmarks indicated Bcachefs edging BTRFS in sequential writes but lagging in random I/O, attributed to Bcachefs's immature optimizations despite its newer codebase.[70] Versus ZFS, Bcachefs FAQ asserts superior speed in replication and scrubbing, though independent tests highlight ZFS's edge in deduplication-heavy scenarios (unsupported in Bcachefs as of 2025).[13] Reliability claims favor ZFS's decade-long production use in enterprise environments, with fewer reported corruptions than BTRFS's historical issues in RAID rebuilds.[82] Bcachefs positions itself as more robust than BTRFS by design, avoiding feature creep and emphasizing verifiable consistency in multi-device ops, but its smaller user base limits empirical validation compared to ZFS's scrub-verified integrity.[13] BTRFS has stabilized post-2014 but retains warnings against unmirrored RAID use.[83]| Aspect | Bcachefs | BTRFS | ZFS |
|---|---|---|---|
| Kernel Integration | Native GPL | Native GPL | Out-of-tree CDDL |
| Encryption | Native support | Delayed/delayed native | Native via zfs-crypto |
| RAID Reliability | Erasure coding, dynamic vdevs | RAID5/6 deprecated | RAID-Z, static pools |
| RAM Usage | Lower, no ARC equivalent | Moderate | High due to ARC |
| Deduplication | Not supported | Inline/block | Inline/block |