devfs
[Top] [All Lists]

RE: [kernel] char/raw.c devfs support

To: "'Richard Gooch'" <rgooch@xxxxxxxxxxxxxxx>, "'Thierry Vignaud'" <tvignaud@xxxxxxxxxxxxxxxx>
Subject: RE: [kernel] char/raw.c devfs support
From: Borsenkow Andrej <Andrej.Borsenkow@xxxxxxxxxxxxxx>
Date: Thu, 14 Feb 2002 17:32:50 +0300
Cc: "'Juan Quintela'" <quintela@xxxxxxxxxxxxxxxx>, kernel@xxxxxxxxxxxxxxxx, "'devfs mailing list'" <devfs@xxxxxxxxxxx>, "'Frederic Lepied'" <flepied@xxxxxxxxxxxxxxxx>
Importance: Normal
In-reply-to: <200202080557.g185vlc14531@vindaloo.ras.ucalgary.ca>
Sender: owner-devfs@xxxxxxxxxxx
> 
> Thierry Vignaud writes:
> > Juan Quintela <quintela@xxxxxxxxxxxxxxxx> writes:
> >
> > > > BTW, Juan: I haven't yet received a followup about what was
going
> > > > wrong with your /lib/dev-state and /dev/log problems.
> > >
> > > I don't know really, I think that it was a devfsd package here
that
> > > got a wrong config file :(
> >
> > the /dev/log problem has been traced back to the following portion
of
> > /etc/rc.d/rc.sysinit :
> >
> >
> > # Restart devfsd actions now that the filesystems are ready
> > if [ -c /dev/.devfsd ]; then
> >   if [ -x /sbin/devfsd ]; then
> >       # cleanup dynamic desktop directories before calling devfsd
actions
> >       rm -f /usr/share/gnome/desktop/*
/usr/share/apps/kdesktop/Desktop/*
> >
> >       action "Running devfsd actions: " killall -HUP devfsd
> >   fi
> > fi
> >
> >
> > sometimes, the bootstraping process wait for minutes because of some
> > sort of race between devfsd and minilogd (remeber syslogd hasn't yet
> > be started since it's a service launched after rc.sysinit let rc
play
> > with init levels.
> >
> > we've found a solution: make a service of the previous piece of
script
> > and run it very late (ie in 99th position whereas syslogd service
has
> > a priority of 88).
> 
> Ug! I hate work-arounds. Can you put time into helping track down
> whether there is a bug in devfs or devfsd, and what the cause of the
> bug is?
>

/dev/log is saved in /lib/dev-state first time after clean start and
restored upon starting devfsd. It means, /dev/log exists *immediately*
and devfsd tries to do openlog() before real syslog is started early in
rc.sysinit. When syslog is started it tries to remove /dev/log: 

2628  unlink("/dev/log")                = -1 ENOENT (No such file or
directory)
2628  socket(PF_UNIX, SOCK_DGRAM, 0)    = 0
2628  bind(0, {sin_family=AF_UNIX, path="/dev/log"}, 10) = 0
2628  chmod("/dev/log", 0666)           = 0

Any chance of deadlock here? Openlog does connect and send:

2678  connect(1, {sin_family=AF_UNIX, path="/dev/log"}, 16) = 0
2678  send(1, "<13>Feb 14 17:26:06 bor: test", 29, 0) = 29
2678  rt_sigaction(SIGPIPE, {SIG_DFL}, NULL, 8) = 0
2678  close(1)                          = 0

which means /dev/log is not empty (whatever it means) when syslog tries
to remove it because nobody was there to consume message yet?

-andrej

<Prev in Thread] Current Thread [Next in Thread>