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:
parent
7a63478423
commit
2e860c12d3
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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__)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue