Before using this patch, you'll need to apply kib@'s destroy_dev_sched() patch which can be found at: http://people.freebsd.org/~kib/misc/destroy_dev_sched.10.patch --- cam/scsi/scsi_target.c.orig Wed May 2 11:42:46 2007 +++ cam/scsi/scsi_target.c Wed May 2 11:43:11 2007 @@ -210,7 +210,7 @@ targclose(struct cdev *dev, int flag, in softc = (struct targ_softc *)dev->si_drv1; if ((softc->periph == NULL) || (softc->state & TARG_STATE_LUN_ENABLED) == 0) { - destroy_dev(dev); + destroy_dev_sched(dev); FREE(softc, M_TARG); return (0); } @@ -229,7 +229,7 @@ targclose(struct cdev *dev, int flag, in cam_periph_invalidate(softc->periph); softc->periph = NULL; } - destroy_dev(dev); + destroy_dev_sched(dev); FREE(softc, M_TARG); } cam_periph_unlock(periph); --- netsmb/smb_dev.c.orig Thu Apr 12 10:27:19 2007 +++ netsmb/smb_dev.c Mon May 7 22:15:49 2007 @@ -175,7 +175,7 @@ nsmb_dev_close(struct cdev *dev, int fla */ dev->si_drv1 = NULL; free(sdp, M_NSMBDEV); - destroy_dev(dev); + destroy_dev_sched(dev); splx(s); return 0; } @@ -349,6 +349,8 @@ nsmb_dev_load(module_t mod, int cmd, voi if (error) break; EVENTHANDLER_DEREGISTER(dev_clone, nsmb_dev_tag); + destroy_dev_sched_drain(&nsmb_cdevsw); + drain_dev_clone_events(); printf("netsmb_dev: unloaded\n"); break; default: