]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Windows: Test NameArrayReferenceCount before deletion
authorJeffrey Altman <jaltman@your-file-system.com>
Mon, 25 Feb 2013 05:17:46 +0000 (00:17 -0500)
committerJeffrey Altman <jaltman@your-file-system.com>
Mon, 25 Feb 2013 16:03:29 +0000 (08:03 -0800)
In commit c753d398f2005c886932f20b49af15efc489a829 the
AFSDirectoryCB.DirOpenReferenceCount was split and the
NameArrayReferenceCount field was added.  However, it failed to modify all
of the DirOpenReferenceCount checks prior to calling AFSDeleteDirEntry()
to include a check on the NameArrayReferenceCount.  This patchset corrects
that oversight.

Change-Id: I8db1a68e5240088bcfeb226bd1eafac0c83a0b69
Reviewed-on: http://gerrit.openafs.org/9254
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Jeffrey Altman <jaltman@your-file-system.com>
Tested-by: Jeffrey Altman <jaltman@your-file-system.com>
src/WINNT/afsrdr/kernel/lib/AFSClose.cpp
src/WINNT/afsrdr/kernel/lib/AFSCommSupport.cpp
src/WINNT/afsrdr/kernel/lib/AFSFileInfo.cpp
src/WINNT/afsrdr/kernel/lib/AFSGeneric.cpp
src/WINNT/afsrdr/kernel/lib/AFSNameSupport.cpp

index 2cad934c4d93055c58458f55af54c676637eebdb..e18459cefa39428df7f0c61dbfe8b58828fbe115 100644 (file)
@@ -398,7 +398,8 @@ AFSClose( IN PDEVICE_OBJECT LibDeviceObject,
 
                         ASSERT( lCount >= 0);
 
-                        if( lCount == 0)
+                        if( lCount == 0 &&
+                            pDirCB->NameArrayReferenceCount <= 0)
                         {
 
                             AFSDbgLogMsg( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
index 57186c704963b4a64978b0ca59eedf82553f9328..b6f729a8a69f92009aca3a8e4a4ac5f3fa9c2c77 100644 (file)
@@ -347,7 +347,8 @@ AFSEnumerateDirectory( IN GUID *AuthGroup,
                         // Need to tear down this entry and rebuild it below
                         //
 
-                        if( pDirNode->DirOpenReferenceCount <= 0)
+                        if( pDirNode->DirOpenReferenceCount <= 0 &&
+                            pDirNode->NameArrayReferenceCount <= 0)
                         {
 
                             AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -1183,7 +1184,8 @@ AFSVerifyDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB,
                     // Need to tear down this entry and rebuild it below
                     //
 
-                    if( pDirNode->DirOpenReferenceCount <= 0)
+                    if( pDirNode->DirOpenReferenceCount <= 0 &&
+                        pDirNode->NameArrayReferenceCount <= 0)
                     {
 
                         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -1713,7 +1715,8 @@ AFSNotifyFileCreate( IN GUID            *AuthGroup,
                                   pResultCB->DirEnum.FileId.Vnode,
                                   pResultCB->DirEnum.FileId.Unique);
 
-                    if( pDirNode->DirOpenReferenceCount <= 0)
+                    if( pDirNode->DirOpenReferenceCount <= 0 &&
+                        pDirNode->NameArrayReferenceCount <= 0)
                     {
 
                         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -2321,7 +2324,8 @@ AFSNotifyHardLink( IN AFSObjectInfoCB *ObjectInfo,
                                   pResultCB->DirEnum.FileId.Vnode,
                                   pResultCB->DirEnum.FileId.Unique);
 
-                    if( pDirNode->DirOpenReferenceCount <= 0)
+                    if( pDirNode->DirOpenReferenceCount <= 0 &&
+                        pDirNode->NameArrayReferenceCount <= 0)
                     {
 
                         AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
index 114037c6225f92a27cc1868678cce16ae51c6c01..e4782d3aa8f603a84ddc0ae25f7180107b4a6f75 100644 (file)
@@ -3265,7 +3265,8 @@ AFSSetRenameInfo( IN PIRP Irp)
 
             ASSERT( lCount >= 0);
 
-            if( lCount == 0)
+            if( lCount == 0 &&
+                pTargetDirEntry->NameArrayReferenceCount <= 0)
             {
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
index 2cf364488505c784d0ed1b0c59191b52b973bbcb..7c31ecf637373b26e49245de691959a5b3f2d4de 100644 (file)
@@ -3465,7 +3465,8 @@ AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
                 //
 
                 if( BooleanFlagOn( pCurrentDirEntry->Flags, AFS_DIR_ENTRY_DELETED) &&
-                    pCurrentDirEntry->DirOpenReferenceCount <= 0)
+                    pCurrentDirEntry->DirOpenReferenceCount <= 0 &&
+                    pCurrentDirEntry->NameArrayReferenceCount <= 0)
                 {
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -3594,7 +3595,8 @@ AFSValidateDirectoryCache( IN AFSObjectInfoCB *ObjectInfo,
                           pCurrentDirEntry,
                           pCurrentDirEntry->DirOpenReferenceCount);
 
-            if( pCurrentDirEntry->DirOpenReferenceCount <= 0)
+            if( pCurrentDirEntry->DirOpenReferenceCount <= 0 &&
+                pCurrentDirEntry->NameArrayReferenceCount <= 0)
             {
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,
@@ -4717,7 +4719,8 @@ AFSResetDirectoryContent( IN AFSObjectInfoCB *ObjectInfoCB)
 
             pNextDirEntry = (AFSDirectoryCB *)pCurrentDirEntry->ListEntry.fLink;
 
-            if( pCurrentDirEntry->DirOpenReferenceCount <= 0)
+            if( pCurrentDirEntry->DirOpenReferenceCount <= 0 &&
+                pCurrentDirEntry->NameArrayReferenceCount <= 0)
             {
 
                 AFSDbgLogMsg( AFS_SUBSYSTEM_CLEANUP_PROCESSING,
index 0e077223a9be145a3a506c901fa6af6014420373..8581153a5052143d0d7d72b21252bf2f6d8771f3 100644 (file)
@@ -1914,7 +1914,8 @@ AFSLocateNameEntry( IN GUID *AuthGroup,
 
                 ASSERT( lCount >= 0);
 
-                if( lCount == 0)
+                if( lCount == 0 &&
+                    pDirEntry->NameArrayReferenceCount <= 0)
                 {
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING|AFS_SUBSYSTEM_CLEANUP_PROCESSING,
@@ -2445,7 +2446,8 @@ AFSCreateDirEntry( IN GUID            *AuthGroup,
                 // Need to tear down this entry and rebuild it below
                 //
 
-                if( pExistingDirNode->DirOpenReferenceCount <= 0)
+                if( pExistingDirNode->DirOpenReferenceCount <= 0 &&
+                    pExistingDirNode->NameArrayReferenceCount <= 0)
                 {
 
                     AFSDbgLogMsg( AFS_SUBSYSTEM_FILE_PROCESSING,