Documentation/filesystems/index.rst | 1 + Documentation/filesystems/ntfsplus.rst | 199 + fs/Kconfig | 1 + fs/Makefile | 1 + fs/ntfsplus/Kconfig | 45 + fs/ntfsplus/Makefile | 18 + fs/ntfsplus/aops.c | 617 +++ fs/ntfsplus/aops.h | 92 + fs/ntfsplus/attrib.c | 5377 ++++++++++++++++++++++++ fs/ntfsplus/attrib.h | 159 + fs/ntfsplus/attrlist.c | 285 ++ fs/ntfsplus/attrlist.h | 21 + fs/ntfsplus/bitmap.c | 290 ++ fs/ntfsplus/bitmap.h | 93 + fs/ntfsplus/collate.c | 178 + fs/ntfsplus/collate.h | 37 + fs/ntfsplus/compress.c | 1564 +++++++ fs/ntfsplus/dir.c | 1230 ++++++ fs/ntfsplus/dir.h | 33 + fs/ntfsplus/ea.c | 931 ++++ fs/ntfsplus/ea.h | 25 + fs/ntfsplus/file.c | 1142 +++++ fs/ntfsplus/index.c | 2112 ++++++++++ fs/ntfsplus/index.h | 127 + fs/ntfsplus/inode.c | 3729 ++++++++++++++++ fs/ntfsplus/inode.h | 353 ++ fs/ntfsplus/layout.h | 2288 ++++++++++ fs/ntfsplus/lcnalloc.c | 1012 +++++ fs/ntfsplus/lcnalloc.h | 127 + fs/ntfsplus/logfile.c | 770 ++++ fs/ntfsplus/logfile.h | 316 ++ fs/ntfsplus/mft.c | 2698 ++++++++++++ fs/ntfsplus/mft.h | 92 + fs/ntfsplus/misc.c | 213 + fs/ntfsplus/misc.h | 218 + fs/ntfsplus/mst.c | 195 + fs/ntfsplus/namei.c | 1677 ++++++++ fs/ntfsplus/ntfs.h | 180 + fs/ntfsplus/ntfs_iomap.c | 700 +++ fs/ntfsplus/ntfs_iomap.h | 22 + fs/ntfsplus/reparse.c | 550 +++ fs/ntfsplus/reparse.h | 15 + fs/ntfsplus/runlist.c | 1983 +++++++++ fs/ntfsplus/runlist.h | 91 + fs/ntfsplus/super.c | 2865 +++++++++++++ fs/ntfsplus/unistr.c | 473 +++ fs/ntfsplus/upcase.c | 73 + fs/ntfsplus/volume.h | 254 ++ include/uapi/linux/ntfs.h | 23 + 49 files changed, 35495 insertions(+) create mode 100644 Documentation/filesystems/ntfsplus.rst create mode 100644 fs/ntfsplus/Kconfig create mode 100644 fs/ntfsplus/Makefile create mode 100644 fs/ntfsplus/aops.c create mode 100644 fs/ntfsplus/aops.h create mode 100644 fs/ntfsplus/attrib.c create mode 100644 fs/ntfsplus/attrib.h create mode 100644 fs/ntfsplus/attrlist.c create mode 100644 fs/ntfsplus/attrlist.h create mode 100644 fs/ntfsplus/bitmap.c create mode 100644 fs/ntfsplus/bitmap.h create mode 100644 fs/ntfsplus/collate.c create mode 100644 fs/ntfsplus/collate.h create mode 100644 fs/ntfsplus/compress.c create mode 100644 fs/ntfsplus/dir.c create mode 100644 fs/ntfsplus/dir.h create mode 100644 fs/ntfsplus/ea.c create mode 100644 fs/ntfsplus/ea.h create mode 100644 fs/ntfsplus/file.c create mode 100644 fs/ntfsplus/index.c create mode 100644 fs/ntfsplus/index.h create mode 100644 fs/ntfsplus/inode.c create mode 100644 fs/ntfsplus/inode.h create mode 100644 fs/ntfsplus/layout.h create mode 100644 fs/ntfsplus/lcnalloc.c create mode 100644 fs/ntfsplus/lcnalloc.h create mode 100644 fs/ntfsplus/logfile.c create mode 100644 fs/ntfsplus/logfile.h create mode 100644 fs/ntfsplus/mft.c create mode 100644 fs/ntfsplus/mft.h create mode 100644 fs/ntfsplus/misc.c create mode 100644 fs/ntfsplus/misc.h create mode 100644 fs/ntfsplus/mst.c create mode 100644 fs/ntfsplus/namei.c create mode 100644 fs/ntfsplus/ntfs.h create mode 100644 fs/ntfsplus/ntfs_iomap.c create mode 100644 fs/ntfsplus/ntfs_iomap.h create mode 100644 fs/ntfsplus/reparse.c create mode 100644 fs/ntfsplus/reparse.h create mode 100644 fs/ntfsplus/runlist.c create mode 100644 fs/ntfsplus/runlist.h create mode 100644 fs/ntfsplus/super.c create mode 100644 fs/ntfsplus/unistr.c create mode 100644 fs/ntfsplus/upcase.c create mode 100644 fs/ntfsplus/volume.h create mode 100644 include/uapi/linux/ntfs.h
Introduction
============
The NTFS filesystem[1] still remains the default filesystem for Windows
and The well-maintained NTFS driver in the Linux kernel enhances
interoperability with Windows devices, making it easier for Linux users
to work with NTFS-formatted drives. Currently, ntfs support in Linux was
the long-neglected NTFS Classic (read-only), which has been removed from
the Linux kernel, leaving the poorly maintained ntfs3. ntfs3 still has
many problems and is poorly maintained, so users and distributions are
still using the old legacy ntfs-3g.
What is ntfsplus?
=================
The remade ntfs called ntfsplus is an implementation that supports write
and the essential requirements(iomap, no buffer-head, utilities, xfstests
test result) based on read-only classic NTFS.
The old read-only ntfs code is much cleaner, with extensive comments,
offers readability that makes understanding NTFS easier. This is why
ntfsplus was developed on old read-only NTFS base.
The target is to provide current trends(iomap, no buffer head, folio),
enhanced performance, stable maintenance, utility support including fsck.
Key Features
============
- Write support:
Implement write support on classic read-only NTFS. Additionally,
integrate delayed allocation to enhance write performance through
multi-cluster allocation and minimized fragmentation of cluster bitmap.
- Switch to using iomap:
Use iomap for buffered IO writes, reads, direct IO, file extent mapping,
readpages, writepages operations.
- Stop using the buffer head:
The use of buffer head in old ntfs and switched to use folio instead.
As a result, CONFIG_BUFFER_HEAD option enable is removed in Kconfig also.
- Public utilities include fsck[2]:
While ntfs-3g includes ntfsprogs as a component, it notably lacks
the fsck implementation. So we have launched a new ntfs utilitiies
project called ntfsprogs-plus by forking from ntfs-3g after removing
unnecessary ntfs fuse implementation. fsck.ntfs can be used for ntfs
testing with xfstests as well as for recovering corrupted NTFS device.
- Performance Enhancements:
- ntfsplus vs. ntfs3:
* Performance was benchmarked using iozone with various chunk size.
- In single-thread(1T) write tests, ntfsplus show approximately
3~5% better performance.
- In multi-thread(4T) write tests, ntfsplus show approximately
35~110% better performance.
- Read throughput is identical for both ntfs implementations.
1GB file size:4096 size:16384 size:65536
MB/sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
─────────────────────────────────────────────────────────────────
read 399 | 399 426 | 424 429 | 430
─────────────────────────────────────────────────────────────────
write(1T) 291 | 276 325 | 305 333 | 317
write(4T) 105 | 50 113 | 78 114 | 99.6
* File list browsing performance. (about 12~14% faster)
files:100000 files:200000 files:400000
Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
─────────────────────────────────────────────────────────────────
ls -lR 7.07 | 8.10 14.03 | 16.35 28.27 | 32.86
* mount time.
parti_size:1TB parti_size:2TB parti_size:4TB
Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
─────────────────────────────────────────────────────────────────
mount 0.38 | 2.03 0.39 | 2.25 0.70 | 4.51
The following are the reasons why ntfsplus performance is higher
compared to ntfs3:
- Use iomap aops.
- Delayed allocation support.
- Optimize zero out for newly allocated clusters.
- Optimize runlist merge overhead with small chunck size.
- pre-load mft(inode) blocks and index(dentry) blocks to improve
readdir + stat performance.
- Load lcn bitmap on background.
- Stability improvement:
a. Pass more xfstests tests:
ntfsplus passed 287 tests, significantly higher than ntfs3's 218.
ntfsplus implement fallocate, idmapped mount and permission, etc,
resulting in a significantly high number of xfstests passing compared
to ntfs3.
b. Bonnie++ issue[3]:
The Bonnie++ benchmark fails on ntfs3 with a "Directory not empty"
error during file deletion. ntfs3 currently iterates directory
entries by reading index blocks one by one. When entries are deleted
concurrently, index block merging or entry relocation can cause
readdir() to skip some entries, leaving files undeleted in
workloads(bonnie++) that mix unlink and directory scans.
ntfsplus implement leaf chain traversal in readdir to avoid entry skip
on deletion.
- Journaling support:
ntfs3 does not provide full journaling support. It only implement journal
replay[4], which in our testing did not function correctly. My next task
after upstreaming will be to add full journal support to ntfsplus.
The feature comparison summary
==============================
Feature ntfsplus ntfs3
=================================== ======== ===========
Write support Yes Yes
iomap support Yes No
No buffer head Yes No
Public utilities(mkfs, fsck, etc.) Yes No
xfstests passed 287 218
Idmapped mount Yes No
Delayed allocation Yes No
Bonnie++ Pass Fail
Journaling Planned Inoperative
=================================== ======== ===========
References
==========
[1] https://en.wikipedia.org/wiki/NTFS
[2] https://github.com/ntfsprogs-plus/ntfsprogs-plus
[3] https://lore.kernel.org/ntfs3/CAOZgwEd7NDkGEpdF6UQTcbYuupDavaHBoj4WwTy3Qe4Bqm6V0g@mail.gmail.com/
[4] https://marc.info/?l=linux-fsdevel&m=161738417018673&q=mbox
Available in the Git repository at:
===================================
git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs.git ntfs-next
v2:
- Add ntfs3-compatible mount options(sys_immutable, nohidden,
hide_dot_files, nocase, acl, windows_names, disable_sparse, discard).
- Add iocharset mount option.
- Add ntfs3-compatible dos attribute and ntfs attribute load/store
in setxattr/getattr().
- Add support for FS_IOC_{GET,SET}FSLABEL ioctl.
- Add support for FITRIM ioctl.
- Fix the warnings(duplicate symbol, __divdi3, etc) from kernel test robot.
- Prefix pr_xxx() with ntfsplus.
- Add support for $MFT File extension.
- Add Documentation/filesystems/ntfsplus.rst.
- Mark experimental.
- Remove BUG traps warnings from checkpatch.pl.
Namjae Jeon (11):
ntfsplus: in-memory, on-disk structures and headers
ntfsplus: add super block operations
ntfsplus: add inode operations
ntfsplus: add directory operations
ntfsplus: add file operations
ntfsplus: add iomap and address space operations
ntfsplus: add attrib operatrions
ntfsplus: add runlist handling and cluster allocator
ntfsplus: add reparse and ea operations
ntfsplus: add misc operations
ntfsplus: add Kconfig and Makefile
Documentation/filesystems/index.rst | 1 +
Documentation/filesystems/ntfsplus.rst | 199 +
fs/Kconfig | 1 +
fs/Makefile | 1 +
fs/ntfsplus/Kconfig | 45 +
fs/ntfsplus/Makefile | 18 +
fs/ntfsplus/aops.c | 617 +++
fs/ntfsplus/aops.h | 92 +
fs/ntfsplus/attrib.c | 5377 ++++++++++++++++++++++++
fs/ntfsplus/attrib.h | 159 +
fs/ntfsplus/attrlist.c | 285 ++
fs/ntfsplus/attrlist.h | 21 +
fs/ntfsplus/bitmap.c | 290 ++
fs/ntfsplus/bitmap.h | 93 +
fs/ntfsplus/collate.c | 178 +
fs/ntfsplus/collate.h | 37 +
fs/ntfsplus/compress.c | 1564 +++++++
fs/ntfsplus/dir.c | 1230 ++++++
fs/ntfsplus/dir.h | 33 +
fs/ntfsplus/ea.c | 931 ++++
fs/ntfsplus/ea.h | 25 +
fs/ntfsplus/file.c | 1142 +++++
fs/ntfsplus/index.c | 2112 ++++++++++
fs/ntfsplus/index.h | 127 +
fs/ntfsplus/inode.c | 3729 ++++++++++++++++
fs/ntfsplus/inode.h | 353 ++
fs/ntfsplus/layout.h | 2288 ++++++++++
fs/ntfsplus/lcnalloc.c | 1012 +++++
fs/ntfsplus/lcnalloc.h | 127 +
fs/ntfsplus/logfile.c | 770 ++++
fs/ntfsplus/logfile.h | 316 ++
fs/ntfsplus/mft.c | 2698 ++++++++++++
fs/ntfsplus/mft.h | 92 +
fs/ntfsplus/misc.c | 213 +
fs/ntfsplus/misc.h | 218 +
fs/ntfsplus/mst.c | 195 +
fs/ntfsplus/namei.c | 1677 ++++++++
fs/ntfsplus/ntfs.h | 180 +
fs/ntfsplus/ntfs_iomap.c | 700 +++
fs/ntfsplus/ntfs_iomap.h | 22 +
fs/ntfsplus/reparse.c | 550 +++
fs/ntfsplus/reparse.h | 15 +
fs/ntfsplus/runlist.c | 1983 +++++++++
fs/ntfsplus/runlist.h | 91 +
fs/ntfsplus/super.c | 2865 +++++++++++++
fs/ntfsplus/unistr.c | 473 +++
fs/ntfsplus/upcase.c | 73 +
fs/ntfsplus/volume.h | 254 ++
include/uapi/linux/ntfs.h | 23 +
49 files changed, 35495 insertions(+)
create mode 100644 Documentation/filesystems/ntfsplus.rst
create mode 100644 fs/ntfsplus/Kconfig
create mode 100644 fs/ntfsplus/Makefile
create mode 100644 fs/ntfsplus/aops.c
create mode 100644 fs/ntfsplus/aops.h
create mode 100644 fs/ntfsplus/attrib.c
create mode 100644 fs/ntfsplus/attrib.h
create mode 100644 fs/ntfsplus/attrlist.c
create mode 100644 fs/ntfsplus/attrlist.h
create mode 100644 fs/ntfsplus/bitmap.c
create mode 100644 fs/ntfsplus/bitmap.h
create mode 100644 fs/ntfsplus/collate.c
create mode 100644 fs/ntfsplus/collate.h
create mode 100644 fs/ntfsplus/compress.c
create mode 100644 fs/ntfsplus/dir.c
create mode 100644 fs/ntfsplus/dir.h
create mode 100644 fs/ntfsplus/ea.c
create mode 100644 fs/ntfsplus/ea.h
create mode 100644 fs/ntfsplus/file.c
create mode 100644 fs/ntfsplus/index.c
create mode 100644 fs/ntfsplus/index.h
create mode 100644 fs/ntfsplus/inode.c
create mode 100644 fs/ntfsplus/inode.h
create mode 100644 fs/ntfsplus/layout.h
create mode 100644 fs/ntfsplus/lcnalloc.c
create mode 100644 fs/ntfsplus/lcnalloc.h
create mode 100644 fs/ntfsplus/logfile.c
create mode 100644 fs/ntfsplus/logfile.h
create mode 100644 fs/ntfsplus/mft.c
create mode 100644 fs/ntfsplus/mft.h
create mode 100644 fs/ntfsplus/misc.c
create mode 100644 fs/ntfsplus/misc.h
create mode 100644 fs/ntfsplus/mst.c
create mode 100644 fs/ntfsplus/namei.c
create mode 100644 fs/ntfsplus/ntfs.h
create mode 100644 fs/ntfsplus/ntfs_iomap.c
create mode 100644 fs/ntfsplus/ntfs_iomap.h
create mode 100644 fs/ntfsplus/reparse.c
create mode 100644 fs/ntfsplus/reparse.h
create mode 100644 fs/ntfsplus/runlist.c
create mode 100644 fs/ntfsplus/runlist.h
create mode 100644 fs/ntfsplus/super.c
create mode 100644 fs/ntfsplus/unistr.c
create mode 100644 fs/ntfsplus/upcase.c
create mode 100644 fs/ntfsplus/volume.h
create mode 100644 include/uapi/linux/ntfs.h
--
2.25.1
On Thu, 27 Nov 2025 13:59:33 +0900 Namjae Jeon <linkinjeon@kernel.org> wrote: Hello Namjae, Thank you for posting this patchset. We are very interested in the development of ntfsplus. In our production environment, we have been relying on the out-of-tree ntfs-3g driver for NTFS read-write support. However, it comes with several limitations regarding performance and integration. While we have been closely monitoring the in-kernel ntfs3 driver, we feel that features like full journaling support and a robust fsck utility are critical for our use cases, and we have been waiting for these to mature. Given your proven track record with the exfat driver upstreaming and maintenance, we are confident in the quality and future of this ntfsplus initiative. We are hopeful that it will address the long-standing gaps we've observed. We are eagerly following the progress of ntfsplus. Once it reaches a stable and feature-complete state—especially with reliable journaling and fsck—we would seriously consider deploying it to replace ntfs-3g in our production systems. > Introduction > ============ > > The NTFS filesystem[1] still remains the default filesystem for > Windows and The well-maintained NTFS driver in the Linux kernel > enhances interoperability with Windows devices, making it easier for > Linux users to work with NTFS-formatted drives. Currently, ntfs > support in Linux was the long-neglected NTFS Classic (read-only), > which has been removed from the Linux kernel, leaving the poorly > maintained ntfs3. ntfs3 still has many problems and is poorly > maintained, so users and distributions are still using the old legacy > ntfs-3g. > -- Thanks, Winston
On Fri, Nov 28, 2025 at 10:47 AM Winston Wen <wentao@uniontech.com> wrote: > > On Thu, 27 Nov 2025 13:59:33 +0900 > Namjae Jeon <linkinjeon@kernel.org> wrote: > > Hello Namjae, Hello Winston, > > Thank you for posting this patchset. We are very interested in the > development of ntfsplus. > > In our production environment, we have been relying on the out-of-tree > ntfs-3g driver for NTFS read-write support. However, it comes with > several limitations regarding performance and integration. While we > have been closely monitoring the in-kernel ntfs3 driver, we feel that > features like full journaling support and a robust fsck utility are > critical for our use cases, and we have been waiting for these to > mature. > > Given your proven track record with the exfat driver upstreaming and > maintenance, we are confident in the quality and future of this > ntfsplus initiative. We are hopeful that it will address the > long-standing gaps we've observed. > > We are eagerly following the progress of ntfsplus. Once it reaches a > stable and feature-complete state—especially with reliable journaling > and fsck—we would seriously consider deploying it to replace ntfs-3g in > our production systems. fsck.ntfs is supported through ntfsprogs-plus, and we plan to continue updating it. I believe that fsck.ntfs will partially cover the issues caused by the lack of journaling. I don't know your usecase but I don't have any major difficulties supporting NTFS on our products using ntfsplus yet, even without journaling. And I plan to begin implementing journaling support for ntfsplus early next year, and welcome any feedback or collaboration from you. I'll make sure to CC you when sending the journaling patches to the list.
On 2025/11/28 09:46, Winston Wen wrote: > On Thu, 27 Nov 2025 13:59:33 +0900 > Namjae Jeon <linkinjeon@kernel.org> wrote: ... > > Given your proven track record with the exfat driver upstreaming and > maintenance, we are confident in the quality and future of this > ntfsplus initiative. We are hopeful that it will address the > long-standing gaps we've observed. Just for the record here, I heard about this from Namjae almost a year ago about this. Personally, I support this NTFS work simply because Namjae has a good visible reputation in the community as well as he is a real kernel filesystem developer active for more than a decade. I can imagine it will be more likely to be a success (and healthy driven by the community development) compared to previous attempts. Currently I am lacking time for this, but I could help if needed. Thanks, Gao Xiang
On Thu, Nov 27, 2025 at 6:00 AM Namjae Jeon <linkinjeon@kernel.org> wrote:
>
> Introduction
> ============
>
> The NTFS filesystem[1] still remains the default filesystem for Windows
> and The well-maintained NTFS driver in the Linux kernel enhances
> interoperability with Windows devices, making it easier for Linux users
> to work with NTFS-formatted drives. Currently, ntfs support in Linux was
> the long-neglected NTFS Classic (read-only), which has been removed from
> the Linux kernel, leaving the poorly maintained ntfs3. ntfs3 still has
> many problems and is poorly maintained, so users and distributions are
> still using the old legacy ntfs-3g.
May I suggest that you add a patch to your series to add a deprecation
message to ntfs3?
See for example eb103a51640ee ("reiserfs: Deprecate reiserfs")
>
>
> What is ntfsplus?
> =================
>
> The remade ntfs called ntfsplus is an implementation that supports write
> and the essential requirements(iomap, no buffer-head, utilities, xfstests
> test result) based on read-only classic NTFS.
> The old read-only ntfs code is much cleaner, with extensive comments,
> offers readability that makes understanding NTFS easier. This is why
> ntfsplus was developed on old read-only NTFS base.
> The target is to provide current trends(iomap, no buffer head, folio),
> enhanced performance, stable maintenance, utility support including fsck.
>
You are bringing back the old ntfs driver code from the dead, preserving the
code and Copyrights and everything to bring it up to speed with modern vfs
API and to add super nice features. Right?
Apart from its history, the new refurbished ntfs driver is also fully backward
compact to the old read-only driver. Right?
Why is the rebranding to ntfsplus useful then?
I can understand that you want a new name for a new ntfsprogs-plus project
which is a fork of ntfs-3g, but I don't think that the new name for the kernel
driver is useful or welcome.
Do you have any objections to leaving its original ntfs name?
You can also do:
MODULE_ALIAS_FS("ntfs");
MODULE_ALIAS_FS("ntfsplus");
If that is useful for ntfsprogs-plus somehow.
Thanks,
Amir.
>
> Key Features
> ============
>
> - Write support:
> Implement write support on classic read-only NTFS. Additionally,
> integrate delayed allocation to enhance write performance through
> multi-cluster allocation and minimized fragmentation of cluster bitmap.
>
> - Switch to using iomap:
> Use iomap for buffered IO writes, reads, direct IO, file extent mapping,
> readpages, writepages operations.
>
> - Stop using the buffer head:
> The use of buffer head in old ntfs and switched to use folio instead.
> As a result, CONFIG_BUFFER_HEAD option enable is removed in Kconfig also.
>
> - Public utilities include fsck[2]:
> While ntfs-3g includes ntfsprogs as a component, it notably lacks
> the fsck implementation. So we have launched a new ntfs utilitiies
> project called ntfsprogs-plus by forking from ntfs-3g after removing
> unnecessary ntfs fuse implementation. fsck.ntfs can be used for ntfs
> testing with xfstests as well as for recovering corrupted NTFS device.
>
> - Performance Enhancements:
>
> - ntfsplus vs. ntfs3:
>
> * Performance was benchmarked using iozone with various chunk size.
> - In single-thread(1T) write tests, ntfsplus show approximately
> 3~5% better performance.
> - In multi-thread(4T) write tests, ntfsplus show approximately
> 35~110% better performance.
> - Read throughput is identical for both ntfs implementations.
>
> 1GB file size:4096 size:16384 size:65536
> MB/sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> ─────────────────────────────────────────────────────────────────
> read 399 | 399 426 | 424 429 | 430
> ─────────────────────────────────────────────────────────────────
> write(1T) 291 | 276 325 | 305 333 | 317
> write(4T) 105 | 50 113 | 78 114 | 99.6
>
>
> * File list browsing performance. (about 12~14% faster)
>
> files:100000 files:200000 files:400000
> Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> ─────────────────────────────────────────────────────────────────
> ls -lR 7.07 | 8.10 14.03 | 16.35 28.27 | 32.86
>
>
> * mount time.
>
> parti_size:1TB parti_size:2TB parti_size:4TB
> Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> ─────────────────────────────────────────────────────────────────
> mount 0.38 | 2.03 0.39 | 2.25 0.70 | 4.51
>
> The following are the reasons why ntfsplus performance is higher
> compared to ntfs3:
> - Use iomap aops.
> - Delayed allocation support.
> - Optimize zero out for newly allocated clusters.
> - Optimize runlist merge overhead with small chunck size.
> - pre-load mft(inode) blocks and index(dentry) blocks to improve
> readdir + stat performance.
> - Load lcn bitmap on background.
>
> - Stability improvement:
> a. Pass more xfstests tests:
> ntfsplus passed 287 tests, significantly higher than ntfs3's 218.
> ntfsplus implement fallocate, idmapped mount and permission, etc,
> resulting in a significantly high number of xfstests passing compared
> to ntfs3.
> b. Bonnie++ issue[3]:
> The Bonnie++ benchmark fails on ntfs3 with a "Directory not empty"
> error during file deletion. ntfs3 currently iterates directory
> entries by reading index blocks one by one. When entries are deleted
> concurrently, index block merging or entry relocation can cause
> readdir() to skip some entries, leaving files undeleted in
> workloads(bonnie++) that mix unlink and directory scans.
> ntfsplus implement leaf chain traversal in readdir to avoid entry skip
> on deletion.
>
> - Journaling support:
> ntfs3 does not provide full journaling support. It only implement journal
> replay[4], which in our testing did not function correctly. My next task
> after upstreaming will be to add full journal support to ntfsplus.
>
>
> The feature comparison summary
> ==============================
>
> Feature ntfsplus ntfs3
> =================================== ======== ===========
> Write support Yes Yes
> iomap support Yes No
> No buffer head Yes No
> Public utilities(mkfs, fsck, etc.) Yes No
> xfstests passed 287 218
> Idmapped mount Yes No
> Delayed allocation Yes No
> Bonnie++ Pass Fail
> Journaling Planned Inoperative
> =================================== ======== ===========
>
>
> References
> ==========
> [1] https://en.wikipedia.org/wiki/NTFS
> [2] https://github.com/ntfsprogs-plus/ntfsprogs-plus
> [3] https://lore.kernel.org/ntfs3/CAOZgwEd7NDkGEpdF6UQTcbYuupDavaHBoj4WwTy3Qe4Bqm6V0g@mail.gmail.com/
> [4] https://marc.info/?l=linux-fsdevel&m=161738417018673&q=mbox
>
>
> Available in the Git repository at:
> ===================================
> git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs.git ntfs-next
>
>
> v2:
> - Add ntfs3-compatible mount options(sys_immutable, nohidden,
> hide_dot_files, nocase, acl, windows_names, disable_sparse, discard).
> - Add iocharset mount option.
> - Add ntfs3-compatible dos attribute and ntfs attribute load/store
> in setxattr/getattr().
> - Add support for FS_IOC_{GET,SET}FSLABEL ioctl.
> - Add support for FITRIM ioctl.
> - Fix the warnings(duplicate symbol, __divdi3, etc) from kernel test robot.
> - Prefix pr_xxx() with ntfsplus.
> - Add support for $MFT File extension.
> - Add Documentation/filesystems/ntfsplus.rst.
> - Mark experimental.
> - Remove BUG traps warnings from checkpatch.pl.
>
> Namjae Jeon (11):
> ntfsplus: in-memory, on-disk structures and headers
> ntfsplus: add super block operations
> ntfsplus: add inode operations
> ntfsplus: add directory operations
> ntfsplus: add file operations
> ntfsplus: add iomap and address space operations
> ntfsplus: add attrib operatrions
> ntfsplus: add runlist handling and cluster allocator
> ntfsplus: add reparse and ea operations
> ntfsplus: add misc operations
> ntfsplus: add Kconfig and Makefile
>
> Documentation/filesystems/index.rst | 1 +
> Documentation/filesystems/ntfsplus.rst | 199 +
> fs/Kconfig | 1 +
> fs/Makefile | 1 +
> fs/ntfsplus/Kconfig | 45 +
> fs/ntfsplus/Makefile | 18 +
> fs/ntfsplus/aops.c | 617 +++
> fs/ntfsplus/aops.h | 92 +
> fs/ntfsplus/attrib.c | 5377 ++++++++++++++++++++++++
> fs/ntfsplus/attrib.h | 159 +
> fs/ntfsplus/attrlist.c | 285 ++
> fs/ntfsplus/attrlist.h | 21 +
> fs/ntfsplus/bitmap.c | 290 ++
> fs/ntfsplus/bitmap.h | 93 +
> fs/ntfsplus/collate.c | 178 +
> fs/ntfsplus/collate.h | 37 +
> fs/ntfsplus/compress.c | 1564 +++++++
> fs/ntfsplus/dir.c | 1230 ++++++
> fs/ntfsplus/dir.h | 33 +
> fs/ntfsplus/ea.c | 931 ++++
> fs/ntfsplus/ea.h | 25 +
> fs/ntfsplus/file.c | 1142 +++++
> fs/ntfsplus/index.c | 2112 ++++++++++
> fs/ntfsplus/index.h | 127 +
> fs/ntfsplus/inode.c | 3729 ++++++++++++++++
> fs/ntfsplus/inode.h | 353 ++
> fs/ntfsplus/layout.h | 2288 ++++++++++
> fs/ntfsplus/lcnalloc.c | 1012 +++++
> fs/ntfsplus/lcnalloc.h | 127 +
> fs/ntfsplus/logfile.c | 770 ++++
> fs/ntfsplus/logfile.h | 316 ++
> fs/ntfsplus/mft.c | 2698 ++++++++++++
> fs/ntfsplus/mft.h | 92 +
> fs/ntfsplus/misc.c | 213 +
> fs/ntfsplus/misc.h | 218 +
> fs/ntfsplus/mst.c | 195 +
> fs/ntfsplus/namei.c | 1677 ++++++++
> fs/ntfsplus/ntfs.h | 180 +
> fs/ntfsplus/ntfs_iomap.c | 700 +++
> fs/ntfsplus/ntfs_iomap.h | 22 +
> fs/ntfsplus/reparse.c | 550 +++
> fs/ntfsplus/reparse.h | 15 +
> fs/ntfsplus/runlist.c | 1983 +++++++++
> fs/ntfsplus/runlist.h | 91 +
> fs/ntfsplus/super.c | 2865 +++++++++++++
> fs/ntfsplus/unistr.c | 473 +++
> fs/ntfsplus/upcase.c | 73 +
> fs/ntfsplus/volume.h | 254 ++
> include/uapi/linux/ntfs.h | 23 +
> 49 files changed, 35495 insertions(+)
> create mode 100644 Documentation/filesystems/ntfsplus.rst
> create mode 100644 fs/ntfsplus/Kconfig
> create mode 100644 fs/ntfsplus/Makefile
> create mode 100644 fs/ntfsplus/aops.c
> create mode 100644 fs/ntfsplus/aops.h
> create mode 100644 fs/ntfsplus/attrib.c
> create mode 100644 fs/ntfsplus/attrib.h
> create mode 100644 fs/ntfsplus/attrlist.c
> create mode 100644 fs/ntfsplus/attrlist.h
> create mode 100644 fs/ntfsplus/bitmap.c
> create mode 100644 fs/ntfsplus/bitmap.h
> create mode 100644 fs/ntfsplus/collate.c
> create mode 100644 fs/ntfsplus/collate.h
> create mode 100644 fs/ntfsplus/compress.c
> create mode 100644 fs/ntfsplus/dir.c
> create mode 100644 fs/ntfsplus/dir.h
> create mode 100644 fs/ntfsplus/ea.c
> create mode 100644 fs/ntfsplus/ea.h
> create mode 100644 fs/ntfsplus/file.c
> create mode 100644 fs/ntfsplus/index.c
> create mode 100644 fs/ntfsplus/index.h
> create mode 100644 fs/ntfsplus/inode.c
> create mode 100644 fs/ntfsplus/inode.h
> create mode 100644 fs/ntfsplus/layout.h
> create mode 100644 fs/ntfsplus/lcnalloc.c
> create mode 100644 fs/ntfsplus/lcnalloc.h
> create mode 100644 fs/ntfsplus/logfile.c
> create mode 100644 fs/ntfsplus/logfile.h
> create mode 100644 fs/ntfsplus/mft.c
> create mode 100644 fs/ntfsplus/mft.h
> create mode 100644 fs/ntfsplus/misc.c
> create mode 100644 fs/ntfsplus/misc.h
> create mode 100644 fs/ntfsplus/mst.c
> create mode 100644 fs/ntfsplus/namei.c
> create mode 100644 fs/ntfsplus/ntfs.h
> create mode 100644 fs/ntfsplus/ntfs_iomap.c
> create mode 100644 fs/ntfsplus/ntfs_iomap.h
> create mode 100644 fs/ntfsplus/reparse.c
> create mode 100644 fs/ntfsplus/reparse.h
> create mode 100644 fs/ntfsplus/runlist.c
> create mode 100644 fs/ntfsplus/runlist.h
> create mode 100644 fs/ntfsplus/super.c
> create mode 100644 fs/ntfsplus/unistr.c
> create mode 100644 fs/ntfsplus/upcase.c
> create mode 100644 fs/ntfsplus/volume.h
> create mode 100644 include/uapi/linux/ntfs.h
>
> --
> 2.25.1
>
On Thu, Nov 27, 2025 at 8:10 PM Amir Goldstein <amir73il@gmail.com> wrote:
>
> On Thu, Nov 27, 2025 at 6:00 AM Namjae Jeon <linkinjeon@kernel.org> wrote:
> >
> > Introduction
> > ============
> >
> > The NTFS filesystem[1] still remains the default filesystem for Windows
> > and The well-maintained NTFS driver in the Linux kernel enhances
> > interoperability with Windows devices, making it easier for Linux users
> > to work with NTFS-formatted drives. Currently, ntfs support in Linux was
> > the long-neglected NTFS Classic (read-only), which has been removed from
> > the Linux kernel, leaving the poorly maintained ntfs3. ntfs3 still has
> > many problems and is poorly maintained, so users and distributions are
> > still using the old legacy ntfs-3g.
>
Hi Amir,
> May I suggest that you add a patch to your series to add a deprecation
> message to ntfs3?
>
> See for example eb103a51640ee ("reiserfs: Deprecate reiserfs")
Okay, I'll add it in the next version, referring to this reiserfs patch.
>
> >
> >
> > What is ntfsplus?
> > =================
> >
> > The remade ntfs called ntfsplus is an implementation that supports write
> > and the essential requirements(iomap, no buffer-head, utilities, xfstests
> > test result) based on read-only classic NTFS.
> > The old read-only ntfs code is much cleaner, with extensive comments,
> > offers readability that makes understanding NTFS easier. This is why
> > ntfsplus was developed on old read-only NTFS base.
> > The target is to provide current trends(iomap, no buffer head, folio),
> > enhanced performance, stable maintenance, utility support including fsck.
> >
>
> You are bringing back the old ntfs driver code from the dead, preserving the
> code and Copyrights and everything to bring it up to speed with modern vfs
> API and to add super nice features. Right?
Yes.
>
> Apart from its history, the new refurbished ntfs driver is also fully backward
> compact to the old read-only driver. Right?
Yes.
>
> Why is the rebranding to ntfsplus useful then?
>
> I can understand that you want a new name for a new ntfsprogs-plus project
> which is a fork of ntfs-3g, but I don't think that the new name for the kernel
> driver is useful or welcome.
Right, I wanted to rebrand ntfsprogs-plus and ntfsplus into a paired
set of names. Also, ntfs3 was already used as an alias for ntfs, so I
couldn't touch ntfs3 driver without consensus from the fs maintainers.
>
> Do you have any objections to leaving its original ntfs name?
I have no objection to using ntfsplus as an alias for ntfs if we add a
deprecation message to ntfs3.
>
> You can also do:
> MODULE_ALIAS_FS("ntfs");
> MODULE_ALIAS_FS("ntfsplus");
I will add this in the next version with ntfs3 deprecation patch.
>
> If that is useful for ntfsprogs-plus somehow.
That is very useful and thanks for your review!
>
> Thanks,
> Amir.
>
> >
> > Key Features
> > ============
> >
> > - Write support:
> > Implement write support on classic read-only NTFS. Additionally,
> > integrate delayed allocation to enhance write performance through
> > multi-cluster allocation and minimized fragmentation of cluster bitmap.
> >
> > - Switch to using iomap:
> > Use iomap for buffered IO writes, reads, direct IO, file extent mapping,
> > readpages, writepages operations.
> >
> > - Stop using the buffer head:
> > The use of buffer head in old ntfs and switched to use folio instead.
> > As a result, CONFIG_BUFFER_HEAD option enable is removed in Kconfig also.
> >
> > - Public utilities include fsck[2]:
> > While ntfs-3g includes ntfsprogs as a component, it notably lacks
> > the fsck implementation. So we have launched a new ntfs utilitiies
> > project called ntfsprogs-plus by forking from ntfs-3g after removing
> > unnecessary ntfs fuse implementation. fsck.ntfs can be used for ntfs
> > testing with xfstests as well as for recovering corrupted NTFS device.
> >
> > - Performance Enhancements:
> >
> > - ntfsplus vs. ntfs3:
> >
> > * Performance was benchmarked using iozone with various chunk size.
> > - In single-thread(1T) write tests, ntfsplus show approximately
> > 3~5% better performance.
> > - In multi-thread(4T) write tests, ntfsplus show approximately
> > 35~110% better performance.
> > - Read throughput is identical for both ntfs implementations.
> >
> > 1GB file size:4096 size:16384 size:65536
> > MB/sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > ─────────────────────────────────────────────────────────────────
> > read 399 | 399 426 | 424 429 | 430
> > ─────────────────────────────────────────────────────────────────
> > write(1T) 291 | 276 325 | 305 333 | 317
> > write(4T) 105 | 50 113 | 78 114 | 99.6
> >
> >
> > * File list browsing performance. (about 12~14% faster)
> >
> > files:100000 files:200000 files:400000
> > Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > ─────────────────────────────────────────────────────────────────
> > ls -lR 7.07 | 8.10 14.03 | 16.35 28.27 | 32.86
> >
> >
> > * mount time.
> >
> > parti_size:1TB parti_size:2TB parti_size:4TB
> > Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > ─────────────────────────────────────────────────────────────────
> > mount 0.38 | 2.03 0.39 | 2.25 0.70 | 4.51
> >
> > The following are the reasons why ntfsplus performance is higher
> > compared to ntfs3:
> > - Use iomap aops.
> > - Delayed allocation support.
> > - Optimize zero out for newly allocated clusters.
> > - Optimize runlist merge overhead with small chunck size.
> > - pre-load mft(inode) blocks and index(dentry) blocks to improve
> > readdir + stat performance.
> > - Load lcn bitmap on background.
> >
> > - Stability improvement:
> > a. Pass more xfstests tests:
> > ntfsplus passed 287 tests, significantly higher than ntfs3's 218.
> > ntfsplus implement fallocate, idmapped mount and permission, etc,
> > resulting in a significantly high number of xfstests passing compared
> > to ntfs3.
> > b. Bonnie++ issue[3]:
> > The Bonnie++ benchmark fails on ntfs3 with a "Directory not empty"
> > error during file deletion. ntfs3 currently iterates directory
> > entries by reading index blocks one by one. When entries are deleted
> > concurrently, index block merging or entry relocation can cause
> > readdir() to skip some entries, leaving files undeleted in
> > workloads(bonnie++) that mix unlink and directory scans.
> > ntfsplus implement leaf chain traversal in readdir to avoid entry skip
> > on deletion.
> >
> > - Journaling support:
> > ntfs3 does not provide full journaling support. It only implement journal
> > replay[4], which in our testing did not function correctly. My next task
> > after upstreaming will be to add full journal support to ntfsplus.
> >
> >
> > The feature comparison summary
> > ==============================
> >
> > Feature ntfsplus ntfs3
> > =================================== ======== ===========
> > Write support Yes Yes
> > iomap support Yes No
> > No buffer head Yes No
> > Public utilities(mkfs, fsck, etc.) Yes No
> > xfstests passed 287 218
> > Idmapped mount Yes No
> > Delayed allocation Yes No
> > Bonnie++ Pass Fail
> > Journaling Planned Inoperative
> > =================================== ======== ===========
> >
> >
> > References
> > ==========
> > [1] https://en.wikipedia.org/wiki/NTFS
> > [2] https://github.com/ntfsprogs-plus/ntfsprogs-plus
> > [3] https://lore.kernel.org/ntfs3/CAOZgwEd7NDkGEpdF6UQTcbYuupDavaHBoj4WwTy3Qe4Bqm6V0g@mail.gmail.com/
> > [4] https://marc.info/?l=linux-fsdevel&m=161738417018673&q=mbox
> >
> >
> > Available in the Git repository at:
> > ===================================
> > git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs.git ntfs-next
> >
> >
> > v2:
> > - Add ntfs3-compatible mount options(sys_immutable, nohidden,
> > hide_dot_files, nocase, acl, windows_names, disable_sparse, discard).
> > - Add iocharset mount option.
> > - Add ntfs3-compatible dos attribute and ntfs attribute load/store
> > in setxattr/getattr().
> > - Add support for FS_IOC_{GET,SET}FSLABEL ioctl.
> > - Add support for FITRIM ioctl.
> > - Fix the warnings(duplicate symbol, __divdi3, etc) from kernel test robot.
> > - Prefix pr_xxx() with ntfsplus.
> > - Add support for $MFT File extension.
> > - Add Documentation/filesystems/ntfsplus.rst.
> > - Mark experimental.
> > - Remove BUG traps warnings from checkpatch.pl.
> >
> > Namjae Jeon (11):
> > ntfsplus: in-memory, on-disk structures and headers
> > ntfsplus: add super block operations
> > ntfsplus: add inode operations
> > ntfsplus: add directory operations
> > ntfsplus: add file operations
> > ntfsplus: add iomap and address space operations
> > ntfsplus: add attrib operatrions
> > ntfsplus: add runlist handling and cluster allocator
> > ntfsplus: add reparse and ea operations
> > ntfsplus: add misc operations
> > ntfsplus: add Kconfig and Makefile
> >
> > Documentation/filesystems/index.rst | 1 +
> > Documentation/filesystems/ntfsplus.rst | 199 +
> > fs/Kconfig | 1 +
> > fs/Makefile | 1 +
> > fs/ntfsplus/Kconfig | 45 +
> > fs/ntfsplus/Makefile | 18 +
> > fs/ntfsplus/aops.c | 617 +++
> > fs/ntfsplus/aops.h | 92 +
> > fs/ntfsplus/attrib.c | 5377 ++++++++++++++++++++++++
> > fs/ntfsplus/attrib.h | 159 +
> > fs/ntfsplus/attrlist.c | 285 ++
> > fs/ntfsplus/attrlist.h | 21 +
> > fs/ntfsplus/bitmap.c | 290 ++
> > fs/ntfsplus/bitmap.h | 93 +
> > fs/ntfsplus/collate.c | 178 +
> > fs/ntfsplus/collate.h | 37 +
> > fs/ntfsplus/compress.c | 1564 +++++++
> > fs/ntfsplus/dir.c | 1230 ++++++
> > fs/ntfsplus/dir.h | 33 +
> > fs/ntfsplus/ea.c | 931 ++++
> > fs/ntfsplus/ea.h | 25 +
> > fs/ntfsplus/file.c | 1142 +++++
> > fs/ntfsplus/index.c | 2112 ++++++++++
> > fs/ntfsplus/index.h | 127 +
> > fs/ntfsplus/inode.c | 3729 ++++++++++++++++
> > fs/ntfsplus/inode.h | 353 ++
> > fs/ntfsplus/layout.h | 2288 ++++++++++
> > fs/ntfsplus/lcnalloc.c | 1012 +++++
> > fs/ntfsplus/lcnalloc.h | 127 +
> > fs/ntfsplus/logfile.c | 770 ++++
> > fs/ntfsplus/logfile.h | 316 ++
> > fs/ntfsplus/mft.c | 2698 ++++++++++++
> > fs/ntfsplus/mft.h | 92 +
> > fs/ntfsplus/misc.c | 213 +
> > fs/ntfsplus/misc.h | 218 +
> > fs/ntfsplus/mst.c | 195 +
> > fs/ntfsplus/namei.c | 1677 ++++++++
> > fs/ntfsplus/ntfs.h | 180 +
> > fs/ntfsplus/ntfs_iomap.c | 700 +++
> > fs/ntfsplus/ntfs_iomap.h | 22 +
> > fs/ntfsplus/reparse.c | 550 +++
> > fs/ntfsplus/reparse.h | 15 +
> > fs/ntfsplus/runlist.c | 1983 +++++++++
> > fs/ntfsplus/runlist.h | 91 +
> > fs/ntfsplus/super.c | 2865 +++++++++++++
> > fs/ntfsplus/unistr.c | 473 +++
> > fs/ntfsplus/upcase.c | 73 +
> > fs/ntfsplus/volume.h | 254 ++
> > include/uapi/linux/ntfs.h | 23 +
> > 49 files changed, 35495 insertions(+)
> > create mode 100644 Documentation/filesystems/ntfsplus.rst
> > create mode 100644 fs/ntfsplus/Kconfig
> > create mode 100644 fs/ntfsplus/Makefile
> > create mode 100644 fs/ntfsplus/aops.c
> > create mode 100644 fs/ntfsplus/aops.h
> > create mode 100644 fs/ntfsplus/attrib.c
> > create mode 100644 fs/ntfsplus/attrib.h
> > create mode 100644 fs/ntfsplus/attrlist.c
> > create mode 100644 fs/ntfsplus/attrlist.h
> > create mode 100644 fs/ntfsplus/bitmap.c
> > create mode 100644 fs/ntfsplus/bitmap.h
> > create mode 100644 fs/ntfsplus/collate.c
> > create mode 100644 fs/ntfsplus/collate.h
> > create mode 100644 fs/ntfsplus/compress.c
> > create mode 100644 fs/ntfsplus/dir.c
> > create mode 100644 fs/ntfsplus/dir.h
> > create mode 100644 fs/ntfsplus/ea.c
> > create mode 100644 fs/ntfsplus/ea.h
> > create mode 100644 fs/ntfsplus/file.c
> > create mode 100644 fs/ntfsplus/index.c
> > create mode 100644 fs/ntfsplus/index.h
> > create mode 100644 fs/ntfsplus/inode.c
> > create mode 100644 fs/ntfsplus/inode.h
> > create mode 100644 fs/ntfsplus/layout.h
> > create mode 100644 fs/ntfsplus/lcnalloc.c
> > create mode 100644 fs/ntfsplus/lcnalloc.h
> > create mode 100644 fs/ntfsplus/logfile.c
> > create mode 100644 fs/ntfsplus/logfile.h
> > create mode 100644 fs/ntfsplus/mft.c
> > create mode 100644 fs/ntfsplus/mft.h
> > create mode 100644 fs/ntfsplus/misc.c
> > create mode 100644 fs/ntfsplus/misc.h
> > create mode 100644 fs/ntfsplus/mst.c
> > create mode 100644 fs/ntfsplus/namei.c
> > create mode 100644 fs/ntfsplus/ntfs.h
> > create mode 100644 fs/ntfsplus/ntfs_iomap.c
> > create mode 100644 fs/ntfsplus/ntfs_iomap.h
> > create mode 100644 fs/ntfsplus/reparse.c
> > create mode 100644 fs/ntfsplus/reparse.h
> > create mode 100644 fs/ntfsplus/runlist.c
> > create mode 100644 fs/ntfsplus/runlist.h
> > create mode 100644 fs/ntfsplus/super.c
> > create mode 100644 fs/ntfsplus/unistr.c
> > create mode 100644 fs/ntfsplus/upcase.c
> > create mode 100644 fs/ntfsplus/volume.h
> > create mode 100644 include/uapi/linux/ntfs.h
> >
> > --
> > 2.25.1
> >
On Thu, Nov 27, 2025 at 09:17:54PM +0900, Namjae Jeon wrote: > > Why is the rebranding to ntfsplus useful then? > > > > I can understand that you want a new name for a new ntfsprogs-plus project > > which is a fork of ntfs-3g, but I don't think that the new name for the kernel > > driver is useful or welcome. > Right, I wanted to rebrand ntfsprogs-plus and ntfsplus into a paired > set of names. Also, ntfs3 was already used as an alias for ntfs, so I > couldn't touch ntfs3 driver without consensus from the fs maintainers. I think you're adding more confusion than you're removing with the name change. Please, just call it ntfs. We have hfs and hfsplus already, and those refer to different filesystems. We should just call this ntfs.
On Thu, Nov 27, 2025 at 11:58 PM Matthew Wilcox <willy@infradead.org> wrote: > > On Thu, Nov 27, 2025 at 09:17:54PM +0900, Namjae Jeon wrote: > > > Why is the rebranding to ntfsplus useful then? > > > > > > I can understand that you want a new name for a new ntfsprogs-plus project > > > which is a fork of ntfs-3g, but I don't think that the new name for the kernel > > > driver is useful or welcome. > > Right, I wanted to rebrand ntfsprogs-plus and ntfsplus into a paired > > set of names. Also, ntfs3 was already used as an alias for ntfs, so I > > couldn't touch ntfs3 driver without consensus from the fs maintainers. > > I think you're adding more confusion than you're removing with the name > change. Please, just call it ntfs. We have hfs and hfsplus already, > and those refer to different filesystems. We should just call this ntfs. Okay, I will change it back to the name "ntfs" in the next version. Thanks!
On Thu, Nov 27, 2025 at 1:18 PM Namjae Jeon <linkinjeon@kernel.org> wrote:
>
> On Thu, Nov 27, 2025 at 8:10 PM Amir Goldstein <amir73il@gmail.com> wrote:
> >
> > On Thu, Nov 27, 2025 at 6:00 AM Namjae Jeon <linkinjeon@kernel.org> wrote:
> > >
> > > Introduction
> > > ============
> > >
> > > The NTFS filesystem[1] still remains the default filesystem for Windows
> > > and The well-maintained NTFS driver in the Linux kernel enhances
> > > interoperability with Windows devices, making it easier for Linux users
> > > to work with NTFS-formatted drives. Currently, ntfs support in Linux was
> > > the long-neglected NTFS Classic (read-only), which has been removed from
> > > the Linux kernel, leaving the poorly maintained ntfs3. ntfs3 still has
> > > many problems and is poorly maintained, so users and distributions are
> > > still using the old legacy ntfs-3g.
> >
> Hi Amir,
> > May I suggest that you add a patch to your series to add a deprecation
> > message to ntfs3?
> >
> > See for example eb103a51640ee ("reiserfs: Deprecate reiserfs")
> Okay, I'll add it in the next version, referring to this reiserfs patch.
> >
There is no need to refer to this patch, there is nothing special about it.
It's just an example for you of past deprecation procedures.
Unlike resierfs, the deprecation warning and help text for ntfs3 should refer
users to the better in-tree alternative.
Thanks,
Amir.
> > >
> > >
> > > What is ntfsplus?
> > > =================
> > >
> > > The remade ntfs called ntfsplus is an implementation that supports write
> > > and the essential requirements(iomap, no buffer-head, utilities, xfstests
> > > test result) based on read-only classic NTFS.
> > > The old read-only ntfs code is much cleaner, with extensive comments,
> > > offers readability that makes understanding NTFS easier. This is why
> > > ntfsplus was developed on old read-only NTFS base.
> > > The target is to provide current trends(iomap, no buffer head, folio),
> > > enhanced performance, stable maintenance, utility support including fsck.
> > >
> >
> > You are bringing back the old ntfs driver code from the dead, preserving the
> > code and Copyrights and everything to bring it up to speed with modern vfs
> > API and to add super nice features. Right?
> Yes.
> >
> > Apart from its history, the new refurbished ntfs driver is also fully backward
> > compact to the old read-only driver. Right?
> Yes.
> >
> > Why is the rebranding to ntfsplus useful then?
> >
> > I can understand that you want a new name for a new ntfsprogs-plus project
> > which is a fork of ntfs-3g, but I don't think that the new name for the kernel
> > driver is useful or welcome.
> Right, I wanted to rebrand ntfsprogs-plus and ntfsplus into a paired
> set of names. Also, ntfs3 was already used as an alias for ntfs, so I
> couldn't touch ntfs3 driver without consensus from the fs maintainers.
> >
> > Do you have any objections to leaving its original ntfs name?
> I have no objection to using ntfsplus as an alias for ntfs if we add a
> deprecation message to ntfs3.
> >
> > You can also do:
> > MODULE_ALIAS_FS("ntfs");
> > MODULE_ALIAS_FS("ntfsplus");
> I will add this in the next version with ntfs3 deprecation patch.
> >
> > If that is useful for ntfsprogs-plus somehow.
> That is very useful and thanks for your review!
> >
> > Thanks,
> > Amir.
> >
> > >
> > > Key Features
> > > ============
> > >
> > > - Write support:
> > > Implement write support on classic read-only NTFS. Additionally,
> > > integrate delayed allocation to enhance write performance through
> > > multi-cluster allocation and minimized fragmentation of cluster bitmap.
> > >
> > > - Switch to using iomap:
> > > Use iomap for buffered IO writes, reads, direct IO, file extent mapping,
> > > readpages, writepages operations.
> > >
> > > - Stop using the buffer head:
> > > The use of buffer head in old ntfs and switched to use folio instead.
> > > As a result, CONFIG_BUFFER_HEAD option enable is removed in Kconfig also.
> > >
> > > - Public utilities include fsck[2]:
> > > While ntfs-3g includes ntfsprogs as a component, it notably lacks
> > > the fsck implementation. So we have launched a new ntfs utilitiies
> > > project called ntfsprogs-plus by forking from ntfs-3g after removing
> > > unnecessary ntfs fuse implementation. fsck.ntfs can be used for ntfs
> > > testing with xfstests as well as for recovering corrupted NTFS device.
> > >
> > > - Performance Enhancements:
> > >
> > > - ntfsplus vs. ntfs3:
> > >
> > > * Performance was benchmarked using iozone with various chunk size.
> > > - In single-thread(1T) write tests, ntfsplus show approximately
> > > 3~5% better performance.
> > > - In multi-thread(4T) write tests, ntfsplus show approximately
> > > 35~110% better performance.
> > > - Read throughput is identical for both ntfs implementations.
> > >
> > > 1GB file size:4096 size:16384 size:65536
> > > MB/sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > > ─────────────────────────────────────────────────────────────────
> > > read 399 | 399 426 | 424 429 | 430
> > > ─────────────────────────────────────────────────────────────────
> > > write(1T) 291 | 276 325 | 305 333 | 317
> > > write(4T) 105 | 50 113 | 78 114 | 99.6
> > >
> > >
> > > * File list browsing performance. (about 12~14% faster)
> > >
> > > files:100000 files:200000 files:400000
> > > Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > > ─────────────────────────────────────────────────────────────────
> > > ls -lR 7.07 | 8.10 14.03 | 16.35 28.27 | 32.86
> > >
> > >
> > > * mount time.
> > >
> > > parti_size:1TB parti_size:2TB parti_size:4TB
> > > Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > > ─────────────────────────────────────────────────────────────────
> > > mount 0.38 | 2.03 0.39 | 2.25 0.70 | 4.51
> > >
> > > The following are the reasons why ntfsplus performance is higher
> > > compared to ntfs3:
> > > - Use iomap aops.
> > > - Delayed allocation support.
> > > - Optimize zero out for newly allocated clusters.
> > > - Optimize runlist merge overhead with small chunck size.
> > > - pre-load mft(inode) blocks and index(dentry) blocks to improve
> > > readdir + stat performance.
> > > - Load lcn bitmap on background.
> > >
> > > - Stability improvement:
> > > a. Pass more xfstests tests:
> > > ntfsplus passed 287 tests, significantly higher than ntfs3's 218.
> > > ntfsplus implement fallocate, idmapped mount and permission, etc,
> > > resulting in a significantly high number of xfstests passing compared
> > > to ntfs3.
> > > b. Bonnie++ issue[3]:
> > > The Bonnie++ benchmark fails on ntfs3 with a "Directory not empty"
> > > error during file deletion. ntfs3 currently iterates directory
> > > entries by reading index blocks one by one. When entries are deleted
> > > concurrently, index block merging or entry relocation can cause
> > > readdir() to skip some entries, leaving files undeleted in
> > > workloads(bonnie++) that mix unlink and directory scans.
> > > ntfsplus implement leaf chain traversal in readdir to avoid entry skip
> > > on deletion.
> > >
> > > - Journaling support:
> > > ntfs3 does not provide full journaling support. It only implement journal
> > > replay[4], which in our testing did not function correctly. My next task
> > > after upstreaming will be to add full journal support to ntfsplus.
> > >
> > >
> > > The feature comparison summary
> > > ==============================
> > >
> > > Feature ntfsplus ntfs3
> > > =================================== ======== ===========
> > > Write support Yes Yes
> > > iomap support Yes No
> > > No buffer head Yes No
> > > Public utilities(mkfs, fsck, etc.) Yes No
> > > xfstests passed 287 218
> > > Idmapped mount Yes No
> > > Delayed allocation Yes No
> > > Bonnie++ Pass Fail
> > > Journaling Planned Inoperative
> > > =================================== ======== ===========
> > >
> > >
> > > References
> > > ==========
> > > [1] https://en.wikipedia.org/wiki/NTFS
> > > [2] https://github.com/ntfsprogs-plus/ntfsprogs-plus
> > > [3] https://lore.kernel.org/ntfs3/CAOZgwEd7NDkGEpdF6UQTcbYuupDavaHBoj4WwTy3Qe4Bqm6V0g@mail.gmail.com/
> > > [4] https://marc.info/?l=linux-fsdevel&m=161738417018673&q=mbox
> > >
> > >
> > > Available in the Git repository at:
> > > ===================================
> > > git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs.git ntfs-next
> > >
> > >
> > > v2:
> > > - Add ntfs3-compatible mount options(sys_immutable, nohidden,
> > > hide_dot_files, nocase, acl, windows_names, disable_sparse, discard).
> > > - Add iocharset mount option.
> > > - Add ntfs3-compatible dos attribute and ntfs attribute load/store
> > > in setxattr/getattr().
> > > - Add support for FS_IOC_{GET,SET}FSLABEL ioctl.
> > > - Add support for FITRIM ioctl.
> > > - Fix the warnings(duplicate symbol, __divdi3, etc) from kernel test robot.
> > > - Prefix pr_xxx() with ntfsplus.
> > > - Add support for $MFT File extension.
> > > - Add Documentation/filesystems/ntfsplus.rst.
> > > - Mark experimental.
> > > - Remove BUG traps warnings from checkpatch.pl.
> > >
> > > Namjae Jeon (11):
> > > ntfsplus: in-memory, on-disk structures and headers
> > > ntfsplus: add super block operations
> > > ntfsplus: add inode operations
> > > ntfsplus: add directory operations
> > > ntfsplus: add file operations
> > > ntfsplus: add iomap and address space operations
> > > ntfsplus: add attrib operatrions
> > > ntfsplus: add runlist handling and cluster allocator
> > > ntfsplus: add reparse and ea operations
> > > ntfsplus: add misc operations
> > > ntfsplus: add Kconfig and Makefile
> > >
> > > Documentation/filesystems/index.rst | 1 +
> > > Documentation/filesystems/ntfsplus.rst | 199 +
> > > fs/Kconfig | 1 +
> > > fs/Makefile | 1 +
> > > fs/ntfsplus/Kconfig | 45 +
> > > fs/ntfsplus/Makefile | 18 +
> > > fs/ntfsplus/aops.c | 617 +++
> > > fs/ntfsplus/aops.h | 92 +
> > > fs/ntfsplus/attrib.c | 5377 ++++++++++++++++++++++++
> > > fs/ntfsplus/attrib.h | 159 +
> > > fs/ntfsplus/attrlist.c | 285 ++
> > > fs/ntfsplus/attrlist.h | 21 +
> > > fs/ntfsplus/bitmap.c | 290 ++
> > > fs/ntfsplus/bitmap.h | 93 +
> > > fs/ntfsplus/collate.c | 178 +
> > > fs/ntfsplus/collate.h | 37 +
> > > fs/ntfsplus/compress.c | 1564 +++++++
> > > fs/ntfsplus/dir.c | 1230 ++++++
> > > fs/ntfsplus/dir.h | 33 +
> > > fs/ntfsplus/ea.c | 931 ++++
> > > fs/ntfsplus/ea.h | 25 +
> > > fs/ntfsplus/file.c | 1142 +++++
> > > fs/ntfsplus/index.c | 2112 ++++++++++
> > > fs/ntfsplus/index.h | 127 +
> > > fs/ntfsplus/inode.c | 3729 ++++++++++++++++
> > > fs/ntfsplus/inode.h | 353 ++
> > > fs/ntfsplus/layout.h | 2288 ++++++++++
> > > fs/ntfsplus/lcnalloc.c | 1012 +++++
> > > fs/ntfsplus/lcnalloc.h | 127 +
> > > fs/ntfsplus/logfile.c | 770 ++++
> > > fs/ntfsplus/logfile.h | 316 ++
> > > fs/ntfsplus/mft.c | 2698 ++++++++++++
> > > fs/ntfsplus/mft.h | 92 +
> > > fs/ntfsplus/misc.c | 213 +
> > > fs/ntfsplus/misc.h | 218 +
> > > fs/ntfsplus/mst.c | 195 +
> > > fs/ntfsplus/namei.c | 1677 ++++++++
> > > fs/ntfsplus/ntfs.h | 180 +
> > > fs/ntfsplus/ntfs_iomap.c | 700 +++
> > > fs/ntfsplus/ntfs_iomap.h | 22 +
> > > fs/ntfsplus/reparse.c | 550 +++
> > > fs/ntfsplus/reparse.h | 15 +
> > > fs/ntfsplus/runlist.c | 1983 +++++++++
> > > fs/ntfsplus/runlist.h | 91 +
> > > fs/ntfsplus/super.c | 2865 +++++++++++++
> > > fs/ntfsplus/unistr.c | 473 +++
> > > fs/ntfsplus/upcase.c | 73 +
> > > fs/ntfsplus/volume.h | 254 ++
> > > include/uapi/linux/ntfs.h | 23 +
> > > 49 files changed, 35495 insertions(+)
> > > create mode 100644 Documentation/filesystems/ntfsplus.rst
> > > create mode 100644 fs/ntfsplus/Kconfig
> > > create mode 100644 fs/ntfsplus/Makefile
> > > create mode 100644 fs/ntfsplus/aops.c
> > > create mode 100644 fs/ntfsplus/aops.h
> > > create mode 100644 fs/ntfsplus/attrib.c
> > > create mode 100644 fs/ntfsplus/attrib.h
> > > create mode 100644 fs/ntfsplus/attrlist.c
> > > create mode 100644 fs/ntfsplus/attrlist.h
> > > create mode 100644 fs/ntfsplus/bitmap.c
> > > create mode 100644 fs/ntfsplus/bitmap.h
> > > create mode 100644 fs/ntfsplus/collate.c
> > > create mode 100644 fs/ntfsplus/collate.h
> > > create mode 100644 fs/ntfsplus/compress.c
> > > create mode 100644 fs/ntfsplus/dir.c
> > > create mode 100644 fs/ntfsplus/dir.h
> > > create mode 100644 fs/ntfsplus/ea.c
> > > create mode 100644 fs/ntfsplus/ea.h
> > > create mode 100644 fs/ntfsplus/file.c
> > > create mode 100644 fs/ntfsplus/index.c
> > > create mode 100644 fs/ntfsplus/index.h
> > > create mode 100644 fs/ntfsplus/inode.c
> > > create mode 100644 fs/ntfsplus/inode.h
> > > create mode 100644 fs/ntfsplus/layout.h
> > > create mode 100644 fs/ntfsplus/lcnalloc.c
> > > create mode 100644 fs/ntfsplus/lcnalloc.h
> > > create mode 100644 fs/ntfsplus/logfile.c
> > > create mode 100644 fs/ntfsplus/logfile.h
> > > create mode 100644 fs/ntfsplus/mft.c
> > > create mode 100644 fs/ntfsplus/mft.h
> > > create mode 100644 fs/ntfsplus/misc.c
> > > create mode 100644 fs/ntfsplus/misc.h
> > > create mode 100644 fs/ntfsplus/mst.c
> > > create mode 100644 fs/ntfsplus/namei.c
> > > create mode 100644 fs/ntfsplus/ntfs.h
> > > create mode 100644 fs/ntfsplus/ntfs_iomap.c
> > > create mode 100644 fs/ntfsplus/ntfs_iomap.h
> > > create mode 100644 fs/ntfsplus/reparse.c
> > > create mode 100644 fs/ntfsplus/reparse.h
> > > create mode 100644 fs/ntfsplus/runlist.c
> > > create mode 100644 fs/ntfsplus/runlist.h
> > > create mode 100644 fs/ntfsplus/super.c
> > > create mode 100644 fs/ntfsplus/unistr.c
> > > create mode 100644 fs/ntfsplus/upcase.c
> > > create mode 100644 fs/ntfsplus/volume.h
> > > create mode 100644 include/uapi/linux/ntfs.h
> > >
> > > --
> > > 2.25.1
> > >
On Thu, Nov 27, 2025 at 10:16 PM Amir Goldstein <amir73il@gmail.com> wrote:
>
> On Thu, Nov 27, 2025 at 1:18 PM Namjae Jeon <linkinjeon@kernel.org> wrote:
> >
> > On Thu, Nov 27, 2025 at 8:10 PM Amir Goldstein <amir73il@gmail.com> wrote:
> > >
> > > On Thu, Nov 27, 2025 at 6:00 AM Namjae Jeon <linkinjeon@kernel.org> wrote:
> > > >
> > > > Introduction
> > > > ============
> > > >
> > > > The NTFS filesystem[1] still remains the default filesystem for Windows
> > > > and The well-maintained NTFS driver in the Linux kernel enhances
> > > > interoperability with Windows devices, making it easier for Linux users
> > > > to work with NTFS-formatted drives. Currently, ntfs support in Linux was
> > > > the long-neglected NTFS Classic (read-only), which has been removed from
> > > > the Linux kernel, leaving the poorly maintained ntfs3. ntfs3 still has
> > > > many problems and is poorly maintained, so users and distributions are
> > > > still using the old legacy ntfs-3g.
> > >
> > Hi Amir,
> > > May I suggest that you add a patch to your series to add a deprecation
> > > message to ntfs3?
> > >
> > > See for example eb103a51640ee ("reiserfs: Deprecate reiserfs")
> > Okay, I'll add it in the next version, referring to this reiserfs patch.
> > >
>
> There is no need to refer to this patch, there is nothing special about it.
> It's just an example for you of past deprecation procedures.
>
> Unlike resierfs, the deprecation warning and help text for ntfs3 should refer
> users to the better in-tree alternative.
Okay, I will do that.
Thanks!
>
> Thanks,
> Amir.
>
> > > >
> > > >
> > > > What is ntfsplus?
> > > > =================
> > > >
> > > > The remade ntfs called ntfsplus is an implementation that supports write
> > > > and the essential requirements(iomap, no buffer-head, utilities, xfstests
> > > > test result) based on read-only classic NTFS.
> > > > The old read-only ntfs code is much cleaner, with extensive comments,
> > > > offers readability that makes understanding NTFS easier. This is why
> > > > ntfsplus was developed on old read-only NTFS base.
> > > > The target is to provide current trends(iomap, no buffer head, folio),
> > > > enhanced performance, stable maintenance, utility support including fsck.
> > > >
> > >
> > > You are bringing back the old ntfs driver code from the dead, preserving the
> > > code and Copyrights and everything to bring it up to speed with modern vfs
> > > API and to add super nice features. Right?
> > Yes.
> > >
> > > Apart from its history, the new refurbished ntfs driver is also fully backward
> > > compact to the old read-only driver. Right?
> > Yes.
> > >
> > > Why is the rebranding to ntfsplus useful then?
> > >
> > > I can understand that you want a new name for a new ntfsprogs-plus project
> > > which is a fork of ntfs-3g, but I don't think that the new name for the kernel
> > > driver is useful or welcome.
> > Right, I wanted to rebrand ntfsprogs-plus and ntfsplus into a paired
> > set of names. Also, ntfs3 was already used as an alias for ntfs, so I
> > couldn't touch ntfs3 driver without consensus from the fs maintainers.
> > >
> > > Do you have any objections to leaving its original ntfs name?
> > I have no objection to using ntfsplus as an alias for ntfs if we add a
> > deprecation message to ntfs3.
> > >
> > > You can also do:
> > > MODULE_ALIAS_FS("ntfs");
> > > MODULE_ALIAS_FS("ntfsplus");
> > I will add this in the next version with ntfs3 deprecation patch.
> > >
> > > If that is useful for ntfsprogs-plus somehow.
> > That is very useful and thanks for your review!
> > >
> > > Thanks,
> > > Amir.
> > >
> > > >
> > > > Key Features
> > > > ============
> > > >
> > > > - Write support:
> > > > Implement write support on classic read-only NTFS. Additionally,
> > > > integrate delayed allocation to enhance write performance through
> > > > multi-cluster allocation and minimized fragmentation of cluster bitmap.
> > > >
> > > > - Switch to using iomap:
> > > > Use iomap for buffered IO writes, reads, direct IO, file extent mapping,
> > > > readpages, writepages operations.
> > > >
> > > > - Stop using the buffer head:
> > > > The use of buffer head in old ntfs and switched to use folio instead.
> > > > As a result, CONFIG_BUFFER_HEAD option enable is removed in Kconfig also.
> > > >
> > > > - Public utilities include fsck[2]:
> > > > While ntfs-3g includes ntfsprogs as a component, it notably lacks
> > > > the fsck implementation. So we have launched a new ntfs utilitiies
> > > > project called ntfsprogs-plus by forking from ntfs-3g after removing
> > > > unnecessary ntfs fuse implementation. fsck.ntfs can be used for ntfs
> > > > testing with xfstests as well as for recovering corrupted NTFS device.
> > > >
> > > > - Performance Enhancements:
> > > >
> > > > - ntfsplus vs. ntfs3:
> > > >
> > > > * Performance was benchmarked using iozone with various chunk size.
> > > > - In single-thread(1T) write tests, ntfsplus show approximately
> > > > 3~5% better performance.
> > > > - In multi-thread(4T) write tests, ntfsplus show approximately
> > > > 35~110% better performance.
> > > > - Read throughput is identical for both ntfs implementations.
> > > >
> > > > 1GB file size:4096 size:16384 size:65536
> > > > MB/sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > > > ─────────────────────────────────────────────────────────────────
> > > > read 399 | 399 426 | 424 429 | 430
> > > > ─────────────────────────────────────────────────────────────────
> > > > write(1T) 291 | 276 325 | 305 333 | 317
> > > > write(4T) 105 | 50 113 | 78 114 | 99.6
> > > >
> > > >
> > > > * File list browsing performance. (about 12~14% faster)
> > > >
> > > > files:100000 files:200000 files:400000
> > > > Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > > > ─────────────────────────────────────────────────────────────────
> > > > ls -lR 7.07 | 8.10 14.03 | 16.35 28.27 | 32.86
> > > >
> > > >
> > > > * mount time.
> > > >
> > > > parti_size:1TB parti_size:2TB parti_size:4TB
> > > > Sec ntfsplus | ntfs3 ntfsplus | ntfs3 ntfsplus | ntfs3
> > > > ─────────────────────────────────────────────────────────────────
> > > > mount 0.38 | 2.03 0.39 | 2.25 0.70 | 4.51
> > > >
> > > > The following are the reasons why ntfsplus performance is higher
> > > > compared to ntfs3:
> > > > - Use iomap aops.
> > > > - Delayed allocation support.
> > > > - Optimize zero out for newly allocated clusters.
> > > > - Optimize runlist merge overhead with small chunck size.
> > > > - pre-load mft(inode) blocks and index(dentry) blocks to improve
> > > > readdir + stat performance.
> > > > - Load lcn bitmap on background.
> > > >
> > > > - Stability improvement:
> > > > a. Pass more xfstests tests:
> > > > ntfsplus passed 287 tests, significantly higher than ntfs3's 218.
> > > > ntfsplus implement fallocate, idmapped mount and permission, etc,
> > > > resulting in a significantly high number of xfstests passing compared
> > > > to ntfs3.
> > > > b. Bonnie++ issue[3]:
> > > > The Bonnie++ benchmark fails on ntfs3 with a "Directory not empty"
> > > > error during file deletion. ntfs3 currently iterates directory
> > > > entries by reading index blocks one by one. When entries are deleted
> > > > concurrently, index block merging or entry relocation can cause
> > > > readdir() to skip some entries, leaving files undeleted in
> > > > workloads(bonnie++) that mix unlink and directory scans.
> > > > ntfsplus implement leaf chain traversal in readdir to avoid entry skip
> > > > on deletion.
> > > >
> > > > - Journaling support:
> > > > ntfs3 does not provide full journaling support. It only implement journal
> > > > replay[4], which in our testing did not function correctly. My next task
> > > > after upstreaming will be to add full journal support to ntfsplus.
> > > >
> > > >
> > > > The feature comparison summary
> > > > ==============================
> > > >
> > > > Feature ntfsplus ntfs3
> > > > =================================== ======== ===========
> > > > Write support Yes Yes
> > > > iomap support Yes No
> > > > No buffer head Yes No
> > > > Public utilities(mkfs, fsck, etc.) Yes No
> > > > xfstests passed 287 218
> > > > Idmapped mount Yes No
> > > > Delayed allocation Yes No
> > > > Bonnie++ Pass Fail
> > > > Journaling Planned Inoperative
> > > > =================================== ======== ===========
> > > >
> > > >
> > > > References
> > > > ==========
> > > > [1] https://en.wikipedia.org/wiki/NTFS
> > > > [2] https://github.com/ntfsprogs-plus/ntfsprogs-plus
> > > > [3] https://lore.kernel.org/ntfs3/CAOZgwEd7NDkGEpdF6UQTcbYuupDavaHBoj4WwTy3Qe4Bqm6V0g@mail.gmail.com/
> > > > [4] https://marc.info/?l=linux-fsdevel&m=161738417018673&q=mbox
> > > >
> > > >
> > > > Available in the Git repository at:
> > > > ===================================
> > > > git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs.git ntfs-next
> > > >
> > > >
> > > > v2:
> > > > - Add ntfs3-compatible mount options(sys_immutable, nohidden,
> > > > hide_dot_files, nocase, acl, windows_names, disable_sparse, discard).
> > > > - Add iocharset mount option.
> > > > - Add ntfs3-compatible dos attribute and ntfs attribute load/store
> > > > in setxattr/getattr().
> > > > - Add support for FS_IOC_{GET,SET}FSLABEL ioctl.
> > > > - Add support for FITRIM ioctl.
> > > > - Fix the warnings(duplicate symbol, __divdi3, etc) from kernel test robot.
> > > > - Prefix pr_xxx() with ntfsplus.
> > > > - Add support for $MFT File extension.
> > > > - Add Documentation/filesystems/ntfsplus.rst.
> > > > - Mark experimental.
> > > > - Remove BUG traps warnings from checkpatch.pl.
> > > >
> > > > Namjae Jeon (11):
> > > > ntfsplus: in-memory, on-disk structures and headers
> > > > ntfsplus: add super block operations
> > > > ntfsplus: add inode operations
> > > > ntfsplus: add directory operations
> > > > ntfsplus: add file operations
> > > > ntfsplus: add iomap and address space operations
> > > > ntfsplus: add attrib operatrions
> > > > ntfsplus: add runlist handling and cluster allocator
> > > > ntfsplus: add reparse and ea operations
> > > > ntfsplus: add misc operations
> > > > ntfsplus: add Kconfig and Makefile
> > > >
> > > > Documentation/filesystems/index.rst | 1 +
> > > > Documentation/filesystems/ntfsplus.rst | 199 +
> > > > fs/Kconfig | 1 +
> > > > fs/Makefile | 1 +
> > > > fs/ntfsplus/Kconfig | 45 +
> > > > fs/ntfsplus/Makefile | 18 +
> > > > fs/ntfsplus/aops.c | 617 +++
> > > > fs/ntfsplus/aops.h | 92 +
> > > > fs/ntfsplus/attrib.c | 5377 ++++++++++++++++++++++++
> > > > fs/ntfsplus/attrib.h | 159 +
> > > > fs/ntfsplus/attrlist.c | 285 ++
> > > > fs/ntfsplus/attrlist.h | 21 +
> > > > fs/ntfsplus/bitmap.c | 290 ++
> > > > fs/ntfsplus/bitmap.h | 93 +
> > > > fs/ntfsplus/collate.c | 178 +
> > > > fs/ntfsplus/collate.h | 37 +
> > > > fs/ntfsplus/compress.c | 1564 +++++++
> > > > fs/ntfsplus/dir.c | 1230 ++++++
> > > > fs/ntfsplus/dir.h | 33 +
> > > > fs/ntfsplus/ea.c | 931 ++++
> > > > fs/ntfsplus/ea.h | 25 +
> > > > fs/ntfsplus/file.c | 1142 +++++
> > > > fs/ntfsplus/index.c | 2112 ++++++++++
> > > > fs/ntfsplus/index.h | 127 +
> > > > fs/ntfsplus/inode.c | 3729 ++++++++++++++++
> > > > fs/ntfsplus/inode.h | 353 ++
> > > > fs/ntfsplus/layout.h | 2288 ++++++++++
> > > > fs/ntfsplus/lcnalloc.c | 1012 +++++
> > > > fs/ntfsplus/lcnalloc.h | 127 +
> > > > fs/ntfsplus/logfile.c | 770 ++++
> > > > fs/ntfsplus/logfile.h | 316 ++
> > > > fs/ntfsplus/mft.c | 2698 ++++++++++++
> > > > fs/ntfsplus/mft.h | 92 +
> > > > fs/ntfsplus/misc.c | 213 +
> > > > fs/ntfsplus/misc.h | 218 +
> > > > fs/ntfsplus/mst.c | 195 +
> > > > fs/ntfsplus/namei.c | 1677 ++++++++
> > > > fs/ntfsplus/ntfs.h | 180 +
> > > > fs/ntfsplus/ntfs_iomap.c | 700 +++
> > > > fs/ntfsplus/ntfs_iomap.h | 22 +
> > > > fs/ntfsplus/reparse.c | 550 +++
> > > > fs/ntfsplus/reparse.h | 15 +
> > > > fs/ntfsplus/runlist.c | 1983 +++++++++
> > > > fs/ntfsplus/runlist.h | 91 +
> > > > fs/ntfsplus/super.c | 2865 +++++++++++++
> > > > fs/ntfsplus/unistr.c | 473 +++
> > > > fs/ntfsplus/upcase.c | 73 +
> > > > fs/ntfsplus/volume.h | 254 ++
> > > > include/uapi/linux/ntfs.h | 23 +
> > > > 49 files changed, 35495 insertions(+)
> > > > create mode 100644 Documentation/filesystems/ntfsplus.rst
> > > > create mode 100644 fs/ntfsplus/Kconfig
> > > > create mode 100644 fs/ntfsplus/Makefile
> > > > create mode 100644 fs/ntfsplus/aops.c
> > > > create mode 100644 fs/ntfsplus/aops.h
> > > > create mode 100644 fs/ntfsplus/attrib.c
> > > > create mode 100644 fs/ntfsplus/attrib.h
> > > > create mode 100644 fs/ntfsplus/attrlist.c
> > > > create mode 100644 fs/ntfsplus/attrlist.h
> > > > create mode 100644 fs/ntfsplus/bitmap.c
> > > > create mode 100644 fs/ntfsplus/bitmap.h
> > > > create mode 100644 fs/ntfsplus/collate.c
> > > > create mode 100644 fs/ntfsplus/collate.h
> > > > create mode 100644 fs/ntfsplus/compress.c
> > > > create mode 100644 fs/ntfsplus/dir.c
> > > > create mode 100644 fs/ntfsplus/dir.h
> > > > create mode 100644 fs/ntfsplus/ea.c
> > > > create mode 100644 fs/ntfsplus/ea.h
> > > > create mode 100644 fs/ntfsplus/file.c
> > > > create mode 100644 fs/ntfsplus/index.c
> > > > create mode 100644 fs/ntfsplus/index.h
> > > > create mode 100644 fs/ntfsplus/inode.c
> > > > create mode 100644 fs/ntfsplus/inode.h
> > > > create mode 100644 fs/ntfsplus/layout.h
> > > > create mode 100644 fs/ntfsplus/lcnalloc.c
> > > > create mode 100644 fs/ntfsplus/lcnalloc.h
> > > > create mode 100644 fs/ntfsplus/logfile.c
> > > > create mode 100644 fs/ntfsplus/logfile.h
> > > > create mode 100644 fs/ntfsplus/mft.c
> > > > create mode 100644 fs/ntfsplus/mft.h
> > > > create mode 100644 fs/ntfsplus/misc.c
> > > > create mode 100644 fs/ntfsplus/misc.h
> > > > create mode 100644 fs/ntfsplus/mst.c
> > > > create mode 100644 fs/ntfsplus/namei.c
> > > > create mode 100644 fs/ntfsplus/ntfs.h
> > > > create mode 100644 fs/ntfsplus/ntfs_iomap.c
> > > > create mode 100644 fs/ntfsplus/ntfs_iomap.h
> > > > create mode 100644 fs/ntfsplus/reparse.c
> > > > create mode 100644 fs/ntfsplus/reparse.h
> > > > create mode 100644 fs/ntfsplus/runlist.c
> > > > create mode 100644 fs/ntfsplus/runlist.h
> > > > create mode 100644 fs/ntfsplus/super.c
> > > > create mode 100644 fs/ntfsplus/unistr.c
> > > > create mode 100644 fs/ntfsplus/upcase.c
> > > > create mode 100644 fs/ntfsplus/volume.h
> > > > create mode 100644 include/uapi/linux/ntfs.h
> > > >
> > > > --
> > > > 2.25.1
> > > >
© 2016 - 2025 Red Hat, Inc.