KSE was Re: open/close/ioctl api change?

Danny Braniss danny at cs.huji.ac.il
Mon Jun 25 19:31:50 UTC 2007

> Danny Braniss wrote:
> >> Danny Braniss wrote:
> >>>> actually it's the struct thread *tp where my problems are,
> >>>> this code works fine under 6.2, and did work till some days ago under current.
> >>>>
> >>>> static int
> >>>> iscsi_open(struct cdev *dev, int flags, int otype, struct thread *td)
> >>>> {
> >>>> ...
> >>>> 	debug(3, "td->td_proc=%p", td->td_proc);
> >>>> 	debug(3, "td->td_proc->p_pid=%d pid=%d",
> >>>> 	   td->td_proc->p_pid, curproc->p_pid);
> >>>> ...
> >>>>
> >>>> the first debug prints out td->td_proc=0 and the next one panics.
> >>> found the problem, 'option KSE' which is defined now in DEFAULTS,
> >>> and i'm compiling a module! which does not include DEFAULTS!
> >>>
> >> even so it shouldnt' happen..
> >>
> > why? I'm compiling outside the source tree.
> > I agree that it shouldn't, specially, since it took me a long
> > time to find the problem :-), but I can't see how config options
> > can be exported. Unless, the make file is made aware of the KERNCONF file.
> there should be no place in the source at any time where a thread 
> that is not on the free list could have a td_proc of NULL.
> it doesn't matter about where a module came from etc.. the fact that
> it happened is a bug somewhere.

I compiled the kernel, and DEFAULT contains
	option KSE
then I compiled the loadable module, outside the source tree, where
KSE is not defined, the thread structure has #ifdef KSE ... #endif
so my module sees a different thread structure. The real arguable issue
is that the #ifdef KSE is below the *td_proc, So td->proc should not
be affected by the ifdef. BTW, it was NULL when compiled for i386,
garbage for amd64.


More information about the freebsd-current mailing list