From: Kay Sievers <kay.sievers@vrfy.org>
To: linux-hotplug@vger.kernel.org
Subject: Re: udevsend fallback
Date: Fri, 14 May 2004 11:22:06 +0000 [thread overview]
Message-ID: <20040514112206.GA19004@vrfy.org> (raw)
In-Reply-To: <20040511111641.GB12034@vrfy.org>
[-- Attachment #1: Type: text/plain, Size: 981 bytes --]
On Tue, May 11, 2004 at 04:54:44PM -0700, Greg KH wrote:
> On Tue, May 11, 2004 at 01:16:41PM +0200, Kay Sievers wrote:
> > Hi,
> > the execution of udev depends on the proper fuction of udevd, the
> > serializing daemon. If we can't connect to udevd within a 20 second we
> > give up and the request to create a node is lost. Hope this never happens,
> > but a broken udevd may prevent udev from working.
> >
> > What do you think? Should we call the udev binary directly from udevsend
> > instead of discarding the event? This way we would create the node, regardless
> > of the state of udevd. It would be 20 seconds later and maybe not in the right
> > sequence order - but the node will propably be there.
> >
> > Does it sound sane? What do you think?
>
> That sounds like a good "failsafe" thing to do.
Here we go:
Add a fallback udev call to udevsend. If udev is unable to send the
event to udevd, we call the udevd binary instead of do nothing and exit.
thanks,
Kay
[-- Attachment #2: 01-udevsend-fallback.patch --]
[-- Type: text/plain, Size: 1931 bytes --]
===== udevsend.c 1.29 vs edited =====
--- 1.29/udevsend.c Sun Mar 28 01:08:58 2004
+++ edited/udevsend.c Fri May 14 12:55:50 2004
@@ -98,6 +98,26 @@
return 0;
}
+static void run_udev(const char *subsystem)
+{
+ pid_t pid;
+
+ pid = fork();
+ switch (pid) {
+ case 0:
+ /* child */
+ execl(UDEV_BIN, "udev", subsystem, NULL);
+ dbg("exec of child failed");
+ exit(1);
+ break;
+ case -1:
+ dbg("fork of child failed");
+ break;
+ default:
+ wait(NULL);
+ }
+}
+
int main(int argc, char* argv[])
{
struct hotplug_msg msg;
@@ -109,14 +129,12 @@
int retval = 1;
int loop;
struct timespec tspec;
- int sock;
+ int sock = -1;
struct sockaddr_un saddr;
socklen_t addrlen;
int started_daemon = 0;
-#ifdef DEBUG
init_logging("udevsend");
-#endif
dbg("version %s", UDEV_VERSION);
subsystem = get_subsystem(argv[1]);
@@ -150,7 +168,7 @@
sock = socket(AF_LOCAL, SOCK_DGRAM, 0);
if (sock == -1) {
dbg("error getting socket");
- goto exit;
+ goto fallback;
}
memset(&saddr, 0x00, sizeof(struct sockaddr_un));
@@ -168,22 +186,21 @@
(struct sockaddr *)&saddr, addrlen);
if (retval != -1) {
retval = 0;
- goto close_and_exit;
+ goto exit;
}
-
+
if (errno != ECONNREFUSED) {
dbg("error sending message");
- goto close_and_exit;
+ goto fallback;
}
-
+
if (!started_daemon) {
- dbg("connect failed, try starting daemon...");
+ info("starting udevd daemon");
retval = start_daemon();
if (retval) {
- dbg("error starting daemon");
- goto exit;
+ info("error starting daemon");
+ goto fallback;
}
-
dbg("daemon started");
started_daemon = 1;
} else {
@@ -193,9 +210,14 @@
nanosleep(&tspec, NULL);
}
}
-
-close_and_exit:
- close(sock);
+
+fallback:
+ info("unable to connect to event daemon, try to call udev directly");
+ run_udev(subsystem);
+
exit:
+ if (sock != -1)
+ close(sock);
+
return retval;
}
next prev parent reply other threads:[~2004-05-14 11:22 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-05-11 11:16 udevsend fallback Kay Sievers
2004-05-11 12:21 ` Harald Hoyer
2004-05-11 23:54 ` Greg KH
2004-05-13 7:51 ` Harald Hoyer
2004-05-13 10:10 ` Kay Sievers
2004-05-13 21:03 ` Greg KH
2004-05-14 11:22 ` Kay Sievers [this message]
2004-05-14 22:21 ` Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20040514112206.GA19004@vrfy.org \
--to=kay.sievers@vrfy.org \
--cc=linux-hotplug@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.