From 7f38d2a60b81a100e8a6e0fb624142598b324129 Mon Sep 17 00:00:00 2001 From: avatar Date: Fri, 9 Feb 2007 02:54:13 +0000 Subject: It turns out that devfs_close() does a dev_refthread() before invoking device specific d_close(), which makes subsequent destroy_dev() being blocked in the "devdrn" loop. This bandaid should fix the smbfs hang/crashing observed on -CURRENT since the introduction of sys/kern/kern_conf.c:1.199: # mount_smbfs -I server //server/share /mnt Password: [hang] Reviewed by: bp See also: http://lists.freebsd.org/pipermail/cvs-src/2006-November/071379.html --- sys/netsmb/smb_dev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/netsmb/smb_dev.c b/sys/netsmb/smb_dev.c index d3ed95a..deef426 100644 --- a/sys/netsmb/smb_dev.c +++ b/sys/netsmb/smb_dev.c @@ -175,6 +175,7 @@ nsmb_dev_close(struct cdev *dev, int flag, int fmt, struct thread *td) */ dev->si_drv1 = NULL; free(sdp, M_NSMBDEV); + dev_relthread(dev); /* XXX dealing with si_threadcount */ destroy_dev(dev); splx(s); return 0; -- cgit v1.1