Diff for /src/sys/vfs/mfs/mfs_vnops.c between versions 1.12 and 1.13

version 1.12, 2004/04/15 00:59:41 version 1.13, 2004/05/19 22:53:04
Line 100  VNODEOP_SET(mfs_vnodeop_opv_desc); Line 100  VNODEOP_SET(mfs_vnodeop_opv_desc);
  * validate before actual IO. Record our process identifier   * validate before actual IO. Record our process identifier
  * so we can tell when we are doing I/O to ourself.   * so we can tell when we are doing I/O to ourself.
  *   *
    * NOTE: new device sequencing.  mounts check the device reference count
    * before calling open, so we must associate the device in open and 
    * disassociate it in close rather then faking it when we created the vnode.
    *
  * mfs_open(struct vnode *a_vp, int a_mode, struct ucred *a_cred,   * mfs_open(struct vnode *a_vp, int a_mode, struct ucred *a_cred,
  *          struct thread *a_td)   *          struct thread *a_td)
  */   */
Line 107  VNODEOP_SET(mfs_vnodeop_opv_desc); Line 111  VNODEOP_SET(mfs_vnodeop_opv_desc);
 static int  static int
 mfs_open(struct vop_open_args *ap)  mfs_open(struct vop_open_args *ap)
 {  {
        if (ap->a_vp->v_type != VCHR) {        struct vnode *vp = ap->a_vp;
 
         if (vp->v_type != VCHR)
                 panic("mfs_open not VCHR");                  panic("mfs_open not VCHR");
                /* NOTREACHED */        v_associate_rdev(vp, udev2dev(vp->v_udev, 0));
        } 
         return (0);          return (0);
 }  }
   
Line 136  static int Line 141  static int
 mfs_freeblks(struct vop_freeblks_args *ap)  mfs_freeblks(struct vop_freeblks_args *ap)
 {         {       
         struct buf *bp;          struct buf *bp;
        struct vnode *vp;        struct vnode *vp = ap->a_vp;
 
        if (!vfinddev(ap->a_vp->v_rdev, VCHR, &vp) || vp->v_usecount == 0) 
                panic("mfs_freeblks: bad dev"); 
   
         bp = geteblk(ap->a_length);          bp = geteblk(ap->a_length);
         bp->b_flags |= B_FREEBUF | B_ASYNC;          bp->b_flags |= B_FREEBUF | B_ASYNC;
        bp->b_dev = ap->a_vp->v_rdev;        bp->b_dev = vp->v_rdev;
         bp->b_blkno = ap->a_addr;          bp->b_blkno = ap->a_addr;
         bp->b_offset = dbtob(ap->a_addr);          bp->b_offset = dbtob(ap->a_addr);
         bp->b_bcount = ap->a_length;          bp->b_bcount = ap->a_length;
Line 162  mfs_strategy(struct vop_strategy_args *a Line 164  mfs_strategy(struct vop_strategy_args *a
 {  {
         struct buf *bp = ap->a_bp;          struct buf *bp = ap->a_bp;
         struct mfsnode *mfsp;          struct mfsnode *mfsp;
         struct vnode *vp;  
         struct thread *td = curthread;          /* XXX */          struct thread *td = curthread;          /* XXX */
         int s;          int s;
   
        if (!vfinddev(bp->b_dev, VCHR, &vp) || vp->v_usecount == 0)        bp->b_dev = ap->a_vp->v_rdev;
                panic("mfs_strategy: bad dev");        mfsp = bp->b_dev->si_drv1;
        mfsp = VTOMFS(vp);        if (mfsp == NULL) {
                 bp->b_error = ENXIO;
                 bp->b_flags |= B_ERROR;
                 biodone(bp);
                 return(0);
         }
   
         /*          /*
          * splbio required for queueing/dequeueing, in case of forwarded           * splbio required for queueing/dequeueing, in case of forwarded
Line 205  mfs_strategy(struct vop_strategy_args *a Line 211  mfs_strategy(struct vop_strategy_args *a
                  * wake it up.                   * wake it up.
                  */                   */
                 bufq_insert_tail(&mfsp->buf_queue, bp);                  bufq_insert_tail(&mfsp->buf_queue, bp);
                wakeup((caddr_t)vp);                wakeup((caddr_t)mfsp);
         }          }
         splx(s);          splx(s);
         return (0);          return (0);
Line 331  mfs_close(struct vop_close_args *ap) Line 337  mfs_close(struct vop_close_args *ap)
          * Send a request to the filesystem server to exit.           * Send a request to the filesystem server to exit.
          */           */
         mfsp->mfs_active = 0;          mfsp->mfs_active = 0;
        wakeup((caddr_t)vp);        v_release_rdev(vp);
         if (mfsp->mfs_dev) {
                 destroy_dev(mfsp->mfs_dev);
                 mfsp->mfs_dev = NULL;
         }
         wakeup((caddr_t)mfsp);
         return (0);          return (0);
 }  }
   

Removed from v.1.12  
changed lines
  Added in v.1.13