In r185557, the check for existing negative entry for the given name
did not compared nc_dvp with supplied parent directory vnode pointer. Add the check and note that now branches for vp != NULL and vp == NULL are the same, thus can be merged. Reported and reviewed by: kan Tested by: pho MFC after: 2 weeks
This commit is contained in:
parent
df52a87993
commit
83e73926ad
@ -526,28 +526,18 @@ cache_enter(dvp, vp, cnp)
|
||||
CACHE_LOCK();
|
||||
|
||||
/*
|
||||
* See if this vnode is already in the cache with this name.
|
||||
* This can happen with concurrent lookups of the same path
|
||||
* name.
|
||||
* See if this vnode or negative entry is already in the cache
|
||||
* with this name. This can happen with concurrent lookups of
|
||||
* the same path name.
|
||||
*/
|
||||
if (vp) {
|
||||
TAILQ_FOREACH(n2, &vp->v_cache_dst, nc_dst) {
|
||||
if (n2->nc_dvp == dvp &&
|
||||
n2->nc_nlen == cnp->cn_namelen &&
|
||||
!bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
|
||||
CACHE_UNLOCK();
|
||||
cache_free(ncp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
TAILQ_FOREACH(n2, &ncneg, nc_dst) {
|
||||
if (n2->nc_nlen == cnp->cn_namelen &&
|
||||
!bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
|
||||
CACHE_UNLOCK();
|
||||
cache_free(ncp);
|
||||
return;
|
||||
}
|
||||
ncpp = NCHHASH(hash);
|
||||
LIST_FOREACH(n2, ncpp, nc_hash) {
|
||||
if (n2->nc_dvp == dvp &&
|
||||
n2->nc_nlen == cnp->cn_namelen &&
|
||||
!bcmp(n2->nc_name, cnp->cn_nameptr, n2->nc_nlen)) {
|
||||
CACHE_UNLOCK();
|
||||
cache_free(ncp);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@ -565,7 +555,6 @@ cache_enter(dvp, vp, cnp)
|
||||
* Insert the new namecache entry into the appropriate chain
|
||||
* within the cache entries table.
|
||||
*/
|
||||
ncpp = NCHHASH(hash);
|
||||
LIST_INSERT_HEAD(ncpp, ncp, nc_hash);
|
||||
if (LIST_EMPTY(&dvp->v_cache_src)) {
|
||||
hold = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user