summaryrefslogtreecommitdiffstats
path: root/sys/fs/hpfs/hpfs_vnops.c
diff options
context:
space:
mode:
authorjeff <jeff@FreeBSD.org>2003-02-09 11:28:35 +0000
committerjeff <jeff@FreeBSD.org>2003-02-09 11:28:35 +0000
commit87e306ad712d6a7daef1073b7fb94c0fa90908d2 (patch)
tree48d962faa6bfdae347b467d003b11e355ce17172 /sys/fs/hpfs/hpfs_vnops.c
parent75e9ed76e4bbf5978303d4d7ee581c86bef55c50 (diff)
downloadFreeBSD-src-87e306ad712d6a7daef1073b7fb94c0fa90908d2.zip
FreeBSD-src-87e306ad712d6a7daef1073b7fb94c0fa90908d2.tar.gz
- Cleanup unlocked accesses to buf flags by introducing a new b_vflag member
that is protected by the vnode lock. - Move B_SCANNED into b_vflags and call it BV_SCANNED. - Create a vop_stdfsync() modeled after spec's sync. - Replace spec_fsync, msdos_fsync, and hpfs_fsync with the stdfsync and some fs specific processing. This gives all of these filesystems proper behavior wrt MNT_WAIT/NOWAIT and the use of the B_SCANNED flag. - Annotate the locking in buf.h
Diffstat (limited to 'sys/fs/hpfs/hpfs_vnops.c')
-rw-r--r--sys/fs/hpfs/hpfs_vnops.c39
1 files changed, 3 insertions, 36 deletions
diff --git a/sys/fs/hpfs/hpfs_vnops.c b/sys/fs/hpfs/hpfs_vnops.c
index d207c52..6578095 100644
--- a/sys/fs/hpfs/hpfs_vnops.c
+++ b/sys/fs/hpfs/hpfs_vnops.c
@@ -87,48 +87,15 @@ hpfs_fsync(ap)
struct thread *a_td;
} */ *ap;
{
- struct vnode *vp = ap->a_vp;
- int s;
- struct buf *bp, *nbp;
-
/*
- * Flush all dirty buffers associated with a vnode.
+ * Flush our dirty buffers.
*/
-loop:
- VI_LOCK(vp);
- s = splbio();
- for (bp = TAILQ_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) {
- nbp = TAILQ_NEXT(bp, b_vnbufs);
- VI_UNLOCK(vp);
- if (BUF_LOCK(bp, LK_EXCLUSIVE | LK_NOWAIT)) {
- VI_LOCK(vp);
- continue;
- }
- if ((bp->b_flags & B_DELWRI) == 0)
- panic("hpfs_fsync: not dirty");
- bremfree(bp);
- splx(s);
- (void) bwrite(bp);
- goto loop;
- }
- while (vp->v_numoutput) {
- vp->v_iflag |= VI_BWAIT;
- msleep((caddr_t)&vp->v_numoutput, VI_MTX(vp), PRIBIO + 1,
- "hpfsn", 0);
- }
-#ifdef DIAGNOSTIC
- if (!TAILQ_EMPTY(&vp->v_dirtyblkhd)) {
- vprint("hpfs_fsync: dirty", vp);
- goto loop;
- }
-#endif
- VI_UNLOCK(vp);
- splx(s);
+ vop_stdfsync(ap);
/*
* Write out the on-disc version of the vnode.
*/
- return hpfs_update(VTOHP(vp));
+ return hpfs_update(VTOHP(ap->a_vp));
}
static int
OpenPOWER on IntegriCloud