From: Jeffrey Altman Date: Tue, 23 Oct 2012 00:40:21 +0000 (-0400) Subject: Windows: AFSMarkDirty() require ExtentsResource held X-Git-Tag: upstream/1.8.0_pre1^2~1885 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=c33c678760e254e67037d62e38f6eedc139eaf6f;p=packages%2Fo%2Fopenafs.git Windows: AFSMarkDirty() require ExtentsResource held Instead of dynamically testing if the ExtentsResource is held and if not acquire it within AFSMarkDirty(), simply require that it be held. AFSMarkDirty() is only called from one location. Change-Id: If30fc05fead4c9e0604555239e9b862659de3e8b Reviewed-on: http://gerrit.openafs.org/8304 Tested-by: BuildBot Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp b/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp index a5c298400..3862c6110 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSExtentsSupport.cpp @@ -3363,7 +3363,6 @@ AFSMarkDirty( IN AFSFcb *Fcb, ULONG ulCount = 0; BOOLEAN bInsertTail = FALSE, bInsertHead = FALSE; LONG lCount; - BOOLEAN bLocked = FALSE; AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING, AFS_TRACE_LEVEL_VERBOSE, @@ -3371,11 +3370,7 @@ AFSMarkDirty( IN AFSFcb *Fcb, &Fcb->NPFcb->Specific.File.ExtentsResource, PsGetCurrentThread()); - if( !ExIsResourceAcquiredLite( &Fcb->NPFcb->Specific.File.ExtentsResource)) - { - AFSAcquireShared( &Fcb->NPFcb->Specific.File.ExtentsResource, TRUE); - bLocked = TRUE; - } + ASSERT( ExIsResourceAcquiredLite( &pNPFcb->Specific.File.ExtentsResource)); AFSAcquireExcl( &pNPFcb->Specific.File.DirtyExtentsListLock, TRUE); @@ -3537,11 +3532,6 @@ AFSMarkDirty( IN AFSFcb *Fcb, &Fcb->NPFcb->Specific.File.ExtentsResource, PsGetCurrentThread()); - if( bLocked) - { - AFSReleaseResource( &Fcb->NPFcb->Specific.File.ExtentsResource ); - } - return; } diff --git a/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp b/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp index 6f528b458..b5232b493 100644 --- a/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp +++ b/src/WINNT/afsrdr/kernel/lib/AFSWrite.cpp @@ -1301,6 +1301,14 @@ try_exit: Irp->IoStatus.Information > 0) { + if ( !bLocked) + { + + AFSAcquireShared( &pFcb->NPFcb->Specific.File.ExtentsResource, + TRUE); + bLocked = TRUE; + } + // // Since this is dirty we can mark the extents dirty now. // AFSMarkDirty will dereference the extents. Do not call