91daccef68
(git commit id: cb0f7127ba90ab5e8e71fc534a0a16cdbe96a88f) Add 0001-RH-remove_callout.patch * multipath no longer uses the getuid callout. It now gets the wwid from the udev database or the environment variables Add 0004-RH-fix-cciss-names.patch * convert cciss device names from cciss/cXdY to sysfs style cciss!cXdY Split 0009-RH-add-find-multipaths.patch into 0002-RH-add-wwids-file.patch and 0010-RH-add-find-multipaths.patch Add 0016-RH-change-configs.patch * default fast_io_fail to 5 and don't set the path selector in the builtin configs. Resolves: bz #831978
280 lines
6.0 KiB
Diff
280 lines
6.0 KiB
Diff
---
|
|
libmultipath/Makefile | 2
|
|
libmultipath/callout.c | 217 -----------------------------------------------
|
|
libmultipath/callout.h | 7 -
|
|
libmultipath/discovery.c | 1
|
|
multipathd/main.c | 1
|
|
5 files changed, 1 insertion(+), 227 deletions(-)
|
|
|
|
Index: multipath-tools-120518/libmultipath/Makefile
|
|
===================================================================
|
|
--- multipath-tools-120518.orig/libmultipath/Makefile
|
|
+++ multipath-tools-120518/libmultipath/Makefile
|
|
@@ -9,7 +9,7 @@ DEVLIB = libmultipath.so
|
|
LIBS = $(DEVLIB).$(SONAME)
|
|
LIBDEPS = -lpthread -ldl -ldevmapper -ludev
|
|
|
|
-OBJS = memory.o parser.o vector.o devmapper.o callout.o \
|
|
+OBJS = memory.o parser.o vector.o devmapper.o \
|
|
hwtable.o blacklist.o util.o dmparser.o config.o \
|
|
structs.o discovery.o propsel.o dict.o \
|
|
pgpolicies.o debug.o regex.o defaults.o uevent.o \
|
|
Index: multipath-tools-120518/libmultipath/callout.c
|
|
===================================================================
|
|
--- multipath-tools-120518.orig/libmultipath/callout.c
|
|
+++ /dev/null
|
|
@@ -1,217 +0,0 @@
|
|
-/*
|
|
- * Source: copy of the udev package source file
|
|
- *
|
|
- * Copyrights of the source file apply
|
|
- * Copyright (c) 2004 Christophe Varoqui
|
|
- */
|
|
-#include <stdio.h>
|
|
-#include <sys/stat.h>
|
|
-#include <string.h>
|
|
-#include <unistd.h>
|
|
-#include <sys/types.h>
|
|
-#include <stdlib.h>
|
|
-#include <fcntl.h>
|
|
-#include <sys/wait.h>
|
|
-#include <errno.h>
|
|
-
|
|
-#include "checkers.h"
|
|
-#include "vector.h"
|
|
-#include "structs.h"
|
|
-#include "util.h"
|
|
-#include "debug.h"
|
|
-
|
|
-int execute_program(char *path, char *value, int len)
|
|
-{
|
|
- int retval;
|
|
- int count;
|
|
- int status;
|
|
- int fds[2], null_fd;
|
|
- pid_t pid;
|
|
- char *pos;
|
|
- char arg[CALLOUT_MAX_SIZE];
|
|
- int argc = sizeof(arg) / 2;
|
|
- char *argv[argc + 1];
|
|
- int i;
|
|
-
|
|
- i = 0;
|
|
-
|
|
- if (strchr(path, ' ')) {
|
|
- strlcpy(arg, path, sizeof(arg));
|
|
- pos = arg;
|
|
- while (pos != NULL && i < argc) {
|
|
- if (pos[0] == '\'') {
|
|
- /* don't separate if in apostrophes */
|
|
- pos++;
|
|
- argv[i] = strsep(&pos, "\'");
|
|
- while (pos[0] == ' ')
|
|
- pos++;
|
|
- } else {
|
|
- argv[i] = strsep(&pos, " ");
|
|
- }
|
|
- i++;
|
|
- }
|
|
- } else {
|
|
- argv[i++] = path;
|
|
- }
|
|
- argv[i] = NULL;
|
|
-
|
|
- retval = pipe(fds);
|
|
-
|
|
- if (retval != 0) {
|
|
- condlog(0, "error creating pipe for callout: %s", strerror(errno));
|
|
- return -1;
|
|
- }
|
|
-
|
|
- pid = fork();
|
|
-
|
|
- switch(pid) {
|
|
- case 0:
|
|
- /* child */
|
|
- close(STDOUT_FILENO);
|
|
-
|
|
- /* dup write side of pipe to STDOUT */
|
|
- if (dup(fds[1]) < 0)
|
|
- return -1;
|
|
-
|
|
- /* Ignore writes to stderr */
|
|
- null_fd = open("/dev/null", O_WRONLY);
|
|
- if (null_fd > 0) {
|
|
- close(STDERR_FILENO);
|
|
- dup(null_fd);
|
|
- close(null_fd);
|
|
- }
|
|
-
|
|
- retval = execv(argv[0], argv);
|
|
- condlog(0, "error execing %s : %s", argv[0], strerror(errno));
|
|
- exit(-1);
|
|
- case -1:
|
|
- condlog(0, "fork failed: %s", strerror(errno));
|
|
- close(fds[0]);
|
|
- close(fds[1]);
|
|
- return -1;
|
|
- default:
|
|
- /* parent reads from fds[0] */
|
|
- close(fds[1]);
|
|
- retval = 0;
|
|
- i = 0;
|
|
- while (1) {
|
|
- count = read(fds[0], value + i, len - i-1);
|
|
- if (count <= 0)
|
|
- break;
|
|
-
|
|
- i += count;
|
|
- if (i >= len-1) {
|
|
- condlog(0, "not enough space for response from %s", argv[0]);
|
|
- retval = -1;
|
|
- break;
|
|
- }
|
|
- }
|
|
-
|
|
- if (count < 0) {
|
|
- condlog(0, "no response from %s", argv[0]);
|
|
- retval = -1;
|
|
- }
|
|
-
|
|
- if (i > 0 && value[i-1] == '\n')
|
|
- i--;
|
|
- value[i] = '\0';
|
|
-
|
|
- wait(&status);
|
|
- close(fds[0]);
|
|
-
|
|
- retval = -1;
|
|
- if (WIFEXITED(status)) {
|
|
- status = WEXITSTATUS(status);
|
|
- if (status == 0)
|
|
- retval = 0;
|
|
- else
|
|
- condlog(0, "%s exitted with %d", argv[0], status);
|
|
- }
|
|
- else if (WIFSIGNALED(status))
|
|
- condlog(0, "%s was terminated by signal %d", argv[0], WTERMSIG(status));
|
|
- else
|
|
- condlog(0, "%s terminated abnormally", argv[0]);
|
|
- }
|
|
- return retval;
|
|
-}
|
|
-
|
|
-extern int
|
|
-apply_format (char * string, char * cmd, struct path * pp)
|
|
-{
|
|
- char * pos;
|
|
- char * dst;
|
|
- char * p;
|
|
- char * q;
|
|
- int len;
|
|
- int myfree;
|
|
-
|
|
- if (!string)
|
|
- return 1;
|
|
-
|
|
- if (!cmd)
|
|
- return 1;
|
|
-
|
|
- dst = cmd;
|
|
- p = dst;
|
|
- pos = strchr(string, '%');
|
|
- myfree = CALLOUT_MAX_SIZE;
|
|
-
|
|
- if (!pos) {
|
|
- strcpy(dst, string);
|
|
- return 0;
|
|
- }
|
|
-
|
|
- len = (int) (pos - string) + 1;
|
|
- myfree -= len;
|
|
-
|
|
- if (myfree < 2)
|
|
- return 1;
|
|
-
|
|
- snprintf(p, len, "%s", string);
|
|
- p += len - 1;
|
|
- pos++;
|
|
-
|
|
- switch (*pos) {
|
|
- case 'n':
|
|
- len = strlen(pp->dev) + 1;
|
|
- myfree -= len;
|
|
-
|
|
- if (myfree < 2)
|
|
- return 1;
|
|
-
|
|
- snprintf(p, len, "%s", pp->dev);
|
|
- for (q = p; q < p + len; q++) {
|
|
- if (q && *q == '!')
|
|
- *q = '/';
|
|
- }
|
|
- p += len - 1;
|
|
- break;
|
|
- case 'd':
|
|
- len = strlen(pp->dev_t) + 1;
|
|
- myfree -= len;
|
|
-
|
|
- if (myfree < 2)
|
|
- return 1;
|
|
-
|
|
- snprintf(p, len, "%s", pp->dev_t);
|
|
- p += len - 1;
|
|
- break;
|
|
- default:
|
|
- break;
|
|
- }
|
|
- pos++;
|
|
-
|
|
- if (!*pos)
|
|
- return 0;
|
|
-
|
|
- len = strlen(pos) + 1;
|
|
- myfree -= len;
|
|
-
|
|
- if (myfree < 2)
|
|
- return 1;
|
|
-
|
|
- snprintf(p, len, "%s", pos);
|
|
- condlog(3, "reformated callout = %s", dst);
|
|
- return 0;
|
|
-}
|
|
-
|
|
Index: multipath-tools-120518/libmultipath/callout.h
|
|
===================================================================
|
|
--- multipath-tools-120518.orig/libmultipath/callout.h
|
|
+++ /dev/null
|
|
@@ -1,7 +0,0 @@
|
|
-#ifndef _CALLOUT_H
|
|
-#define _CALLOUT_H
|
|
-
|
|
-int execute_program(char *, char *, int);
|
|
-int apply_format (char *, char *, struct path *);
|
|
-
|
|
-#endif /* _CALLOUT_H */
|
|
Index: multipath-tools-120518/libmultipath/discovery.c
|
|
===================================================================
|
|
--- multipath-tools-120518.orig/libmultipath/discovery.c
|
|
+++ multipath-tools-120518/libmultipath/discovery.c
|
|
@@ -20,7 +20,6 @@
|
|
#include "structs.h"
|
|
#include "config.h"
|
|
#include "blacklist.h"
|
|
-#include "callout.h"
|
|
#include "debug.h"
|
|
#include "propsel.h"
|
|
#include "sg_include.h"
|
|
Index: multipath-tools-120518/multipathd/main.c
|
|
===================================================================
|
|
--- multipath-tools-120518.orig/multipathd/main.c
|
|
+++ multipath-tools-120518/multipathd/main.c
|
|
@@ -35,7 +35,6 @@
|
|
#include <hwtable.h>
|
|
#include <defaults.h>
|
|
#include <structs.h>
|
|
-#include <callout.h>
|
|
#include <blacklist.h>
|
|
#include <structs_vec.h>
|
|
#include <dmparser.h>
|