Windows: AFSCleanup Flush Data decision
[openafs.git] / src / WINNT / afsrdr / kernel / lib / AFSCleanup.cpp
index 8c2eaf6..3e370ab 100644 (file)
@@ -462,6 +462,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject,
 
                         SetFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_DELETED);
 
+                        ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
+
                         pParentObjectInfo = pObjectInfo->ParentObjectInformation;
 
                         ASSERT( pParentObjectInfo != NULL);
@@ -548,6 +550,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject,
 
                         AFSFlushExtents( pFcb,
                                          &pCcb->AuthGroup);
+
+                        ulNotificationFlags |= AFS_REQUEST_FLAG_FLUSH_FILE;
                     }
 
                     if( pFcb->OpenHandleCount == 1)
@@ -559,8 +563,6 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject,
 
                         AFSWaitOnQueuedFlushes( pFcb);
 
-                        ulNotificationFlags |= AFS_REQUEST_FLAG_FLUSH_FILE;
-
                         AFSTearDownFcbExtents( pFcb,
                                                &pCcb->AuthGroup);
                     }
@@ -658,7 +660,7 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject,
                     // The ObjectReferenceCount will be freed by AFSPerformObjectInvalidate
                     //
 
-                    InterlockedIncrement( &pObjectInfo->ObjectReferenceCount);
+                    AFSObjectInfoIncrement( pObjectInfo);
 
                     ClearFlag( pFcb->Flags, AFS_FCB_FLAG_PURGE_ON_CLOSE);
 
@@ -818,6 +820,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject,
 
                         SetFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_DELETED);
 
+                        ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
+
                         pParentObjectInfo = pObjectInfo->ParentObjectInformation;
 
                         ASSERT( pParentObjectInfo != NULL);
@@ -1126,6 +1130,8 @@ AFSCleanup( IN PDEVICE_OBJECT LibDeviceObject,
 
                         SetFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_DELETED);
 
+                        ClearFlag( pCcb->DirectoryCB->Flags, AFS_DIR_ENTRY_PENDING_DELETE);
+
                         pParentObjectInfo = pObjectInfo->ParentObjectInformation;
 
                         ASSERT( pParentObjectInfo != NULL);
@@ -1361,7 +1367,7 @@ try_exit:
         if( pResultCB != NULL)
         {
 
-            AFSExFreePool( pResultCB);
+            AFSExFreePoolWithTag( pResultCB, AFS_GENERIC_MEMORY_32_TAG);
         }
 
         if( pFileObject != NULL)