]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Always AFSInitFcb and AFSRemoveFcb
authorJeffrey Altman <jaltman@your-file-system.com>
Wed, 3 Oct 2012 01:07:21 +0000 (21:07 -0400)
committerJeffrey Altman <jaltman@your-file-system.com>
Fri, 19 Oct 2012 12:47:34 +0000 (05:47 -0700)
Instead of comparing ObjectInfo->Fcb to NULL and conditionally
calling AFSInitFcb() or AFSRemoveFcb(), always call them and use
InterlockedExchangePointer() as the test.

Change-Id: I81915dfdfdf180c04ad2b4ff7506784a83ee8c2a
Reviewed-on: http://gerrit.openafs.org/8221
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Rod Widdowson <rdw@steadingsoftware.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>
src/WINNT/afsrdr/kernel/lib/AFSCreate.cpp
src/WINNT/afsrdr/kernel/lib/AFSWorker.cpp

index 8f8d9949b681ac447354dfea73a2ba6bf079738c..b860829fc8e1c0a27806d27a4473764275459982 100644 (file)
@@ -2642,38 +2642,34 @@ AFSProcessOpen( IN PIRP Irp,
         // Be sure we have an Fcb for the current object
         //
 
-        if( pObjectInfo->Fcb == NULL)
-        {
+        ntStatus = AFSInitFcb( DirectoryCB);
 
-            ntStatus = AFSInitFcb( DirectoryCB);
+        if( !NT_SUCCESS( ntStatus))
+        {
 
-            if( !NT_SUCCESS( ntStatus))
-            {
+            AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
+                          AFS_TRACE_LEVEL_ERROR,
+                          "AFSProcessOpen (%08lX) Failed to init fcb on %wZ Status %08lX\n",
+                          Irp,
+                          &DirectoryCB->NameInformation.FileName,
+                          ntStatus);
 
-                AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
-                              AFS_TRACE_LEVEL_ERROR,
-                              "AFSProcessOpen (%08lX) Failed to init fcb on %wZ Status %08lX\n",
-                              Irp,
-                              &DirectoryCB->NameInformation.FileName,
-                              ntStatus);
+            try_return( ntStatus);
+        }
 
-                try_return( ntStatus);
-            }
+        if ( ntStatus != STATUS_REPARSE)
+        {
 
-            if ( ntStatus != STATUS_REPARSE)
-            {
+            bAllocatedFcb = TRUE;
+        }
 
-                bAllocatedFcb = TRUE;
-            }
+        ntStatus = STATUS_SUCCESS;
 
-            ntStatus = STATUS_SUCCESS;
-        }
-        else
-        {
+        //
+        // AFSInitFcb returns the Fcb resource held
+        //
 
-            AFSAcquireExcl( pObjectInfo->Fcb->Header.Resource,
-                            TRUE);
-        }
+        bReleaseFcb = TRUE;
 
         //
         // Increment the open count on this Fcb
@@ -2687,8 +2683,6 @@ AFSProcessOpen( IN PIRP Irp,
                       pObjectInfo->Fcb,
                       lCount);
 
-        bReleaseFcb = TRUE;
-
         //
         // Check access on the entry
         //
index 5e07af50f2a94ab26cbf31c2367977db096d4a2b..bb075acd769722fd59f3d94fce1aaa7a841ec261 100644 (file)
@@ -1174,20 +1174,12 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context)
                                 if ( pCurrentObject->ObjectReferenceCount <= 0)
                                 {
 
-                                    if( pCurrentObject->Fcb != NULL)
-                                    {
-
-                                        AFSRemoveFcb( &pCurrentObject->Fcb);
-                                    }
+                                    AFSRemoveFcb( &pCurrentObject->Fcb);
 
                                     if( pCurrentObject->Specific.Directory.PIOCtlDirectoryCB != NULL)
                                     {
 
-                                        if( pCurrentObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation->Fcb != NULL)
-                                        {
-
-                                            AFSRemoveFcb( &pCurrentObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation->Fcb);
-                                        }
+                                        AFSRemoveFcb( &pCurrentObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation->Fcb);
 
                                         AFSDeleteObjectInfo( pCurrentObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation);
 
@@ -1396,21 +1388,13 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context)
                                           pCurrentChildObject->Fcb->Specific.File.ExtentCount == 0))
                                     {
 
-                                        if( pCurrentChildObject->Fcb != NULL)
-                                        {
-                                        
-                                            AFSRemoveFcb( &pCurrentChildObject->Fcb);
-                                        }
+                                        AFSRemoveFcb( &pCurrentChildObject->Fcb);
 
                                         if( pCurrentChildObject->FileType == AFS_FILE_TYPE_DIRECTORY &&
                                             pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB != NULL)
                                         {
 
-                                            if( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation->Fcb != NULL)
-                                            {
-
-                                                AFSRemoveFcb( &pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation->Fcb);
-                                            }
+                                            AFSRemoveFcb( &pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation->Fcb);
 
                                             AFSDeleteObjectInfo( pCurrentChildObject->Specific.Directory.PIOCtlDirectoryCB->ObjectInformation);
 
@@ -1543,11 +1527,7 @@ AFSPrimaryVolumeWorkerThread( IN PVOID Context)
                               pCurrentObject->Fcb->Specific.File.ExtentCount == 0))
                         {
 
-                            if( pCurrentObject->Fcb != NULL)
-                            {
-
-                                AFSRemoveFcb( &pCurrentObject->Fcb);
-                            }
+                            AFSRemoveFcb( &pCurrentObject->Fcb);
 
                             AFSDeleteObjectInfo( pCurrentObject);
                         }