diff options
Diffstat (limited to 'sys/miscfs')
| -rw-r--r-- | sys/miscfs/specfs/spec_vnops.c | 10 | ||||
| -rw-r--r-- | sys/miscfs/specfs/specdev.h | 11 |
2 files changed, 11 insertions, 10 deletions
diff --git a/sys/miscfs/specfs/spec_vnops.c b/sys/miscfs/specfs/spec_vnops.c index 9c3c8450867d..666322f65609 100644 --- a/sys/miscfs/specfs/spec_vnops.c +++ b/sys/miscfs/specfs/spec_vnops.c @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)spec_vnops.c 8.14 (Berkeley) 5/21/95 - * $Id: spec_vnops.c,v 1.58 1998/03/07 21:35:52 dyson Exp $ + * $Id: spec_vnops.c,v 1.59 1998/03/08 08:46:18 dyson Exp $ */ #include <sys/param.h> @@ -548,8 +548,12 @@ spec_strategy(ap) struct buf *a_bp; } */ *ap; { + struct buf *bp; - (*bdevsw[major(ap->a_bp->b_dev)]->d_strategy)(ap->a_bp); + bp = ap->a_bp; + if ((LIST_FIRST(&bp->b_dep)) != NULL && bioops.io_start) + (*bioops.io_start)(bp); + (*bdevsw[major(bp->b_dev)]->d_strategy)(bp); return (0); } @@ -633,7 +637,9 @@ spec_close(ap) * we must invalidate any in core blocks, so that * we can, for instance, change floppy disks. */ + vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, ap->a_p); error = vinvalbuf(vp, V_SAVE, ap->a_cred, ap->a_p, 0, 0); + VOP_UNLOCK(vp, 0, ap->a_p); if (error) return (error); diff --git a/sys/miscfs/specfs/specdev.h b/sys/miscfs/specfs/specdev.h index 06a5cdd9bbe5..b4c6f7750458 100644 --- a/sys/miscfs/specfs/specdev.h +++ b/sys/miscfs/specfs/specdev.h @@ -31,7 +31,7 @@ * SUCH DAMAGE. * * @(#)specdev.h 8.6 (Berkeley) 5/21/95 - * $Id: specdev.h,v 1.12 1997/09/14 02:58:03 peter Exp $ + * $Id: specdev.h,v 1.13 1997/10/15 13:23:21 phk Exp $ */ /* @@ -42,7 +42,7 @@ struct specinfo { struct vnode **si_hashchain; struct vnode *si_specnext; - long si_flags; + struct mount *si_mountpoint; dev_t si_rdev; }; /* @@ -51,12 +51,7 @@ struct specinfo { #define v_rdev v_specinfo->si_rdev #define v_hashchain v_specinfo->si_hashchain #define v_specnext v_specinfo->si_specnext -#define v_specflags v_specinfo->si_flags - -/* - * Flags for specinfo - */ -#define SI_MOUNTEDON 0x0001 /* block special device is mounted on */ +#define v_specmountpoint v_specinfo->si_mountpoint /* * Special device management |
