[GIT PULL] ntfs update for 7.3-rc1
From: Namjae Jeon
Date: Tue Aug 25 2026 - 06:16:00 EST
Hi Linus,
This is ntfs update pull request for v7.3-rc1. I add a description of
this pull request below. Please pull ntfs with following ones.
Thanks!
The following changes since commit bd5f485f3f026225b86573e559af0b7254ef4184:
Merge tag 'soc-arm-7.3' of
git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc (2026-08-18
19:50:40 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs.git
tags/ntfs-for-7.3-rc1
for you to fetch changes up to a7b842f182d126a07838d81be8201d8d953c67c0:
ntfs: support resident WOF decompression (2026-08-21 19:09:00 +0900)
----------------------------------------------------------------
This contains 52 commits with improvements to compression support,
metadata handling, error propagation, and filesystem robustness.
New feature:
- Add optional read support for Windows System Compression (WOF).
Add CONFIG_NTFS_FS_WOF_COMPRESSION and support reading WOF-compressed
files through the NTFS page-read path. This includes parsing
REPARSE_TAG_WOF, handling resident and non-resident WOF metadata and
compressed chunks, and adding kernel-side XPRESS 4K/8K/16K and LZX 32K
decompressors. The codecs use a common transparent compression interface
shared with LZNT1. WOF support is read-only and disabled unless
explicitly enabled.
Other changes:
- Harden malformed filesystem handling and error paths.
Add bounds and consistency checks for mapping pairs, run lengths, MFT
locations, update-sequence offsets, non-resident attributes, compressed
attributes, index roots, and bitmap scans. Prevent out-of-bounds accesses
in decompression, MFT allocation, and index conversion paths, clean up MFT
mappings and attribute search contexts on failure, and propagate attribute
and inode initialization errors correctly.
- Improve compressed-file I/O path.
Fix compressed writes on large-page and highmem systems, reuse compression
contexts and output workspaces, avoid unnecessary reads for full-unit
overwrites, and submit one bio per compressed write unit. Write replacement
data before publishing the new mapping, correctly handle zero-filled
compressed blocks, and fix initialized-size and folio state updates after
compressed writes.
- Synchronize resident reads with MFT record updates.
- Validate the final EA stream size before modifying existing data, rewrite
the stream safely when replacing entries, restore the previous state when
metadata updates fail, and remove the EA attribute pair when the last
entry is deleted.
- Apply Windows filename restrictions only when windows_names is enabled.
- Allow index roots to relocate to extent MFT records when the base record
lacks sufficient space.
- Move non-resident attribute payload data before shrinking its record.
- Correct resident-to-non-resident conversion when compression or sparse
flags are enabled.
- Prepare file allocation and initialized-size updates before buffered or
direct I/O submission, and use pagecache_isize_extended() when extending
the file size.
- Fix highmem and page/folio access in compressed I/O paths by using the
correct local mappings and page helpers.
- Apply per-file $LXMOD permissions instead of mount masks when available,
and prevent unprivileged writes to reserved $LX* attributes.
- Update the NTFS maintainer mailing list.
- Four small cleanups.
----------------------------------------------------------------
Alexandro Calo (2):
ntfs: Fix min_len for compressed/sparse attributes in
ntfs_non_resident_attr_value_is_valid()
ntfs: Fix index_root heap OOB write in ntfs_ir_to_ib()
Baolin Liu (1):
ntfs: do not update ctime when setxattr fails
Bryam Vargas (1):
ntfs: bound the free-cluster bitmap scan to the volume
Dennis Tighe (2):
ntfs: fix off-by-one page overflow in ntfs_decompress()
ntfs: validate usa_ofs before preserving the update sequence number
Dmitry Antipov (1):
ntfs: simplify ntfs_reparse_set_native_symlink()
Hongling Zeng (3):
ntfs: validate non-resident attribute offsets
ntfs: verify run length exceeding volume boundary
ntfs: fix resource leak in ntfs_new_attr_flags
Hyeontae Lee (1):
ntfs: serialize resident iomap reads with mrec_lock
Hyunchul Lee (13):
ntfs: fix resident conversion in ntfs_new_attr_flags
ntfs: reject invalid MFT LCNs from boot sector
ntfs: reject invalid empty mapping pairs
ntfs: introduce transparent compression codec interface
ntfs: define LZNT1 codec ops under transparent codec interface
ntfs: add WOF compression config option
ntfs: return errors from ntfs_attr_readall
ntfs: parse REPARSE_TAG_WOF
ntfs: return errors from inode initialization
ntfs: port lzx/xpress decompressors from ntfs-3g-system-compression
ntfs: implement codec ops for LZX and XPRESS
ntfs: add non-resident WOF decompression
ntfs: support resident WOF decompression
Matthew Wilcox (Oracle) (4):
ntfs: Inline zero_partial_compressed_page()
ntfs: Remove use of __folio_index in handle_bounds_compressed_page()
ntfs: Use zero_user_segment() in handle_bounds_compressed_page()
ntfs: Remove references to page->__folio_index
Mohammad Shahid (3):
ntfs: reparse: remove redundant NULL checks before kvfree()
ntfs: mft: use kmemdup() instead of kmalloc() and memcpy()
ntfs: dir: use kmemdup() instead of kmalloc() and memcpy()
Namjae Jeon (20):
ntfs: validate final EA attribute size
ntfs: remove empty EA attribute pair
ntfs: rewrite EA stream before updating metadata
ntfs: fix kmap_local_page() usage in compress
ntfs: file extension before write submission
ntfs: use pagecache_isize_extended() on size extension
MAINTAINERS: update mailing list address for ntfs
ntfs: propagate compression context allocation errors
ntfs: support large pages in compressed writes
ntfs: punch all-zero compressed blocks
ntfs: write compressed data before replacing old clusters
ntfs: fix initialized size and page state after compressed writes
ntfs: reuse the compression context during writes
ntfs: reuse compression output workspace across write units
ntfs: submit one bio per compressed write unit
ntfs: skip reads for full compression unit overwrites
ntfs: move attribute payload before shrinking its record
ntfs: apply Windows name checks only with windows_names
ntfs: respect per-file chmod mode over mount masks
ntfs: allow index root relocation
Pisit Preechapramoth (1):
ntfs: reject unprivileged writes to reserved $LX* xattrs
MAINTAINERS | 2 +-
fs/ntfs/Kconfig | 11 +
fs/ntfs/Makefile | 3 +
fs/ntfs/aops.c | 19 +-
fs/ntfs/attrib.c | 46 ++-
fs/ntfs/bdev-io.c | 4 +-
fs/ntfs/compress.c | 399 ++++++++++++----------
fs/ntfs/dir.c | 5 +-
fs/ntfs/ea.c | 285 ++++++++++++----
fs/ntfs/ea.h | 3 +-
fs/ntfs/file.c | 128 +++++--
fs/ntfs/index.c | 98 +++++-
fs/ntfs/inode.c | 108 ++++--
fs/ntfs/inode.h | 5 +-
fs/ntfs/iomap.c | 66 ++--
fs/ntfs/lcnalloc.c | 7 +-
fs/ntfs/lib/decompress_common.c | 200 +++++++++++
fs/ntfs/lib/decompress_common.h | 444 ++++++++++++++++++++++++
fs/ntfs/lib/lib.h | 29 ++
fs/ntfs/lib/lzx_decompress.c | 631 ++++++++++++++++++++++++++++++++++
fs/ntfs/lib/xpress_decompress.c | 154 +++++++++
fs/ntfs/mft.c | 15 +-
fs/ntfs/namei.c | 10 +-
fs/ntfs/ntfs.h | 4 +
fs/ntfs/ntfs_codec.h | 54 +++
fs/ntfs/reparse.c | 209 ++++++++----
fs/ntfs/reparse.h | 2 +-
fs/ntfs/runlist.c | 48 +++
fs/ntfs/super.c | 15 +-
fs/ntfs/wof.c | 726 ++++++++++++++++++++++++++++++++++++++++
30 files changed, 3274 insertions(+), 456 deletions(-)
create mode 100644 fs/ntfs/lib/decompress_common.c
create mode 100644 fs/ntfs/lib/decompress_common.h
create mode 100644 fs/ntfs/lib/lib.h
create mode 100644 fs/ntfs/lib/lzx_decompress.c
create mode 100644 fs/ntfs/lib/xpress_decompress.c
create mode 100644 fs/ntfs/ntfs_codec.h
create mode 100644 fs/ntfs/wof.c