linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: linux-hotplug@vger.kernel.org
Subject: hotplug for klibc utils
Date: Fri, 27 Feb 2004 13:02:06 +0000	[thread overview]
Message-ID: <200402271402.06890.arnd@arndb.de> (raw)

Several people have run into problems when attaching large disk arrays to
a mainframe because of running /sbin/hotplug as a bash script takes far
longer than the interval between hotplug events.

Attaching more than 300 devices at once will cause an out-of-memory
condition and the kernel starts killing random processes.

Running only udev instead of hotplug from the kernel is fast enough.

Christian Bornträger was so kind to reimplement the Gregs hotplug 
shell script in C and verify that this solves the problem.

The shell version currently does:
> DIR="/etc/hotplug.d"
> for I in "${DIR}/$1/"*.hotplug "${DIR}/"default/*.hotplug ; do
>         if [ -f $I ]; then test -x $I && $I $1 ; fi
> done
> exit 1;

	Arnd <><

diff -urN klibc-0.115/utils/Makefile klibc-0.115-hotplug/utils/Makefile
--- klibc-0.115/utils/Makefile	2004-02-22 01:57:32.000000000 +0100
+++ klibc-0.115-hotplug/utils/Makefile	2004-02-27 11:00:40.000000000 +0100
@@ -6,7 +6,7 @@
 CFLAGS       = $(MAKEDEPS) $(OPTFLAGS) $(REQFLAGS) -W -Wall
 LIBS         = $(KLIBC) $(LIBGCC)
 PROGS       := chroot dd fstype mkdir mkfifo mount pivot_root umount \
-	       true false sleep ln
+	       true false sleep ln hotplug
 STATICPROGS := $(patsubst %,static/%,$(PROGS))
 SHAREDPROGS := $(patsubst %,shared/%,$(PROGS))
 LIBOBJS	     = file_mode.o
diff -urN klibc-0.115/utils/hotplug.c klibc-0.115-hotplug/utils/hotplug.c
--- klibc-0.115/utils/hotplug.c	1970-01-01 01:00:00.000000000 +0100
+++ klibc-0.115-hotplug/utils/hotplug.c	2004-02-27 11:00:28.000000000 +0100
@@ -0,0 +1,80 @@
+/*
+ * Hotplug Multiplexer
+ * Author(s) Christian Borntraeger <cborntra@de.ibm.com>
+ */
+
+#include <dirent.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <unistd.h>
+
+#define HOTPLUGDIR "/etc/hotplug.d"
+#define SUFFIX ".hotplug"
+
+static inline void run_agent(char *name, char *parm)
+{
+	pid_t pid;
+
+	if (strlen(name) < sizeof (SUFFIX))
+		return;
+
+	if (strcmp(name + strlen(name) - sizeof (".hotplug") + 1, ".hotplug") != 0)
+		return;
+
+	pid = fork();
+
+	if (pid < 0) {
+		perror("fork");
+		return;
+	} 
+	
+	if (pid > 0){
+		wait(NULL);
+		return;
+	}
+
+	execlp(name, name, parm, NULL);
+	exit(1);
+}
+
+/*
+ * enters the given directory and execute the *.hotplug files
+ */
+static void execute_dir (char *dirname, char *parm)
+{
+	DIR *directory;
+	struct dirent *entry;
+	char filename[256];
+
+	directory = opendir(dirname);
+	if (!directory)
+		return;
+
+	while ((entry = readdir(directory))) {
+		snprintf(filename, sizeof (filename),
+			 "%s%s", dirname, entry->d_name);
+		filename[sizeof (filename)-1] = '\0';
+		run_agent(filename, parm);
+	}
+
+	closedir(directory);
+}
+
+int main (int argc, char **argv)
+{
+	char dirname[256];
+
+	if (argc = 1)
+		return 0;
+
+	snprintf(dirname, sizeof (dirname), HOTPLUGDIR "/%s/", argv[1]);
+	dirname[sizeof (dirname)-1] = '\0';
+	execute_dir(dirname, argv[1]);
+
+	strcpy(dirname, HOTPLUGDIR "/default/");
+	execute_dir(dirname, argv[1]);
+	return 0;
+}



-------------------------------------------------------
SF.Net is sponsored by: Speed Start Your Linux Apps Now.
Build and deploy apps & Web services for Linux with
a free DVD software kit from IBM. Click Now!
http://ads.osdn.com/?ad_id\x1356&alloc_id438&opÌk
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

             reply	other threads:[~2004-02-27 13:02 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-02-27 13:02 Arnd Bergmann [this message]
2004-02-27 13:29 ` hotplug for klibc utils Hannes Reinecke
2004-02-27 13:53 ` Arnd Bergmann
2004-02-27 14:20 ` Hannes Reinecke
2004-02-27 16:52 ` Arnd Bergmann
2004-02-28  0:19 ` 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=200402271402.06890.arnd@arndb.de \
    --to=arnd@arndb.de \
    --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).