On Sat, Sep 08, 2001 at 10:27:10PM +0200, Christian Carstensen wrote: > > hmm, > > i've posted the attached mail a week ago to this list, but got no > response. could someone please comment on this issue?
I've also posted a patch(much less refined than yours, though) last month but still got no response. Maybe you need to talk to the person who committed rev 1.112 of kern_sysctl.c ? > ---------- Forwarded message ---------- > Date: Sat, 1 Sep 2001 03:26:46 +0200 (CEST) > From: Christian Carstensen <[EMAIL PROTECTED]> > To: [EMAIL PROTECTED] > Subject: dynamic sysctl problem and proposed hot fix > > > hi, > > i just came across a problem with dynamic sysctls: > when unloading a driver module that used dyn sysctls, my system paniced > with "oid too high". that problem is caused by sysctl_ctx_free() in > kern/kern_sysctl.c, that first deregisters all oids in the list to see if > a error occurs. then, all oids are being reregistered and, if there was no > error, they're finally removed. > during the second phase, sysctl_register_oid(e1->entry) is called with > n := e1->entry->oid_number being the old oid number with n > CTL_AUTO_START. > that leads to panic("static sysctl too high") in sysctl_register_oid. > one approach might be to initialize the oid_number field to contain the > value OID_AUTO before calling sysctl_regiser_oid, but i'm unsure about the > side effects of doing that in sysctl_ctx_free(). > alternatively, the "old" oid number could be reused, the following patch > should do, but it's just a workaround. > > > best, > christian > > -- > "Sorry, no defects found. Please try a different search" > [http://www.cisco.com/support/bugtools/bugtool.shtml] > > > Index: kern_sysctl.c > =================================================================== > RCS file: /usr/cvs/src/sys/kern/kern_sysctl.c,v > retrieving revision 1.113 > diff -r1.113 kern_sysctl.c > 83a84,96 > > static struct sysctl_oid * > > sysctl_find_oidnumber(const int number, struct sysctl_oid_list *list) > > { > > struct sysctl_oid *oidp; > > > > SLIST_FOREACH(oidp, list, oid_link) { > > if (oidp->oid_number == number) { > > return (oidp); > > } > > } > > return (NULL); > > } > > > 125c138,139 > < panic("static sysctl oid too high: %d", oidp->oid_number); > --- > > if (sysctl_find_oidnumber(oidp->oid_number, parent)) > > panic("static sysctl oid too high: %d", oidp->oid_number); > 177c191 > < if (error) > --- > > if (error) To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-current" in the body of the message