Files
Linus Torvalds 12392d40a3 Merge tag 'ntfs-for-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs
Pull ntfs updates from Namjae Jeon:
 "New features:

   - Implement ioctls to list, read, write, and remove named streams on
     files and directories. Provide optional file:stream pathname access
     through streams_interface=windows, exposing streams as regular file
     descriptors with support for mmap, locking, truncation, and
     allocation.

   - Support file attribute queries and updates through FS_IOC_GETFLAGS
     and FS_IOC_SETFLAGS. Store immutable, append-only, nodump, and
     noatime settings in the private $LINUXFLAGS extended attribute and
     restore them when loading inodes. Also report compression,
     encryption, and the mount-wide case-folding policy as read-only
     attributes.

  Other changes:

   - Expose the existing NTFS volume serial number through FS_IOC_GETFSUUID
     by registering it as an eight-byte filesystem identifier.

   - Validate MFT I/O geometry and write MFT records and mirror data
     through mapped I/O units, keeping neighboring records intact when
     multiple records share a native 4Kn block. Track folio writeback
     until all BIOs complete, serialize raw record updates against
     writeback, and use the caller's requested completion mode.

   - Discard stale uninitialized cache data before extending initialized
     size, ensure shared mmap writes update initialized size after
     native 4Kn size extension, and synchronize attribute inode sizes
     after internal resizes. Keep VFS and NTFS sizes consistent when
     write-error rollback fails and record the volume error.

   - Wait for existing folio writeback before updating attribute data,
     require page alignment for full-page write optimizations, and
     include the final partial cluster in synchronous writes. Skip
     duplicate VFS page-cache truncation under the MFT record lock to
     avoid a truncate and writeback deadlock.

   - Restart allocation zone searches after failed hints and prevent
     contiguous allocation requests from returning additional disjoint
     runs that callers leave uninitialized. Allow fallocate after
     MFT-zone exhaustion and interrupt allocation loops only for fatal
     signals, avoiding spurious interruptions from io_uring task-work
     notifications.

   - Wait for the initial bitmap scan before extending the MFT bitmap,
     bound direct allocation candidates by the volume size, update
     free-space accounting, and undo only newly allocated clusters after
     run coalescing. Update attribute-list inode size before reserving
     additional space.

   - Hold runlist locks while expanding non-resident attributes, balance
     locks during MFT extension error handling, and avoid pointers
     invalidated by runlist reallocation. Keep source runlists available
     for rollback and allocate enough room for runlist markers and
     terminators.

   - Return errors for unmappable runlist fragments instead of treating
     them as holes or delayed allocation. Check non-resident attribute
     sizes against their allocation and fail mounts when $MFT needs
     extent records outside the decoded runlist to describe itself,
     preventing silent zero reads and mount hangs.

   - Load and validate $BadClus:$Bad at mount time and reserve known bad
     clusters before the free-space scan. Fall back to read-only
     operation when bad-cluster metadata cannot be validated and prevent
     subsequent read-write remounts.

   - Serialize volume flag updates and retain the dirty bit after
     metadata changes while the volume remains mounted read-write.
     Persist recorded errors after final metadata commits, fail ordinary
     read-only remounts on sync, commit, or flush errors, and retain the
     dirty bit on forced remounts.

   - Flush the device write cache when syncing directories and report
     flush failures from both file and directory fsync. Drain in-flight
     direct I/O before buffered write fallback and keep nonblocking
     requests from entering the blocking fallback path.

   - Mount hibernated volumes, or volumes whose hibernation state cannot
     be determined, read-only regardless of the errors= policy. Prevent
     mount-time and dirty-state updates from modifying hibernated
     volumes.

   - Validate complete EA chains, link zero-terminated tails when
     appending entries, retain the EA presence flag, and distinguish
     empty values from removal. Propagate lookup, write, and truncate
     errors, restore both EA attributes after failed updates, and shut
     down the volume if restoration fails.

   - Restore the previous ACL xattr when a subsequent WSL mode update
     fails, including replacement and removal cases. Record rollback
     failures so an unsuccessful permission change cannot silently leave
     inconsistent ACL and mode state.

   - Apply MST fixups to individual index blocks on large-page systems
     and use fixed 512-byte VCN units when an index block is smaller
     than its cluster. Support lookup and removal of POSIX names
     containing Windows-invalid characters and identify directory
     symlinks and junctions during enumeration.

   - Report the stored creation time for symbolic links through statx()
     when querying the link itself with AT_SYMLINK_NOFOLLOW.

   - Use wider decompression offsets to avoid overflow on 64 KB pages,
     accept the standard sparse compression unit, and require the
     compressed-size field only on the first attribute extent. Block
     direct reads and skip readahead for encrypted files to prevent
     returning raw ciphertext.

   - Validate index entry offsets, logfile update sequence array counts,
     attribute-list sizes, and index collation key lengths to prevent
     out-of-bounds accesses, NULL pointer dereferences, and excessive
     allocations from corrupt volume metadata.

   - Derive FITRIM bitmap indexes from the page size and retain the full
     64-bit minimum discard length. Balance highmem mappings in logfile
     and MFT mirror checks and propagate specific errors from extent,
     attribute, and reparse operations.

   - Compare streams_interface with the mounted volume's setting during
     remount, make named-stream UAPI padding explicit, document stream
     access and Linux file attributes, and add the NTFS UAPI header to
     MAINTAINERS"

* tag 'ntfs-for-7.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/ntfs: (93 commits)
  ntfs: handle a failed size rollback in the write error path
  ntfs: fix u16 truncation of the update sequence array count check
  ntfs: reject index blocks with a too small entries offset
  ntfs: support persistent noatime attribute
  ntfs: roll back the ACL xattr commit when the WSL mode update fails
  ntfs: report birth time for symbolic links
  ntfs: support FS_IOC_GETFSUUID
  ntfs: avoid unnecessary padding in uapi structure
  ntfs: flush the block device when syncing a directory
  ntfs: report block device flush failures from fsync
  ntfs: fix NULL dereference on index allocation open failure
  ntfs: compare streams_interface with mounted volume on remount
  ntfs: widen the sub-block offsets in ntfs_decompress()
  ntfs: reject direct I/O reads of encrypted files
  ntfs: do not read ahead encrypted files
  ntfs: persist nodump in the $LINUXFLAGS EA
  ntfs: persist append-only in the $LINUXFLAGS EA
  ntfs: persist immutable in the $LINUXFLAGS EA
  ntfs: add fileattr query support
  ntfs: restore EA attributes when an update fails
  ...
2026-10-25 15:59:06 -10:00
..