| .. SPDX-License-Identifier: GPL-2.0 | |
| .. _adding_new_filesystems: | |
| Adding New Filesystems | |
| ====================== | |
| This document describes what is involved in adding a new filesystem to the | |
| Linux kernel. | |
| Every filesystem merged into the kernel becomes the collective responsibility | |
| of the VFS maintainers and the wider filesystem development community. | |
| Experience has shown that filesystems which become unmaintained impose a | |
| significant and ongoing burden: they are hard or impossible to test, they | |
| block infrastructure changes because someone must update or preserve old APIs | |
| for code that nobody is actively looking after, and they accumulate unfixed | |
| bugs. The requirements and expectations described here are informed by this | |
| experience and are intended to ensure that new filesystems enter the kernel | |
| on a sustainable footing. | |
| Do You Need a New In-Kernel Filesystem? | |
| --------------------------------------- | |
| Before proposing a new in-kernel filesystem, consider whether one of the | |
| alternatives might be more appropriate. | |
| - If an existing in-kernel filesystem covers the same use case, improving it | |
| is generally preferred over adding a new implementation. The kernel | |
| community favors incremental improvement over parallel implementations. | |
| - If the filesystem serves a niche audience or has a small user base, a FUSE | |
| (Filesystem in Userspace) implementation may be a better fit. FUSE | |
| filesystems avoid the long-term kernel maintenance commitment and can be | |
| developed and released on their own schedule. | |
| - If kernel-level performance, reliability, or integration is genuinely | |
| required, make the case explicitly. Explain who the users are, what the | |
| use case is, and why a FUSE implementation would not be sufficient. | |
| Technical Requirements | |
| ---------------------- | |
| New filesystems must use current kernel interfaces and practices. | |
| Submitting a filesystem built on outdated APIs creates an unacceptable | |
| maintenance debt and is likely to face pushback during review. | |
| Use modern VFS interfaces | |
| Do not use interfaces listed in | |
| :ref:`Documentation/process/deprecated.rst <deprecated>`. | |
| Use folios rather than raw page operations for page cache management and | |
| iomap rather than buffer heads for block mapping and I/O. See | |
| ``Documentation/filesystems/iomap/index.rst`` for iomap documentation. | |
| Block-based filesystems that need functionality not currently provided by | |
| iomap should be prepared to explain why adding that functionality to iomap | |
| is infeasible, rather than reimplementing their own block mapping layer. | |
| Network filesystems should consider using the netfs library | |
| (``Documentation/filesystems/netfs_library.rst``), or be prepared to explain | |
| why it is not a good fit. | |
| Provide userspace utilities | |
| A ``mkfs`` tool is expected so that the filesystem can be created and used | |
| by testers and users. A ``fsck`` tool is strongly recommended; while not | |
| strictly required for every filesystem type, the ability to verify | |
| consistency and repair corruption is an important part of a mature | |
| filesystem. | |
| Be testable | |
| The filesystem must be testable in a meaningful way. The | |
| `fstests <https://git.kernel.org/pub/scm/fs/xfs/xfstests-dev.git>`_ | |
| framework (also known as xfstests) is the standard testing infrastructure | |
| for Linux filesystems and its use is highly recommended. At a minimum, | |
| there must be a credible and documented way to test the filesystem and | |
| detect regressions. When submitting, include a summary of test results | |
| indicating which tests pass, fail, or are not applicable. | |
| Provide documentation | |
| A documentation file under ``Documentation/filesystems/`` describing the | |
| filesystem, its on-disk format, mount options, and any notable design | |
| decisions is recommended. | |
| Community and Maintainership Expectations | |
| ----------------------------------------- | |
| Merging a filesystem is a long-term commitment. The kernel community | |
| needs confidence that the filesystem will be actively maintained after it | |
| is merged. | |
| Identified maintainers | |
| The submission must include a ``MAINTAINERS`` entry with at least one | |
| maintainer (``M:``), a mailing list (``L:``), and a git tree (``T:``). | |
| Having two or more maintainers is strongly preferred so that coverage | |
| does not depend on a single person. The maintainers are expected to be | |
| the primary points of contact for the filesystem going forward. | |
| Demonstrated commitment | |
| A track record of maintaining kernel code -- for example, in other | |
| subsystems -- significantly strengthens the case for a new filesystem. | |
| Maintainers who are already known and trusted within the community face | |
| less friction during review. | |
| Sustained backing | |
| Major filesystems in Linux have organizational or corporate support behind | |
| their development. Filesystems that depend entirely on volunteer effort | |
| face higher scrutiny about their long-term viability. | |
| Responsiveness | |
| The maintainer is expected to respond to bug reports, address review | |
| feedback, and adapt the filesystem to VFS infrastructure changes such as | |
| folio conversions, iomap migration, and mount API updates. Unresponsive | |
| maintainership is one of the primary reasons filesystems end up on the | |
| path to deprecation. | |
| User base | |
| Clearly describe who the users of this filesystem are and the scale of the | |
| user base. Filesystems with a very small or unclear user base face a | |
| harder path to acceptance and a higher risk of future deprecation. | |
| Building your track record | |
| A practical way to demonstrate many of the qualities above is to maintain | |
| the filesystem out-of-tree for a period before requesting a merge. This | |
| shows sustained commitment, builds a visible user base, and gives reviewers | |
| confidence that the code and its maintainer will persist after merging. | |
| That said, it is recognized that for some filesystems the user base grows | |
| significantly only after upstreaming, so a compelling case for expected | |
| adoption can substitute for a large existing user base. | |
| Submission Process | |
| ------------------ | |
| This section covers what is specific to filesystem submissions, over and | |
| above the normal submission advice in | |
| :ref:`Documentation/process/submitting-patches.rst <submittingpatches>` and | |
| :ref:`Documentation/process/submit-checklist.rst <submitchecklist>`. | |
| - Send patches to the linux-fsdevel mailing list | |
| (``linux-fsdevel@vger.kernel.org``). CC the relevant VFS maintainers as | |
| listed in the ``MAINTAINERS`` file under | |
| ``FILESYSTEMS (VFS and infrastructure)``. | |
| - Structure the submission logically. It is neither acceptable to send one | |
| large patch containing the entire filesystem, nor is a replay of the full | |
| development history helpful to reviewers. Instead, split the series by | |
| topic -- for example: superblock and mount handling, inode operations, | |
| directory operations, address space operations, and so on -- so that each | |
| patch is reviewable in isolation. | |
| - Separate any filesystem-specific ioctls into their own patches with | |
| dedicated justification. Interfaces beyond those already common across | |
| other filesystems will receive additional scrutiny because they are hard | |
| to maintain and may conflict with future generic interfaces. | |
| - Expect thorough review. Filesystem code interacts deeply with the VFS, | |
| memory management, and block layers, so reviewers will examine the code | |
| carefully. Address all review feedback and be prepared for multiple | |
| revision cycles. | |
| - It may be appropriate to mark the filesystem as experimental in its Kconfig | |
| help text for the first few releases to set expectations while the code | |
| stabilizes in-tree. | |
| Ongoing Obligations | |
| ------------------- | |
| Merging is not the finish line. Maintaining a filesystem in the kernel is an | |
| ongoing commitment. | |
| - Adapt to VFS infrastructure changes. The VFS layer evolves continuously; | |
| maintainers are expected to keep up with conversions such as folio | |
| migration, iomap adoption, and mount API updates. | |
| - Maintain test coverage. As test suites evolve, the filesystem's test | |
| results should be kept current. | |
| - Handle security issues and regression promptly. Both those reported | |
| by ordinary users and those reported by test bots and fuzzing tools. | |
| The filesystem must handle corrupted input gracefully without corrupting | |
| memory, hanging, or crashing the kernel. | |
| - Engage with the wider filesystem community. Participate on linux-fsdevel, | |
| share approaches to common problems, and look for opportunities to reuse | |
| shared infrastructure. It is inappropriate to develop in isolation on a | |
| private list and surface patches only at merge time. | |
| - Filesystems that become unmaintained -- where the maintainer stops | |
| responding, infrastructure changes go unadapted, and testing becomes | |
| impossible -- are candidates for deprecation and eventual removal from | |
| the kernel. |