BooleanFlagOn( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE))
{
- //
- // Stop anything possibly in process
- //
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSCleanup Acquiring Fcb extents lock %08lX EXCL %08lX\n",
- &pFcb->NPFcb->Specific.File.ExtentsResource,
- PsGetCurrentThread());
-
- AFSAcquireExcl( &pFcb->NPFcb->Specific.File.ExtentsResource,
- TRUE);
-
- pFcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_FILE_DELETED;
-
- KeSetEvent( &pFcb->NPFcb->Specific.File.ExtentsRequestComplete,
- 0,
- FALSE);
-
- //
- // Before telling the server about the deleted file, tear down all extents for
- // the file
- //
-
- AFSTearDownFcbExtents( pFcb,
- &pCcb->AuthGroup);
-
- AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
- AFS_TRACE_LEVEL_VERBOSE,
- "AFSCleanup Releasing Fcb extents lock %08lX EXCL %08lX\n",
- &pFcb->NPFcb->Specific.File.ExtentsResource,
- PsGetCurrentThread());
-
- AFSReleaseResource( &pFcb->NPFcb->Specific.File.ExtentsResource);
-
ntStatus = STATUS_SUCCESS;
ulNotificationFlags |= AFS_REQUEST_FLAG_FILE_DELETED;
ntStatus = STATUS_SUCCESS;
+ if ( --pObjectInfo->Links < 1)
+ {
+
+ //
+ // Stop anything possibly in process
+ //
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCleanup Acquiring Fcb extents lock %08lX EXCL %08lX\n",
+ &pFcb->NPFcb->Specific.File.ExtentsResource,
+ PsGetCurrentThread());
+
+ AFSAcquireExcl( &pFcb->NPFcb->Specific.File.ExtentsResource,
+ TRUE);
+
+ pFcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_FILE_DELETED;
+
+ KeSetEvent( &pFcb->NPFcb->Specific.File.ExtentsRequestComplete,
+ 0,
+ FALSE);
+
+ //
+ // Before telling the server about the deleted file, tear down all extents for
+ // the file
+ //
+
+ AFSTearDownFcbExtents( pFcb,
+ &pCcb->AuthGroup);
+
+ AFSDbgLogMsg( AFS_SUBSYSTEM_LOCK_PROCESSING,
+ AFS_TRACE_LEVEL_VERBOSE,
+ "AFSCleanup Releasing Fcb extents lock %08lX EXCL %08lX\n",
+ &pFcb->NPFcb->Specific.File.ExtentsResource,
+ PsGetCurrentThread());
+
+ AFSReleaseResource( &pFcb->NPFcb->Specific.File.ExtentsResource);
+ }
+
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFS_TRACE_LEVEL_VERBOSE,
"AFSCleanup Setting DELETE flag in file %wZ Dir Entry %p\n",
pObjectInfoCB->EaSize = DirEnumEntry->EaSize;
//
- // Object specific information
- //
-
- pObjectInfoCB->Links = DirEnumEntry->Links;
-
- pObjectInfoCB->Expiration = DirEnumEntry->Expiration;
-
- pObjectInfoCB->DataVersion = DirEnumEntry->DataVersion;
-
- //
// Check for the case where we have a filetype of SymLink but both the TargetFid and the
// TargetName are empty. In this case set the filetype to zero so we evaluate it later in
// the code
}
}
+ //
+ // Object specific information
+ //
+
+ pObjectInfoCB->Links = DirEnumEntry->Links;
+
+ pObjectInfoCB->Expiration = DirEnumEntry->Expiration;
+
+ pObjectInfoCB->DataVersion = DirEnumEntry->DataVersion;
+
try_exit:
if( !NT_SUCCESS( ntStatus))
// Mark this node as invalid
//
+ (*ppObjectInfo)->Links = 0;
+
SetFlag( (*ppObjectInfo)->Flags, AFS_OBJECT_FLAGS_DELETED);
AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
AFSAcquireExcl( &ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsResource,
TRUE);
+ ObjectInfo->Links = 0;
+
ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsRequestStatus = STATUS_FILE_DELETED;
KeSetEvent( &ObjectInfo->Fcb->NPFcb->Specific.File.ExtentsRequestComplete,