From 8cfb9f422a08dedcaf39cf28e8d43b6fa2ddafd0 Mon Sep 17 00:00:00 2001 From: John Heidemann Date: Fri, 15 May 1992 19:21:18 -0800 Subject: [PATCH] direct vop calls cleaned up by hand SCCS-vsn: sys/ufs/lfs/lfs_balloc.c 7.29 SCCS-vsn: sys/ufs/lfs/lfs_segment.c 7.19 --- usr/src/sys/ufs/lfs/lfs_balloc.c | 11 +++++++++-- usr/src/sys/ufs/lfs/lfs_segment.c | 22 ++++++++++++++-------- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/usr/src/sys/ufs/lfs/lfs_balloc.c b/usr/src/sys/ufs/lfs/lfs_balloc.c index ed1792fbd6..ef22189218 100644 --- a/usr/src/sys/ufs/lfs/lfs_balloc.c +++ b/usr/src/sys/ufs/lfs/lfs_balloc.c @@ -4,7 +4,7 @@ * * %sccs.include.redist.c% * - * @(#)lfs_balloc.c 7.28 (Berkeley) %G% + * @(#)lfs_balloc.c 7.29 (Berkeley) %G% */ #include @@ -82,6 +82,7 @@ lfs_bmaparray(vp, bn, bnp, ap, nump) INDIR *ap; int *nump; { + USES_VOP_STRATEGY; register struct inode *ip; struct buf *bp; struct lfs *fs; @@ -150,7 +151,13 @@ lfs_bmaparray(vp, bn, bnp, ap, nump) bp->b_blkno = daddr; bp->b_flags |= B_READ; bp->b_dev = devvp->v_rdev; - (devvp->v_op->vop_strategy)(bp); + /* + * Call a strategy VOP by hand. + */ + vop_strategy_a.a_desc = VDESC(vop_strategy); + vop_strategy_a.a_bp=bp; + VOCALL(devvp->v_op, VOFFSET(vop_strategy), \ + &vop_strategy_a); curproc->p_stats->p_ru.ru_inblock++; /* XXX */ if (error = biowait(bp)) { brelse(bp); diff --git a/usr/src/sys/ufs/lfs/lfs_segment.c b/usr/src/sys/ufs/lfs/lfs_segment.c index 232e60477f..fed7254cf9 100644 --- a/usr/src/sys/ufs/lfs/lfs_segment.c +++ b/usr/src/sys/ufs/lfs/lfs_segment.c @@ -4,7 +4,7 @@ * * %sccs.include.redist.c% * - * @(#)lfs_segment.c 7.18 (Berkeley) %G% + * @(#)lfs_segment.c 7.19 (Berkeley) %G% */ #include @@ -680,13 +680,14 @@ lfs_writeseg(fs, sp) struct lfs *fs; struct segment *sp; { + USES_VOP_STRATEGY; struct buf **bpp, *bp, *cbp; SEGUSE *sup; SEGSUM *ssp; dev_t i_dev; u_long *datap, *dp; size_t size; - int ch_per_blk, i, nblocks, num, s, (*strategy)__P((struct buf *)); + int ch_per_blk, i, nblocks, num, s, (*strategy)__P((struct vop_strategy_args *)); char *p; #ifdef VERBOSE @@ -714,7 +715,7 @@ lfs_writeseg(fs, sp) free(datap, M_SEGMENT); i_dev = VTOI(fs->lfs_ivnode)->i_dev; - strategy = VTOI(fs->lfs_ivnode)->i_devvp->v_op->vop_strategy; + strategy = VTOI(fs->lfs_ivnode)->i_devvp->v_op[VOFFSET(vop_strategy)]; /* * When we simply write the blocks we lose a rotation for every block @@ -763,7 +764,9 @@ lfs_writeseg(fs, sp) } splx(s); cbp->b_bcount = p - cbp->b_un.b_addr; - (strategy)(cbp); + vop_strategy_a.a_desc = VDESC(vop_strategy); + vop_strategy_a.a_bp = cbp; + (strategy)(&vop_strategy_a); } /* Update the segment usage information. */ @@ -780,15 +783,16 @@ lfs_writesuper(fs, sp) struct lfs *fs; struct segment *sp; { + USES_VOP_STRATEGY; struct buf *bp; dev_t i_dev; - int (*strategy) __P((struct buf *)); + int (*strategy) __P((struct vop_strategy_args *)); #ifdef VERBOSE printf("lfs_writesuper\n"); #endif i_dev = VTOI(fs->lfs_ivnode)->i_dev; - strategy = VTOI(fs->lfs_ivnode)->i_devvp->v_op->vop_strategy; + strategy = VTOI(fs->lfs_ivnode)->i_devvp->v_op[VOFFSET(vop_strategy)]; /* Checksum the superblock and copy it into a buffer. */ fs->lfs_cksum = cksum(fs, sizeof(struct lfs) - sizeof(fs->lfs_cksum)); @@ -799,14 +803,16 @@ lfs_writesuper(fs, sp) bp->b_dev = i_dev; bp->b_flags |= B_BUSY; bp->b_flags &= ~(B_DONE | B_ERROR | B_READ | B_DELWRI); - (strategy)(bp); + vop_strategy_a.a_desc = VDESC(vop_strategy); + vop_strategy_a.a_bp = bp; + (strategy)(&vop_strategy_a); biowait(bp); /* Write the second superblock (don't wait). */ bp->b_blkno = bp->b_lblkno = fs->lfs_sboffs[1]; bp->b_flags |= B_ASYNC | B_BUSY; bp->b_flags &= ~(B_DONE | B_ERROR | B_READ | B_DELWRI); - (strategy)(bp); + (strategy)(&vop_strategy_a); } /* -- 2.20.1