Add two arguments to the vfs_hash() KPI so that filesystems which do

not have unique hashes (NFS) can also use it.
This commit is contained in:
Poul-Henning Kamp 2005-03-16 11:20:51 +00:00
parent 9ed94841d9
commit 51f5ce0c8c
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=143692
10 changed files with 27 additions and 20 deletions

View File

@ -661,7 +661,7 @@ cd9660_vget_internal(mp, ino, flags, vpp, relocated, isodir)
struct cdev *dev;
int error;
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -679,7 +679,7 @@ cd9660_vget_internal(mp, ino, flags, vpp, relocated, isodir)
ip->i_vnode = vp;
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);

View File

@ -463,7 +463,7 @@ hpfs_vget(
dprintf(("hpfs_vget(0x%x): ",ino));
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -513,7 +513,7 @@ hpfs_vget(
hp->h_mode = hpmp->hpm_mode;
hp->h_devvp = hpmp->hpm_devvp;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);

View File

@ -124,7 +124,8 @@ deget(pmp, dirclust, diroffset, depp)
* entry that represented the file happens to be reused while the
* deleted file is still open.
*/
error = vfs_hash_get(mntp, hash, LK_EXCLUSIVE, curthread, &nvp);
error = vfs_hash_get(mntp, hash, LK_EXCLUSIVE, curthread, &nvp,
NULL, NULL);
if (error)
return(error);
if (nvp != NULL) {
@ -158,7 +159,7 @@ deget(pmp, dirclust, diroffset, depp)
ldep->de_diroffset = diroffset;
fc_purge(ldep, 0); /* init the fat cache for this denode */
error = vfs_hash_insert(nvp, hash, 0, curthread, &xvp);
error = vfs_hash_insert(nvp, hash, 0, curthread, &xvp, NULL, NULL);
if (error) {
*depp = NULL;
return (error);

View File

@ -581,7 +581,7 @@ udf_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
struct file_entry *fe;
int error, sector, size;
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -601,7 +601,7 @@ udf_vget(struct mount *mp, ino_t ino, int flags, struct vnode **vpp)
unode->udfmp = udfmp;
vp->v_data = unode;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);

View File

@ -915,7 +915,7 @@ ext2_vget(mp, ino, flags, vpp)
int i, error;
int used_blocks;
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -942,7 +942,7 @@ ext2_vget(mp, ino, flags, vpp)
ip->i_e2fs = fs = ump->um_e2fs;
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);

View File

@ -915,7 +915,7 @@ ext2_vget(mp, ino, flags, vpp)
int i, error;
int used_blocks;
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -942,7 +942,7 @@ ext2_vget(mp, ino, flags, vpp)
ip->i_e2fs = fs = ump->um_e2fs;
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);

View File

@ -661,7 +661,7 @@ cd9660_vget_internal(mp, ino, flags, vpp, relocated, isodir)
struct cdev *dev;
int error;
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -679,7 +679,7 @@ cd9660_vget_internal(mp, ino, flags, vpp, relocated, isodir)
ip->i_vnode = vp;
ip->i_number = ino;
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);

View File

@ -62,7 +62,7 @@ vfs_hash_index(struct mount *mp, u_int hash)
}
int
vfs_hash_get(struct mount *mp, u_int hash, int flags, struct thread *td, struct vnode **vpp)
vfs_hash_get(struct mount *mp, u_int hash, int flags, struct thread *td, struct vnode **vpp, vfs_hash_cmp_t *fn, void *arg)
{
struct vnode *vp;
int error;
@ -74,6 +74,8 @@ vfs_hash_get(struct mount *mp, u_int hash, int flags, struct thread *td, struct
continue;
if (vp->v_mount != mp)
continue;
if (fn != NULL && fn(vp, arg))
continue;
VI_LOCK(vp);
mtx_unlock(&vfs_hash_mtx);
error = vget(vp, flags | LK_INTERLOCK, td);
@ -102,7 +104,7 @@ vfs_hash_remove(struct vnode *vp)
}
int
vfs_hash_insert(struct vnode *vp, u_int hash, int flags, struct thread *td, struct vnode **vpp)
vfs_hash_insert(struct vnode *vp, u_int hash, int flags, struct thread *td, struct vnode **vpp, vfs_hash_cmp_t *fn, void *arg)
{
struct vnode *vp2;
int error;
@ -117,6 +119,8 @@ vfs_hash_insert(struct vnode *vp, u_int hash, int flags, struct thread *td, stru
continue;
if (vp2->v_mount != vp->v_mount)
continue;
if (fn != NULL && fn(vp, arg))
continue;
VI_LOCK(vp2);
mtx_unlock(&vfs_hash_mtx);
error = vget(vp2, flags | LK_INTERLOCK, td);

View File

@ -693,8 +693,10 @@ extern struct vop_vector default_vnodeops;
#define VOP_EOPNOTSUPP ((void*)(uintptr_t)vop_eopnotsupp)
/* vfs_hash.c */
int vfs_hash_get(struct mount *mp, u_int hash, int flags, struct thread *td, struct vnode **vpp);
int vfs_hash_insert(struct vnode *vp, u_int hash, int flags, struct thread *td, struct vnode **vpp);
typedef int vfs_hash_cmp_t(struct vnode *vp, void *arg);
int vfs_hash_get(struct mount *mp, u_int hash, int flags, struct thread *td, struct vnode **vpp, vfs_hash_cmp_t *fn, void *arg);
int vfs_hash_insert(struct vnode *vp, u_int hash, int flags, struct thread *td, struct vnode **vpp, vfs_hash_cmp_t *fn, void *arg);
void vfs_hash_rehash(struct vnode *vp, u_int hash);
void vfs_hash_remove(struct vnode *vp);

View File

@ -1172,7 +1172,7 @@ ffs_vget(mp, ino, flags, vpp)
struct cdev *dev;
int error;
error = vfs_hash_get(mp, ino, flags, curthread, vpp);
error = vfs_hash_get(mp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);
@ -1225,7 +1225,7 @@ ffs_vget(mp, ino, flags, vpp)
}
#endif
error = vfs_hash_insert(vp, ino, flags, curthread, vpp);
error = vfs_hash_insert(vp, ino, flags, curthread, vpp, NULL, NULL);
if (error || *vpp != NULL)
return (error);