From: Chaskiel M Grundman Date: Thu, 1 Nov 2007 03:23:09 +0000 (+0000) Subject: linux-afs-unlinked-file-dentry-flagging-20071031 X-Git-Tag: BP-openafs-windows-kdfs-ifs~396 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=c5678a4af78305cac2246480cc0c038655db324d;p=packages%2Fo%2Fopenafs.git linux-afs-unlinked-file-dentry-flagging-20071031 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]");' --- diff --git a/src/afs/LINUX/osi_vnodeops.c b/src/afs/LINUX/osi_vnodeops.c index 028511e95..93bba1cef 100644 --- a/src/afs/LINUX/osi_vnodeops.c +++ b/src/afs/LINUX/osi_vnodeops.c @@ -896,6 +896,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); } @@ -1131,6 +1140,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); }