Improve the vfs_hash() API: vput() the unneeded vnode centrally to

avoid replicating the vput in all the filesystems.
This commit is contained in:
Poul-Henning Kamp 2005-03-15 20:00:03 +00:00
parent 0c3a1acbbb
commit 45c26fa2b6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=143663
9 changed files with 11 additions and 27 deletions

View File

@ -681,10 +681,8 @@ cd9660_vget_internal(mp, ino, flags, vpp, relocated, isodir)
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
if (isodir == 0) {
int lbn, off;

View File

@ -514,10 +514,8 @@ hpfs_vget(
hp->h_devvp = hpmp->hpm_devvp;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
VREF(hp->h_devvp);

View File

@ -162,13 +162,11 @@ deget(pmp, dirclust, diroffset, depp)
error = vfs_hash_insert(nvp, hash, 0, curthread, &xvp);
if (error) {
vput(nvp);
*depp = NULL;
return (error);
}
if (xvp != NULL) {
/* XXX: Not sure this is right */
vput(nvp);
nvp = xvp;
ldep->de_vnode = nvp;
}

View File

@ -604,10 +604,8 @@ udf_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
vp->v_data = unode;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
/*
* Copy in the file entry. Per the spec, the size can only be 1 block.

View File

@ -944,10 +944,8 @@ ext2_vget(mp, ino, flags, vpp)
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
/* Read in the disk contents for the inode, copy into the inode. */
#if 0

View File

@ -944,10 +944,8 @@ ext2_vget(mp, ino, flags, vpp)
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
/* Read in the disk contents for the inode, copy into the inode. */
#if 0

View File

@ -681,10 +681,8 @@ cd9660_vget_internal(mp, ino, flags, vpp, relocated, isodir)
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
if (isodir == 0) {
int lbn, off;

View File

@ -117,10 +117,10 @@ vfs_hash_insert(struct vnode *vp, u_int hash, int flags, struct thread *td, stru
error = vget(vp2, flags | LK_INTERLOCK, td);
if (error == ENOENT)
break;
if (error)
return (error);
*vpp = vp2;
return (0);
vput(vp);
if (!error)
*vpp = vp2;
return (error);
}
if (vp2 == NULL)
break;

View File

@ -1226,10 +1226,8 @@ ffs_vget(mp, ino, flags, vpp)
#endif
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
if (error || *vpp != NULL) {
vput(vp);
if (error || *vpp != NULL)
return (error);
}
/* Read in the disk contents for the inode, copy into the inode. */
error = bread(ump->um_devvp, fsbtodb(fs, ino_to_fsba(fs, ino)),