Improve the vfs_hash() API: vput() the unneeded vnode centrally to
avoid replicating the vput in all the filesystems.
This commit is contained in:
parent
0c3a1acbbb
commit
45c26fa2b6
@ -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;
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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)),
|
||||
|
Loading…
x
Reference in New Issue
Block a user