ntfs_sync_fs() can be called while the filesystem remains mounted read-write, for example by sync(2) or periodic writeback. Clearing VOLUME_IS_DIRTY from that path marks the volume clean before the mount lifetime has ended. If the system crashes after sync_fs() clears the bit but before unmount or remount-read-only, the volume can be left looking clean even though a clean shutdown did not happen. Keep the dirty bit set during sync_fs(); the unmount and remount-read-only paths already clear it when no NTFS errors were seen. Fixes: 6251f0b0de7d ("ntfs: update super block operations") Signed-off-by: DaeMyung Kang --- fs/ntfs/super.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c index e8ecc52..024d363 100644 --- a/fs/ntfs/super.c +++ b/fs/ntfs/super.c @@ -1895,7 +1895,6 @@ static void ntfs_shutdown(struct super_block *sb) static int ntfs_sync_fs(struct super_block *sb, int wait) { struct ntfs_volume *vol = NTFS_SB(sb); - int err = 0; if (NVolShutdown(vol)) return -EIO; @@ -1903,15 +1902,10 @@ static int ntfs_sync_fs(struct super_block *sb, int wait) if (!wait) return 0; - /* If there are some dirty buffers in the bdev inode */ - if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY)) { - ntfs_warning(sb, "Failed to clear dirty bit in volume information flags. Run chkdsk."); - err = -EIO; - } sync_inodes_sb(sb); sync_blockdev(sb->s_bdev); blkdev_issue_flush(sb->s_bdev); - return err; + return 0; } /* -- 2.43.0