The kern_renameat() looks up the fvp using the DELETE flag, which causes

the removal of the name cache entry for fvp.

Reported by:	Anton Yuzhaninov <citrin citrin ru>
In collaboration with:	kib
MFC after:	1 week
This commit is contained in:
pho 2011-10-31 15:01:47 +00:00
parent f151da3d71
commit f11a5665c1

View File

@ -1519,6 +1519,13 @@ ufs_rename(ap)
cache_purge(fdvp);
}
error = ufs_dirremove(fdvp, fip, fcnp->cn_flags, 0);
/*
* As the relookup of the fvp is done in two steps:
* 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.
*/
cache_purge(fvp);
unlockout:
vput(fdvp);