John,

I know there are other ways to do it, but I don't have the
time for them just now.

An approach that would fix the problem but likely not change
anything else would be to initialize all the semaphores in the
fmodsw array on "streams" module loading and never destroy
them (the memory will unload with the "streams" module).
Because the fmodsw table is statically allocated, it seems
pointless to destroy the semaphores in the first place.

But for now, at least for me, kernel oops on module unloading
and reloading is unacceptable.  For me, oss of some functionality
would be preferrable.

I have uploaded an LiS-2.16.18-6 rpm at http://www.openss7.org/rpms/
that has the change if someone wants to test some of the other
functionality to see if anything has been broken by the change.

--brian

On Sun, 15 Feb 2004, John A. Boyd Jr. wrote:

> Let me restate in the form of a suggestion - instead of clearing
> the name, you might want to look at how to get the state change
> to work, so as to prevent this problem.  The author apparently
> intended clearing the _INITED state flag to have somewhat the
> effect as your clearing of the name...
> 
> -John
> 
> Brian F. G. Bidulock wrote:
> > There is a module loading bug in head/mod.c  When a module
> > is unregistered the f_name component is left alloing lis_findmod
> > to find it an lis_loadmod will attempt to lock a destroyed
> > semaphore.  The problem can be recreated by manually loading a
> > streams kernel module (modprobe), unloading it (rmmod) and then
> > demand loading it (e.g. I_PUSH).  The result is a kernel oops.
> > 
> > The patch below fixes the problem (but may break other things).
> > 
> > --brian
> > 
> > Index: head/mod.c
> > ===================================================================
> > RCS file: /home/common/cvsroot/LiSnew/head/mod.c,v
> > retrieving revision 1.1.1.4
> > diff -U3 -r1.1.1.4 mod.c
> > --- head/mod.c      22 Nov 2003 23:01:43 -0000      1.1.1.4
> > +++ head/mod.c      15 Feb 2004 18:05:31 -0000
> > @@ -742,6 +742,7 @@
> >      lis_up(&slot->f_sem) ;
> >      lis_sem_destroy(&slot->f_sem) ;
> >      slot->f_state &= ~LIS_MODSTATE_INITED ;
> > +    slot->f_name[0] = '\0';
> >  
> >      printk("STREAMS module \"%s\" unregistered, id %d\n", name, id);
> >  
> > 

-- 
Brian F. G. Bidulock    � The reasonable man adapts himself to the �
[EMAIL PROTECTED]    � world; the unreasonable one persists in  �
http://www.openss7.org/ � trying  to adapt the  world  to himself. �
                        � Therefore  all  progress  depends on the �
                        � unreasonable man. -- George Bernard Shaw �
_______________________________________________
Linux-streams mailing list
[EMAIL PROTECTED]
http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

Reply via email to