Windows: ObjectInformation.ObjectReferenceCount comparison
[openafs.git] / src / WINNT / afsrdr / kernel / lib / AFSClose.cpp
index a757bb2..469ba51 100644 (file)
@@ -285,6 +285,7 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject,
             case AFS_SYMBOLIC_LINK_FCB:
             case AFS_MOUNT_POINT_FCB:
             case AFS_DFS_LINK_FCB:
+            case AFS_INVALID_FCB:
             {
 
                 pCcb = (AFSCcb *)pIrpSp->FileObject->FsContext2;
@@ -393,7 +394,7 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject,
                         AFSDeleteDirEntry( pObjectInfo->ParentObjectInformation,
                                            pDirCB);
 
-                        if( pObjectInfo->ObjectReferenceCount == 0)
+                        if( pObjectInfo->ObjectReferenceCount <= 0)
                         {
 
                             if( BooleanFlagOn( pObjectInfo->Flags, AFS_OBJECT_INSERTED_HASH_TREE))
@@ -509,15 +510,13 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject,
                 else
                 {
 
-                    if( pFcb->Header.NodeTypeCode == AFS_FILE_FCB)
+                    if( pFcb->Header.NodeTypeCode == AFS_FILE_FCB &&
+                        pFcb->Specific.File.ExtentsDirtyCount &&
+                        (pCcb->GrantedAccess & FILE_WRITE_DATA))
                     {
 
-                        if( pFcb->Specific.File.ExtentsDirtyCount)
-                        {
-
-                            AFSFlushExtents( pFcb,
-                                             &pCcb->AuthGroup);
-                        }
+                        AFSFlushExtents( pFcb,
+                                         &pCcb->AuthGroup);
                     }
 
                     AFSReleaseResource( &pFcb->NPFcb->Resource);