From: Jeffrey Altman Date: Mon, 16 Apr 2012 18:47:38 +0000 (-0400) Subject: Windows: Hold PagingResource across ExtendingWrite X-Git-Tag: upstream/1.8.0_pre1^2~2518 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=fd161ec0e474485c6a1a43019b802e3b663098df;p=packages%2Fo%2Fopenafs.git Windows: Hold PagingResource across ExtendingWrite When the file allocation size changes the PagingResource must be held exclusively to prevent races. Change-Id: I6ff3a2061563dbb858bb284b463913f6d3b33e7a Reviewed-on: http://gerrit.openafs.org/7223 Reviewed-by: Peter Scott Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp b/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp index 5a94875f8..a9b5225fd 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp @@ -1657,6 +1657,15 @@ AFSExtendingWrite( IN AFSFcb *Fcb, NTSTATUS ntStatus = STATUS_SUCCESS; AFSCcb *pCcb = (AFSCcb *)FileObject->FsContext2; + AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING, + AFS_TRACE_LEVEL_VERBOSE, + "AFSExtendingWrite Acquiring Fcb PagingIo lock %08lX EXCL %08lX\n", + &Fcb->NPFcb->PagingResource, + PsGetCurrentThread()); + + AFSAcquireExcl( &Fcb->NPFcb->PagingResource, + TRUE); + if( NewLength > Fcb->Header.AllocationSize.QuadPart) { @@ -1681,12 +1690,6 @@ AFSExtendingWrite( IN AFSFcb *Fcb, Fcb->ObjectInformation, &pCcb->AuthGroup); - AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING, - AFS_TRACE_LEVEL_VERBOSE, - "AFSExtendingWrite Acquiring Fcb lock %08lX EXCL %08lX\n", - &Fcb->NPFcb->Resource, - PsGetCurrentThread()); - if (NT_SUCCESS(ntStatus)) { @@ -1710,6 +1713,8 @@ AFSExtendingWrite( IN AFSFcb *Fcb, Fcb->Header.AllocationSize = liSaveAllocation; } + AFSReleaseResource( &Fcb->NPFcb->PagingResource); + // // DownConvert file resource to shared //