(*ppObjectInfo)->FileId.Vnode,
(*ppObjectInfo)->FileId.Unique));
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInvalidateObject Flush/purge Acquiring Fcb lock %p EXCL %08lX\n",
+ &(*ppObjectInfo)->Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ AFSAcquireExcl( &(*ppObjectInfo)->Fcb->NPFcb->Resource,
+ TRUE);
+
AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSInvalidateObject Flush/purge Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
AFSReleaseResource( &(*ppObjectInfo)->Fcb->NPFcb->SectionObjectResource);
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSInvalidateObject Flush/purge Releasing Fcb lock %p EXCL %08lX\n",
+ &(*ppObjectInfo)->Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ AFSReleaseResource( &(*ppObjectInfo)->Fcb->NPFcb->Resource);
+
//
// Clear out the extents
// Get rid of them (note this involves waiting
pObjectInfo->FileId.Vnode,
pObjectInfo->FileId.Unique));
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSVerifyEntry Acquiring Fcb lock %p EXCL %08lX\n",
+ &pObjectInfo->Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ AFSAcquireExcl( &pObjectInfo->Fcb->NPFcb->Resource,
+ TRUE);
+
AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSVerifyEntry Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->SectionObjectResource);
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSVerifyEntry Releasing Fcb lock %p EXCL %08lX\n",
+ &pObjectInfo->Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ AFSReleaseResource( &pObjectInfo->Fcb->NPFcb->Resource);
+
AFSFlushExtents( pObjectInfo->Fcb,
AuthGroup);
AFSAcquireExcl( &pCurrentFcb->NPFcb->SectionObjectResource,
TRUE);
- //
- // Release Fcb->Resource to avoid Trend Micro deadlock
- //
-
- AFSReleaseResource( &pCurrentFcb->NPFcb->Resource);
-
- bReleaseFcb = FALSE;
-
__try
{
SetFlag( pObjectInfo->Flags, AFS_OBJECT_FLAGS_VERIFY_DATA);
}
+ }
+ if (bReleaseFcb)
+ {
AFSReleaseResource( &pCurrentFcb->NPFcb->Resource);
bReleaseFcb = FALSE;
AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCleanupEntry Acquiring Fcb lock %p SHARED %08lX\n",
+ "AFSCleanupEntry Acquiring Fcb lock %p EXCL %08lX\n",
&Fcb->NPFcb->Resource,
PsGetCurrentThread()));
- AFSAcquireShared( &Fcb->NPFcb->Resource,
+ AFSAcquireExcl( &Fcb->NPFcb->Resource,
TRUE);
if( Fcb->OpenReferenceCount > 0)
AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
- "AFSCleanupEntry Releasing Fcb lock %p SHARED %08lX\n",
+ "AFSCleanupEntry Releasing Fcb lock %p EXCL %08lX\n",
&Fcb->NPFcb->Resource,
PsGetCurrentThread()));
(AFS_SERVER_PURGE_SLEEP * pControlDeviceExt->Specific.Control.FcbPurgeTimeCount.QuadPart))))
{
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCleanupFcb Acquiring Fcb lock %p EXCL %08lX\n",
+ &Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ if ( AFSAcquireExcl( &Fcb->NPFcb->Resource, ForceFlush) == FALSE)
+ {
+
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCleanupFcb Failed to Acquire Fcb lock %p EXCL %08lX\n",
+ &Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ try_return( ntStatus = STATUS_RETRY);
+ }
+
AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING|AFS_SUBSYSTEM_SECTION_OBJECT,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanupFcb Acquiring Fcb SectionObject lock %p EXCL %08lX\n",
AFSReleaseResource( &Fcb->NPFcb->SectionObjectResource);
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCleanupFcb Releasing Fcb lock %p EXCL %08lX\n",
+ &Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ AFSReleaseResource( &Fcb->NPFcb->Resource);
+
if( Fcb->OpenReferenceCount <= 0)
{
&Fcb->NPFcb->SectionObjectResource,
PsGetCurrentThread()));
+ AFSDbgTrace(( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCleanupFcb Releasing Fcb lock %p EXCL %08lX\n",
+ &Fcb->NPFcb->Resource,
+ PsGetCurrentThread()));
+
+ AFSReleaseResource( &Fcb->NPFcb->Resource);
+
ntStatus = STATUS_RETRY;
}
}
AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
- __try
+ __try
{
if( ObjectInfo->Fcb->NPFcb->SectionObjectPointers.DataSectionObject != NULL &&
AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
- AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource);
-
- bLocked = FALSE;
-
__try
{
PsGetCurrentThread()));
AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->SectionObjectResource);
+
+ AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource);
+
+ bLocked = FALSE;
}
}
else
AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->SectionObjectResource,
TRUE);
- AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource);
-
- bLocked = FALSE;
-
//
// Must build a list of non-dirty ranges from the beginning of the file
// to the end. There can be at most (Fcb->Specific.File.ExtentsDirtyCount + 1)
PsGetCurrentThread()));
AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->SectionObjectResource);
+
+ AFSReleaseResource( &ObjectInfo->Fcb->NPFcb->Resource);
+
+ bLocked = FALSE;
}
}