pass the lock flags in the NetBSD version of VN_LOCK(), VGET(),

VOP__UNLOCK() macros, g/c VOP__LOCK()
add some comments
use LK_RETRY flag as appropriate
g/c the FreeBSD vnode_pager_uncache() staff, as was done in FreeBSD tree a while
	ago (actually, when they merged the first round of NetBSD patches)
use VN_LOCK() & VOP__UNLOCK() consistently throughout the code instead
	of vn_lock() and VOP_UNLOCK()
minor whitespace changes
This commit is contained in:
jdolecek 1999-10-25 19:08:26 +00:00
parent 7a63478423
commit 2e860c12d3
4 changed files with 36 additions and 41 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ntfs.h,v 1.7 1999/09/11 15:55:12 jdolecek Exp $ */
/* $NetBSD: ntfs.h,v 1.8 1999/10/25 19:08:26 jdolecek Exp $ */
/*-
* Copyright (c) 1998, 1999 Semen Ustimenko
@ -305,17 +305,19 @@ MALLOC_DECLARE(M_NTFSNTHASH);
typedef int (vop_t) __P((void *));
#define HASHINIT(a, b, c, d) hashinit((a), (b), (c), (d))
#define bqrelse(bp) brelse(bp)
#define VOP__LOCK(a, b, c) VOP_LOCK((a), (b) ? LK_EXCLUSIVE : LK_SHARED)
#define VOP__UNLOCK(a, b, c) VOP_UNLOCK((a), 0)
#define VGET(a, b, c) vget((a), LK_EXCLUSIVE)
#define VN_LOCK(a, b, c) vn_lock((a), LK_EXCLUSIVE)
#else
#define VGET(a, b, c) vget((a), (b))
#define VN_LOCK(a, b, c) vn_lock((a), (b))
#else /* !NetBSD */
#define HASHINIT(a, b, c, d) hashinit((a), (b), (d))
#define VOP__LOCK(a, b, c) VOP_LOCK((a), (b), (c))
#define VOP__UNLOCK(a, b, c) VOP_UNLOCK((a), (b), (c))
#define VGET(a, b, c) vget((a), (b), (c))
#define VN_LOCK(a, b, c) vn_lock((a), (b), (c))
#endif
/* PDIRUNLOCK is used by NetBSD to mark if vfs_lookup() unlocked parent dir;
* on FreeBSD, it's not defined and nothing similar exists */
#define PDIRUNLOCK 0
#endif /* NetBSD */
#if defined(NTFS_DEBUG)
#define dprintf(a) printf a

View File

