summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaeMyung Kang <charsyam@gmail.com>2026-05-01 02:20:55 +0900
committerNamjae Jeon <linkinjeon@kernel.org>2026-05-08 23:50:49 +0900
commit618c991cdf031925b09cbb1117f613abdb068680 (patch)
treedb9c576d0855ef8c8ee735b39e7a7351995751b0
parent49c12bee2bb2604e82a997521175b85ca5421685 (diff)
ntfs: capture mft mirror sync errors in ntfs_write_mft_block()
After ntfs_sync_mft_mirror() became able to return real I/O errors, ntfs_write_mft_block() still discards its return value at the call site inside the per-record loop. A failed $MFTMirr write therefore leaves the volume looking clean from the writeback path even though the on-disk mirror is now stale. Capture the return value and feed it into the function's existing @err variable using the same "first error wins" pattern already used on other failure paths. The error is propagated to the caller and, via the existing tail of the function, sets NVolErrors so umount and chkdsk see the volume as inconsistent. Fixes: 115380f9a2f9 ("ntfs: update mft operations") Signed-off-by: DaeMyung Kang <charsyam@gmail.com> Reviewed-by: Hyunchul Lee <hyc.lee@gmail.com> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
-rw-r--r--fs/ntfs/mft.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c
index f5017f337068..f5186a19dffc 100644
--- a/fs/ntfs/mft.c
+++ b/fs/ntfs/mft.c
@@ -2843,9 +2843,13 @@ flush_bio:
}
prev_mft_ofs = mft_ofs;
- if (mft_no < vol->mftmirr_size)
- ntfs_sync_mft_mirror(vol, mft_no,
+ if (mft_no < vol->mftmirr_size) {
+ int sub_err = ntfs_sync_mft_mirror(vol, mft_no,
(struct mft_record *)(kaddr + mft_ofs));
+
+ if (unlikely(sub_err) && !err)
+ err = sub_err;
+ }
} else if (ref_inos[nr_ref_inos])
nr_ref_inos++;
}