lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAKYAXd_CZHyhPKGvXXYVuGqUQqDJOurxF=m4DJG_ndknPuNSCQ@mail.gmail.com>
Date: Fri, 28 Nov 2025 08:14:50 +0900
From: Namjae Jeon <linkinjeon@...nel.org>
To: Amir Goldstein <amir73il@...il.com>
Cc: viro@...iv.linux.org.uk, brauner@...nel.org, hch@...radead.org, hch@....de, 
	tytso@....edu, willy@...radead.org, jack@...e.cz, djwong@...nel.org, 
	josef@...icpanda.com, sandeen@...deen.net, rgoldwyn@...e.com, 
	xiang@...nel.org, dsterba@...e.com, pali@...nel.org, ebiggers@...nel.org, 
	neil@...wn.name, linux-fsdevel@...r.kernel.org, linux-kernel@...r.kernel.org, 
	iamjoonsoo.kim@....com, cheol.lee@....com, jay.sim@....com, gunho.lee@....com
Subject: Re: [PATCH v2 00/11] ntfsplus: ntfs filesystem remake

On Thu, Nov 27, 2025 at 10:16 PM Amir Goldstein <amir73il@...il.com> wrote:
>
> On Thu, Nov 27, 2025 at 1:18 PM Namjae Jeon <linkinjeon@...nel.org> wrote:
> >
> > On Thu, Nov 27, 2025 at 8:10 PM Amir Goldstein <amir73il@...il.com> wrote:
> > >
> > > On Thu, Nov 27, 2025 at 6:00 AM Namjae Jeon <linkinjeon@...nel.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
> > > >

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