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: 115380f9a2 ("ntfs: update mft operations")
Cc: stable@vger.kernel.org
Signed-off-by: Hyunchul Lee <hyc.lee@gmail.com>
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
Hyunchul Lee 2026-09-21 15:44:06 +09:00 committed by Namjae Jeon
parent b9fa884a39
commit ec0a5dd2e3

View File

@ -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. */