From ec0a5dd2e385e11839e8846dabe1f9f7042ac202 Mon Sep 17 00:00:00 2001 From: Hyunchul Lee Date: Mon, 21 Sep 2026 15:44:06 +0900 Subject: [PATCH] ntfs: serialize raw MFT updates against folio writeback Because MFT folio writeback can remain active until its asynchronous BIO completes, raw MFT record formatting and allocation must not modify the folio while it is still used as a BIO source. Wait for existing folio writeback after taking the folio lock in both raw MFT update paths. Fixes: 115380f9a2f9 ("ntfs: update mft operations") Cc: stable@vger.kernel.org Signed-off-by: Hyunchul Lee Signed-off-by: Namjae Jeon --- fs/ntfs/mft.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/ntfs/mft.c b/fs/ntfs/mft.c index b102e0204eba..c7577c322454 100644 --- a/fs/ntfs/mft.c +++ b/fs/ntfs/mft.c @@ -2022,6 +2022,8 @@ static int ntfs_mft_record_format(const struct ntfs_volume *vol, const s64 mft_n return PTR_ERR(folio); } folio_lock(folio); + if (folio_test_writeback(folio)) + folio_wait_writeback(folio); folio_clear_uptodate(folio); m = (struct mft_record *)((u8 *)kmap_local_folio(folio, 0) + ofs); err = ntfs_mft_record_layout(vol, mft_no, m); @@ -2539,6 +2541,8 @@ int ntfs_mft_record_alloc(struct ntfs_volume *vol, const int mode, goto undo_mftbmp_alloc; } folio_lock(folio); + if (folio_test_writeback(folio)) + folio_wait_writeback(folio); folio_clear_uptodate(folio); m = (struct mft_record *)((u8 *)kmap_local_folio(folio, 0) + ofs); /* If we just formatted the mft record no need to do it again. */