> > Multipathd does not run, it creates the pid file then exits (unless it's a > hidden process somehow). > here is the proper fix, as it will be included in the next release : --- multipath-tools-0.2.4/multipathd/main.c 2004-06-28 18:44:31.000000000 +0200 +++ multipath-tools-0.2.5/multipathd/main.c 2004-07-05 09:55:55.000000000 +0200 @@ -544,6 +544,68 @@ return (failedpaths); } +#define VECTOR_ADDSTR(a, b) \ + str = zalloc (6 * sizeof(char)); \ + sprintf (str, b); \ + vector_alloc_slot(a); \ + vector_set_slot(a, str); + +static void +setup_default_blist (vector blist) +{ + char * str; + + VECTOR_ADDSTR(blist, "cciss"); + VECTOR_ADDSTR(blist, "fd"); + VECTOR_ADDSTR(blist, "hd"); + VECTOR_ADDSTR(blist, "md"); + VECTOR_ADDSTR(blist, "dm"); + VECTOR_ADDSTR(blist, "sr"); + VECTOR_ADDSTR(blist, "scd"); + VECTOR_ADDSTR(blist, "st"); + VECTOR_ADDSTR(blist, "ram"); + VECTOR_ADDSTR(blist, "raw"); + VECTOR_ADDSTR(blist, "loop"); +} + +#define VECTOR_ADDHWE(a, b, c, d) \ + hwe = zalloc (sizeof(struct hwentry)); \ + hwe->vendor = zalloc (9 * sizeof(char)); \ + sprintf (hwe->vendor, b); \ + hwe->product = zalloc (17 * sizeof(char)); \ + sprintf (hwe->product, c); \ + hwe->checker_index = d; \ + vector_alloc_slot(a); \ + vector_set_slot(a, hwe); + +static void +setup_default_hwtable (vector hwtable) +{ + struct hwentry * hwe; + + VECTOR_ADDHWE(hwtable, "COMPAQ", "HSV110 (C)COMPAQ", 0); + VECTOR_ADDHWE(hwtable, "COMPAQ", "MSA1000", 0); + VECTOR_ADDHWE(hwtable, "COMPAQ", "MSA1000 VOLUME", 0); + VECTOR_ADDHWE(hwtable, "DEC", "HSG80", 0); + VECTOR_ADDHWE(hwtable, "HP", "HSV110", 0); + VECTOR_ADDHWE(hwtable, "HP", "A6189A", 0); + VECTOR_ADDHWE(hwtable, "HP", "OPEN-", 0); + VECTOR_ADDHWE(hwtable, "DDN", "SAN DataDirector", 0); + VECTOR_ADDHWE(hwtable, "FSC", "CentricStor", 0); + VECTOR_ADDHWE(hwtable, "HITACHI", "DF400", 0); + VECTOR_ADDHWE(hwtable, "HITACHI", "DF500", 0); + VECTOR_ADDHWE(hwtable, "HITACHI", "DF600", 0); + VECTOR_ADDHWE(hwtable, "IBM", "ProFibre 4000R", 0); + VECTOR_ADDHWE(hwtable, "SGI", "TP9100", 0); + VECTOR_ADDHWE(hwtable, "SGI", "TP9300", 0); + VECTOR_ADDHWE(hwtable, "SGI", "TP9400", 0); + VECTOR_ADDHWE(hwtable, "SGI", "TP9500", 0); + VECTOR_ADDHWE(hwtable, "3PARdata", "VV", 0); + VECTOR_ADDHWE(hwtable, "STK", "OPENstorage D280", 0); + VECTOR_ADDHWE(hwtable, "SUN", "StorEdge 3510", 0); + VECTOR_ADDHWE(hwtable, "SUN", "T4", 0); +} + void pidfile (pid_t pid) { FILE *file; @@ -626,7 +688,7 @@ struct paths *failedpaths; pid_t pid; - pid = fork (); + pid = fork(); /* can't fork */ if (pid < 0) @@ -634,28 +696,39 @@ /* let the parent die happy */ if (pid > 0) - exit (0); + exit(0); /* child's play */ - openlog (argv[0], 0, LOG_DAEMON); - LOG (1, "--------start up--------"); + openlog(argv[0], 0, LOG_DAEMON); + LOG(1, "--------start up--------"); - pidfile (pid); - signal_init (); + pidfile(pid); + signal_init(); - failedpaths = initpaths (); + failedpaths = initpaths(); - LOG (2, "read " CONFIGFILE); + LOG(2, "read " CONFIGFILE); init_data(CONFIGFILE, init_keywords); + /* fill the voids left in the config file */ + if (hwtable == NULL) { + hwtable = vector_alloc(); + setup_default_hwtable(hwtable); + } + + if (blist == NULL) { + blist = vector_alloc(); + setup_default_blist(blist); + }