Re: [PATCH] ntfs: do not mark the volume clean in sync_fs when errors were recorded

From: Hyunchul Lee

Date: Tue Aug 25 2026 - 00:32:01 EST


2026년 8월 24일 (월) 오후 2:08, Dennis Tighe <dennis.tighe@xxxxxxxxx>님이 작성:
>
> ntfs_put_super() and the remount-read-only path both clear the dirty bit
> only when NVolErrors(vol) is false. ntfs_sync_fs() clears it
> unconditionally, so any sync() on a volume that recorded an error marks
> that volume clean. A volume without this set is then seen as not needing
> recovery and it does not run one, so whatever went wrong is never repaired.
>
> This change skips resetting the dirty bit when there are volume errors.
>
> Reproduced on a volume whose $MFTMirr does not match $MFT, which sets the
> error flag while leaving the mount read-write: after a write and a sync,
> the on-disk volume flags read 0x0000 with this driver and 0x0001 with the
> guard in place.
>
> Fixes: 6251f0b0de7d ("ntfs: update super block operations")
> Assisted-by: claude:claude-opus-5
> Signed-off-by: Dennis Tighe <dennis.tighe@xxxxxxxxx>

Looks good to me.

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

> ---
> fs/ntfs/super.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
> index 30481e5d5dd4..a4dc64fb89ed 100644
> --- a/fs/ntfs/super.c
> +++ b/fs/ntfs/super.c
> @@ -1862,7 +1862,8 @@ static int ntfs_sync_fs(struct super_block *sb, int wait)
> return 0;
>
> /* If there are some dirty buffers in the bdev inode */
> - if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY)) {
> + if (!NVolErrors(vol) &&
> + ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY)) {
> ntfs_warning(sb, "Failed to clear dirty bit in volume information flags. Run chkdsk.");
> err = -EIO;
> }
> --
> 2.43.0
>


--
Thanks,
Hyunchul