Author: jhb
Date: Fri Mar  2 18:55:19 2012
New Revision: 232401
URL: http://svn.freebsd.org/changeset/base/232401

Log:
  Similar to the fixes in 226967 and 226987, purge any name cache entries
  associated with the previous vnode (if any) associated with the target of
  a rename().  Otherwise, a lookup of the target pathname concurrent with a
  rename() could re-add a name cache entry after the namei(RENAME) lookup
  in kern_renameat() had purged the target pathname.
  
  MFC after:    2 weeks

Modified:
  head/sys/fs/tmpfs/tmpfs_vnops.c
  head/sys/ufs/ufs/ufs_vnops.c

Modified: head/sys/fs/tmpfs/tmpfs_vnops.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_vnops.c     Fri Mar  2 18:18:14 2012        
(r232400)
+++ head/sys/fs/tmpfs/tmpfs_vnops.c     Fri Mar  2 18:55:19 2012        
(r232401)
@@ -1135,6 +1135,8 @@ tmpfs_rename(struct vop_rename_args *v)
                tmpfs_free_dirent(VFS_TO_TMPFS(tvp->v_mount), de, TRUE);
        }
        cache_purge(fvp);
+       if (tvp != NULL)
+               cache_purge(tvp);
 
        error = 0;
 

Modified: head/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- head/sys/ufs/ufs/ufs_vnops.c        Fri Mar  2 18:18:14 2012        
(r232400)
+++ head/sys/ufs/ufs/ufs_vnops.c        Fri Mar  2 18:55:19 2012        
(r232401)
@@ -1534,8 +1534,15 @@ relock:
         * ufs_lookup_ino() and then VFS_VGET(), another thread might do a
         * normal lookup of the from name just before the VFS_VGET() call,
         * causing the cache entry to be re-instantiated.
+        *
+        * The same issue also applies to tvp if it exists as
+        * otherwise we may have a stale name cache entry for the new
+        * name that references the old i-node if it has other links
+        * or open file descriptors.
         */
        cache_purge(fvp);
+       if (tvp)
+               cache_purge(tvp);
 
 unlockout:
        vput(fdvp);
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to