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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).