https://git.reactos.org/?p=reactos.git;a=commitdiff;h=30b836bf3f48055deceb5e...
commit 30b836bf3f48055deceb5e1a5100921d40cad073 Author: Pierre Schweitzer pierre@reactos.org AuthorDate: Mon May 21 10:28:44 2018 +0200 Commit: Pierre Schweitzer pierre@reactos.org CommitDate: Mon May 21 10:30:14 2018 +0200
[FASTFAT] When extending a file, also lock the DirResource.
This avoids race conditions under high IOs and thus corruption on the FS, or assertions failures in the kernel. Easily triggered by building ReactOS on ReactOS ;-). --- drivers/filesystems/fastfat/rw.c | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/drivers/filesystems/fastfat/rw.c b/drivers/filesystems/fastfat/rw.c index 76ffff933c..ad65628876 100644 --- a/drivers/filesystems/fastfat/rw.c +++ b/drivers/filesystems/fastfat/rw.c @@ -1064,9 +1064,18 @@ VfatWrite( ByteOffset.u.LowPart + Length > Fcb->RFCB.FileSize.u.LowPart) { LARGE_INTEGER AllocationSize; + + if (!ExAcquireResourceExclusiveLite(&IrpContext->DeviceExt->DirResource, CanWait)) + { + goto ByeBye; + } + AllocationSize.QuadPart = ByteOffset.u.LowPart + Length; Status = VfatSetAllocationSizeInformation(IrpContext->FileObject, Fcb, IrpContext->DeviceExt, &AllocationSize); + + ExReleaseResourceLite(&IrpContext->DeviceExt->DirResource); + if (!NT_SUCCESS (Status)) { goto ByeBye;