]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
STABLE14-linux-afs-unlinked-file-dentry-flagging-20071031
authorChaskiel M Grundman <cg2v@andrew.cmu.edu>
Thu, 1 Nov 2007 03:33:14 +0000 (03:33 +0000)
committerDerrick Brashear <shadow@dementia.org>
Thu, 1 Nov 2007 03:33:14 +0000 (03:33 +0000)
fix case:
 perl -e 'open FOO, ">foo"; unlink(foo); @stat = stat(FOO); print "inode for foo(unlinked) is $stat[1]\n"; system("/bin/ls -ali | grep $stat[1]");'

(cherry picked from commit c5678a4af78305cac2246480cc0c038655db324d)

src/afs/LINUX/osi_vnodeops.c

index a9da75655af2a66c11a92d1e639316e90fe64632..8b315558ee7827ff368563eb65161f0f3f49936a 100644 (file)
@@ -878,6 +878,15 @@ afs_dentry_iput(struct dentry *dp, struct inode *ip)
     AFS_GLOCK();
     (void) afs_InactiveVCache(vcp, NULL);
     AFS_GUNLOCK();
+#ifdef DCACHE_NFSFS_RENAMED
+#ifdef AFS_LINUX26_ENV
+    spin_lock(&dp->d_lock);
+#endif
+    dp->d_flags &= ~DCACHE_NFSFS_RENAMED;   
+#ifdef AFS_LINUX26_ENV
+    spin_unlock(&dp->d_lock);
+#endif
+#endif
 
     iput(ip);
 }
@@ -1095,6 +1104,15 @@ afs_linux_unlink(struct inode *dip, struct dentry *dp)
             }
             tvc->uncred = credp;
            tvc->states |= CUnlinked;
+#ifdef DCACHE_NFSFS_RENAMED
+#ifdef AFS_LINUX26_ENV
+           spin_lock(&dp->d_lock);
+#endif
+           dp->d_flags |= DCACHE_NFSFS_RENAMED;   
+#ifdef AFS_LINUX26_ENV
+           spin_unlock(&dp->d_lock);
+#endif
+#endif
        } else {
            osi_FreeSmallSpace(__name); 
        }