Date: Sun, 11 May 2008 23:50:20 +0300 From: Andriy Gapon <avg@icyb.net.ua> To: freebsd-hackers@freebsd.org Cc: Kostik Belousov <kostikbel@gmail.com> Subject: Re: devctl (alike?) for devfs Message-ID: <48275C0C.2040601@icyb.net.ua> In-Reply-To: <20080425143646.GF18958@deviant.kiev.zoral.com.ua> References: <480E4269.2090604@icyb.net.ua> <480FBAB9.1000904@icyb.net.ua> <48103F36.6060707@icyb.net.ua> <200804240811.26183.jhb@freebsd.org> <4810FD1E.70602@icyb.net.ua> <20080425095009.GD18958@deviant.kiev.zoral.com.ua> <4811E6BC.4060306@icyb.net.ua> <20080425143646.GF18958@deviant.kiev.zoral.com.ua>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------030709040303030500080608 Content-Type: text/plain; charset=KOI8-U; format=flowed Content-Transfer-Encoding: 7bit Kostik, John, Warner, thank you for your guidance and suggestions. I am currently testing the patch attached and I am using a kernel with WITNESS and INVARIANTS enabled. Scope of my testing is plugging/unplugging of UMASS devices. I get CREATE notifications all right. I do not get any panics/complaints from the kernel, good. Unfortunately I do not get any DESTROY notifications either. Could you please look through the patch? Is there any control flow path that I missed or something even more obvious? I hope that we do not have any cdev leaks. I am testing the patch with RELENG_7 as of May 6. -- Andriy Gapon --------------030709040303030500080608 Content-Type: text/plain; name="devfs-notify.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="devfs-notify.diff" diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 1db25f8..0245253 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/kernel.h> #include <sys/systm.h> +#include <sys/bus.h> #include <sys/bio.h> #include <sys/lock.h> #include <sys/mutex.h> @@ -99,6 +100,9 @@ dev_unlock_and_free(void) mtx_unlock(&devmtx); while ((cdp = TAILQ_FIRST(&cdp_free)) != NULL) { + if (!cold) + devctl_notify("DEVFS", cdp->cdp_c.si_name, "DESTROY", NULL); + TAILQ_REMOVE(&cdp_free, cdp, cdp_list); devfs_free(&cdp->cdp_c); } @@ -172,8 +176,12 @@ dev_rel(struct cdev *dev) flag = 1; } dev_unlock(); - if (flag) + if (flag) { + if (!cold) + devctl_notify("DEVFS", dev->si_name, "DESTROY", NULL); + devfs_free(dev); + } } struct cdevsw * @@ -706,6 +714,10 @@ make_dev_credv(int flags, struct cdevsw *devsw, int minornr, devfs_create(dev); clean_unrhdrl(devfs_inos); dev_unlock_and_free(); + + if (!cold) + devctl_notify("DEVFS", dev->si_name, "CREATE", NULL); + return (dev); } @@ -794,6 +806,10 @@ make_dev_alias(struct cdev *pdev, const char *fmt, ...) clean_unrhdrl(devfs_inos); dev_unlock(); dev_depends(pdev, dev); + + if (!cold) + devctl_notify("DEVFS", dev->si_name, "CREATE", NULL); + return (dev); } --------------030709040303030500080608--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?48275C0C.2040601>