Re: [PATCH v13 0/7] ntfs: fix volume flag races and persist the recorded error state

From: Hyunchul Lee

Date: Tue Sep 15 2026 - 20:44:58 EST


This patch set looks good to me.

For whole series:

Reviewed-by: Hyunchul Lee <hyc.lee@xxxxxxxxx>

2026년 9월 15일 (화) 오후 5:33, Hongling Zeng <zenghongling@xxxxxxxxxx>님이 작성:
>
> Hi all,
>
> The fs/ntfs runtime metadata-corruption paths only record the in-memory
> NVolErrors() flag, and the dirty-bit persistence used to race with
> ntfs_sync_fs(): a volume could end up with a clean on-disk dirty flag
> despite modification or recorded corruption, so chkdsk would not run on
> the next mount. This series fixes that.
>
> 1/6 makes the volume flag read-modify-write atomic under the
> $Volume mrec_lock;
> 2/6 marks the volume dirty unconditionally on metadata changes,
> dropping the racy caller-side checks in file.c and namei.c;
> 3/6 derives the on-disk dirty bit from the recorded error state at
> the persistence points (sync_fs, remount-ro, put_super) and never
> writes a hibernated volume;
> 4/6 persists the dirty state after the final put_super() commits so
> late errors cannot unmount clean;
> 5/6 stops ntfs_sync_fs() from clearing VOLUME_IS_DIRTY: the clearing
> moves to the quiescent transitions, a recorded error state is
> still persisted at sync time, and sync now reports writeback and
> flush errors instead of discarding them;
> 6/6 checks the dirty-state commit on remount and unmount.
> 7/7 ntfs: fail remount on sync errors and keep the dirty bit on
> SB_FORCE
>
> Changes in this revision, from the review:
>
> - 5/6: with the clearing gone from the sync path, a recorded error
> state is persisted without ever clearing the bit, and
> sync_blockdev() and blkdev_issue_flush() are both called with the
> first error returned.
>
> - The IOCB_NOWAIT behavior and the per-operation $Volume mrec_lock
> acquisition are outside the scope of this series. The series keeps
> the unconditional ntfs_set_volume_flags() call to preserve the
> ordering that marks the volume dirty before the metadata
> modification; a RWF_NOWAIT write still blocks in the marking when
> the volume looks clean, as it already did on the base. The
> non-blocking and contended-lock handling (mutex_trylock, GFP_NOWAIT)
> will be addressed in a separate follow-up patch.
>
> Hongling Zeng (4):
> ntfs: fix volume flag update races
> ntfs: set the volume dirty bit unconditionally on metadata changes
> ntfs: sync the volume dirty bit with the recorded error state
> ntfs: persist the dirty state after the final put_super() commits
>
> fs/ntfs/file.c | 20 ++---
> fs/ntfs/namei.c | 24 ++----
> fs/ntfs/ntfs.h | 1 -
> fs/ntfs/super.c | 191 ++++++++++++++++++++++++++++++++++++-----------
> fs/ntfs/volume.h | 4 +
> 5 files changed, 171 insertions(+), 69 deletions(-)
>
> --
> 2.25.1
>


--
Thanks,
Hyunchul