@ -1,4 +1,4 @@
/* $NetBSD: ntfs_subr.c,v 1.20 1999/10/10 14:48:37 jdolecek Exp $ */
/* $NetBSD: ntfs_subr.c,v 1.21 1999/10/25 19:08:26 jdolecek Exp $ */
/*-
* Copyright (c) 1998, 1999 Semen Ustimenko (semenu@FreeBSD.org)
@ -225,12 +225,11 @@ ntfs_ntvattrget(
dprintf(("ntfs_ntvattrget: attribute in ino: %d\n",
aalp->al_inumber));
/*
error = VFS_VGET(ntmp->ntm_mountp, aalp->al_inumber, &newvp);
*/
/* this is not a main record, so we can't use just plain
vget() */
error = ntfs_vgetex(ntmp->ntm_mountp, aalp->al_inumber,
NTFS_A_DATA, NULL, LK_EXCLUSIVE,
VG_EXT, curproc, &newvp);
NTFS_A_DATA, NULL, LK_EXCLUSIVE | LK_RETRY,
VG_EXT, curproc, &newvp);
if (error) {
printf("ntfs_ntvattrget: CAN'T VGET INO: %d\n",
aalp->al_inumber);
@ -364,7 +363,7 @@ ntfs_ntget(ip)
simple_lock(&ip->i_interlock);
ip->i_usecount++;
lockmgr(&ip->i_lock, LK_EXCLUSIVE|LK_INTERLOCK, &ip->i_interlock);
lockmgr(&ip->i_lock, LK_EXCLUSIVE | LK_INTERLOCK, &ip->i_interlock);
return 0;
}
@ -394,7 +393,7 @@ ntfs_ntlookup(
*ipp = ip;
return (0);
}
} while (lockmgr(&ntfs_hashlock, LK_EXCLUSIVE|LK_SLEEPFAIL, NULL));
} while (lockmgr(&ntfs_hashlock, LK_EXCLUSIVE | LK_SLEEPFAIL, NULL));
MALLOC(ip, struct ntnode *, sizeof(struct ntnode),
M_NTFSNTNODE, M_WAITOK);
@ -957,7 +956,8 @@ ntfs_ntlookupfile(
/* vget node, but don't load it */
error = ntfs_vgetex(ntmp->ntm_mountp,
iep->ie_number, attrtype, attrname,
LK_EXCLUSIVE, VG_DONTLOADIN | VG_DONTVALIDFN,
LK_EXCLUSIVE | LK_RETRY,
VG_DONTLOADIN | VG_DONTVALIDFN,
curproc, &nvp);
if (error)
goto fail;

View File

@ -1,4 +1,4 @@
/* $NetBSD: ntfs_vfsops.c,v 1.20 1999/10/20 14:32:10 enami Exp $ */
/* $NetBSD: ntfs_vfsops.c,v 1.21 1999/10/25 19:08:26 jdolecek Exp $ */
/*-
* Copyright (c) 1998, 1999 Semen Ustimenko
@ -438,9 +438,9 @@ ntfs_mountfs(devvp, mp, argsp, p)
if (ncount > 1 && devvp != rootvp)
return (EBUSY);
#if defined(__FreeBSD__)
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, p);
VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, p);
error = vinvalbuf(devvp, V_SAVE, p->p_ucred, p, 0, 0);
VOP_UNLOCK(devvp, 0, p);
VOP__UNLOCK(devvp, 0, p);
#else
error = vinvalbuf(devvp, V_SAVE, p->p_ucred, p, 0, 0);
#endif
@ -607,9 +607,9 @@ out:
#if defined __NetBSD__
/* lock the device vnode before calling VOP_CLOSE() */
vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY);
VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, p);
(void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, p);
VOP_UNLOCK(devvp, 0);
VOP__UNLOCK(devvp, 0, p);
#else
(void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, p);
#endif
@ -665,11 +665,11 @@ ntfs_unmount(
#if defined(__FreeBSD__)
ntmp->ntm_devvp->v_specmountpoint = NULL;
VOP_LOCK(ntmp->ntm_devvp);
vnode_pager_uncache(ntmp->ntm_devvp);
VOP_UNLOCK(ntmp->ntm_devvp);
#else
/* Check if the type of device node isn't VBAD before
* touching v_specinfo. If the device vnode is revoked, the
* field is NULL and touching it causes null pointer derefercence.
*/
if (ntmp->ntm_devvp->v_type != VBAD)
ntmp->ntm_devvp->v_specflags &= ~SI_MOUNTEDON;
#endif
@ -681,7 +681,7 @@ ntfs_unmount(
VOP_LOCK(ntmp->ntm_devvp, LK_EXCLUSIVE | LK_RETRY);
error = VOP_CLOSE(ntmp->ntm_devvp, ronly ? FREAD : FREAD|FWRITE,
NOCRED, p);
VOP_UNLOCK(ntmp->ntm_devvp, 0);
VOP__UNLOCK(ntmp->ntm_devvp, 0, p);
#else
error = VOP_CLOSE(ntmp->ntm_devvp, ronly ? FREAD : FREAD|FWRITE,
NOCRED, p);
@ -928,12 +928,11 @@ ntfs_vgetex(
if (!(flags & VG_DONTVALIDFN) && !(fp->f_flag & FN_VALID)) {
if ((ip->i_frflag & NTFS_FRFLAG_DIR) &&
(fp->f_attrtype == 0x80 && fp->f_attrname == NULL)) {
(fp->f_attrtype == NTFS_A_DATA && fp->f_attrname == NULL)) {
f_type = VDIR;
} else if(flags & VG_EXT) {
} else if (flags & VG_EXT) {
f_type = VNON;
fp->f_size =fp->f_allocated = 0;
fp->f_size = fp->f_allocated = 0;
} else {
f_type = VREG;
@ -996,7 +995,7 @@ ntfs_vget(
struct vnode **vpp)
{
return ntfs_vgetex(mp, ino, NTFS_A_DATA, NULL,
LK_EXCLUSIVE, 0, curproc, vpp);
LK_EXCLUSIVE | LK_RETRY, 0, curproc, vpp);
}
#if defined(__FreeBSD__)

View File

@ -1,4 +1,4 @@
/* $NetBSD: ntfs_vnops.c,v 1.19 1999/10/10 14:19:54 jdolecek Exp $ */
/* $NetBSD: ntfs_vnops.c,v 1.20 1999/10/25 19:08:26 jdolecek Exp $ */
/*
* Copyright (c) 1992, 1993
@ -789,9 +789,7 @@ ntfs_lookup(ap)
return (error);
VOP__UNLOCK(dvp,0,cnp->cn_proc);
#ifdef __NetBSD__
cnp->cn_flags |= PDIRUNLOCK;
#endif
dprintf(("ntfs_lookup: parentdir: %d\n",
vap->va_a_name->n_pnumber));
@ -799,22 +797,18 @@ ntfs_lookup(ap)
vap->va_a_name->n_pnumber,ap->a_vpp);
ntfs_ntvattrrele(vap);
if (error) {
if (vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY) == 0) {
#ifdef __NetBSD__
if (VN_LOCK(dvp, LK_EXCLUSIVE | LK_RETRY, curproc) == 0)
cnp->cn_flags &= ~PDIRUNLOCK;
#endif
}
return(error);
}
if (lockparent && (cnp->cn_flags & ISLASTCN)) {
if ((error = vn_lock(dvp, LK_EXCLUSIVE))) {
error = VN_LOCK(dvp, LK_EXCLUSIVE | LK_RETRY, curproc);
if (error) {
vput( *(ap->a_vpp) );
return (error);
}
#ifdef __NetBSD__
cnp->cn_flags &= ~PDIRUNLOCK;
#endif
}
} else {
error = ntfs_ntlookupfile(ntmp, dvp, cnp, ap->a_vpp);