--- src/sys/kern/kern_conf.c 2006/06/20 19:56:26 1.186.2.6 +++ src/sys/kern/kern_conf.c 2006/10/30 15:43:56 1.186.2.7 @@ -125,6 +125,24 @@ dev_refthread(struct cdev *dev) return (csw); } +struct cdevsw * +devvn_refthread(struct vnode *vp, struct cdev **devp) +{ + struct cdevsw *csw; + + mtx_assert(&devmtx, MA_NOTOWNED); + csw = NULL; + dev_lock(); + *devp = vp->v_rdev; + if (*devp != NULL) { + csw = (*devp)->si_devsw; + if (csw != NULL) + (*devp)->si_threadcount++; + } + dev_unlock(); + return (csw); +} + void dev_relthread(struct cdev *dev) { --- src/sys/sys/conf.h 2005/09/26 14:36:54 1.222.2.3 +++ src/sys/sys/conf.h 2006/10/30 15:43:56 1.222.2.4 @@ -105,6 +105,7 @@ struct thread; struct uio; struct knote; struct clonedevs; +struct vnode; /* * Note: d_thread_t is provided as a transition aid for those drivers @@ -245,6 +246,7 @@ int clone_create(struct clonedevs **, st int count_dev(struct cdev *_dev); void destroy_dev(struct cdev *_dev); struct cdevsw *dev_refthread(struct cdev *_dev); +struct cdevsw *devvn_refthread(struct vnode *vp, struct cdev **devp); void dev_relthread(struct cdev *_dev); void dev_depends(struct cdev *_pdev, struct cdev *_cdev); void dev_ref(struct cdev *dev);