3f562fdb0b
Add 0111-RH-dont-show-pg-timeout.patch * The kernel doesn't support pg_timeout, so multipath shouldn't bother to display it Add 0112-RHBZ-1194917-add-config_dir-option.patch * multipath will now also read its configuration from files with the .conf suffix in the directory specified by config_dir which defaults to /etc/multipath/conf.d Add 0113-RHBZ-1194917-cleanup.patch * cleanup some unnecessary code Add 0114-RHBZ-1196394-delayed-reintegration.patch * Add "delay_watch_checks" and "delay_wait_checks" options to delay reintegration of flakey paths. Add 0115-RHBZ-1198418-fix-double-free.patch * multipath was freeing the multipath alias twice if it failed to create the multipath device. Add 0116-UPBZ-1188179-dell-36xxi.patch * new builtin configurations. Add 0117-RHBZ-1198424-autodetect-clariion-alua.patch * configure multipath to automatically detect alua settings on clariion devices.
186 lines
4.0 KiB
Diff
186 lines
4.0 KiB
Diff
---
|
|
libmultipath/parser.c | 103 +++-----------------------------------------------
|
|
libmultipath/parser.h | 6 --
|
|
2 files changed, 8 insertions(+), 101 deletions(-)
|
|
|
|
Index: multipath-tools-130222/libmultipath/parser.c
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/parser.c
|
|
+++ multipath-tools-130222/libmultipath/parser.c
|
|
@@ -280,8 +280,8 @@ out:
|
|
return NULL;
|
|
}
|
|
|
|
-int
|
|
-read_line(char *buf, int size)
|
|
+static int
|
|
+read_line(FILE *stream, char *buf, int size)
|
|
{
|
|
int ch;
|
|
int count = 0;
|
|
@@ -297,95 +297,6 @@ read_line(char *buf, int size)
|
|
return (ch == EOF) ? 0 : 1;
|
|
}
|
|
|
|
-vector
|
|
-read_value_block(void)
|
|
-{
|
|
- char *buf;
|
|
- int i;
|
|
- char *str = NULL;
|
|
- char *dup;
|
|
- vector vec = NULL;
|
|
- vector elements = vector_alloc();
|
|
-
|
|
- if (!elements)
|
|
- return NULL;
|
|
-
|
|
- buf = (char *) MALLOC(MAXBUF);
|
|
-
|
|
- if (!buf) {
|
|
- vector_free(elements);
|
|
- return NULL;
|
|
- }
|
|
-
|
|
- while (read_line(buf, MAXBUF)) {
|
|
- vec = alloc_strvec(buf);
|
|
- if (vec) {
|
|
- str = VECTOR_SLOT(vec, 0);
|
|
- if (!strcmp(str, EOB)) {
|
|
- free_strvec(vec);
|
|
- break;
|
|
- }
|
|
-
|
|
- for (i = 0; i < VECTOR_SIZE(vec); i++) {
|
|
- str = VECTOR_SLOT(vec, i);
|
|
- dup = (char *) MALLOC(strlen(str) + 1);
|
|
- if (!dup)
|
|
- goto out;
|
|
- memcpy(dup, str, strlen(str));
|
|
-
|
|
- if (!vector_alloc_slot(elements)) {
|
|
- free_strvec(vec);
|
|
- goto out1;
|
|
- }
|
|
-
|
|
- vector_set_slot(elements, dup);
|
|
- }
|
|
- free_strvec(vec);
|
|
- }
|
|
- memset(buf, 0, MAXBUF);
|
|
- }
|
|
- FREE(buf);
|
|
- return elements;
|
|
-out1:
|
|
- FREE(dup);
|
|
-out:
|
|
- FREE(buf);
|
|
- vector_free(elements);
|
|
- return NULL;
|
|
-}
|
|
-
|
|
-int
|
|
-alloc_value_block(vector strvec, void (*alloc_func) (vector))
|
|
-{
|
|
- char *buf;
|
|
- char *str = NULL;
|
|
- vector vec = NULL;
|
|
-
|
|
- buf = (char *) MALLOC(MAXBUF);
|
|
-
|
|
- if (!buf)
|
|
- return 1;
|
|
-
|
|
- while (read_line(buf, MAXBUF)) {
|
|
- vec = alloc_strvec(buf);
|
|
- if (vec) {
|
|
- str = VECTOR_SLOT(vec, 0);
|
|
- if (!strcmp(str, EOB)) {
|
|
- free_strvec(vec);
|
|
- break;
|
|
- }
|
|
-
|
|
- if (VECTOR_SIZE(vec))
|
|
- (*alloc_func) (vec);
|
|
-
|
|
- free_strvec(vec);
|
|
- }
|
|
- memset(buf, 0, MAXBUF);
|
|
- }
|
|
- FREE(buf);
|
|
- return 0;
|
|
-}
|
|
-
|
|
void *
|
|
set_value(vector strvec)
|
|
{
|
|
@@ -561,7 +472,7 @@ validate_config_strvec(vector strvec, ch
|
|
}
|
|
|
|
static int
|
|
-process_stream(vector keywords, char *file)
|
|
+process_stream(FILE *stream, vector keywords, char *file)
|
|
{
|
|
int i;
|
|
int r = 0;
|
|
@@ -582,7 +493,7 @@ process_stream(vector keywords, char *fi
|
|
return 1;
|
|
}
|
|
|
|
- while (read_line(buf, MAXBUF)) {
|
|
+ while (read_line(stream, buf, MAXBUF)) {
|
|
line_nr++;
|
|
strvec = alloc_strvec(buf);
|
|
memset(buf,0, MAXBUF);
|
|
@@ -621,7 +532,8 @@ process_stream(vector keywords, char *fi
|
|
|
|
if (keyword->sub) {
|
|
kw_level++;
|
|
- r += process_stream(keyword->sub, file);
|
|
+ r += process_stream(stream,
|
|
+ keyword->sub, file);
|
|
kw_level--;
|
|
}
|
|
break;
|
|
@@ -656,6 +568,7 @@ int
|
|
process_file(char *file)
|
|
{
|
|
int r;
|
|
+ FILE *stream;
|
|
|
|
if (!keywords) {
|
|
condlog(0, "No keywords alocated");
|
|
@@ -670,7 +583,7 @@ process_file(char *file)
|
|
|
|
/* Stream handling */
|
|
line_nr = 0;
|
|
- r = process_stream(keywords, file);
|
|
+ r = process_stream(stream, keywords, file);
|
|
fclose(stream);
|
|
//free_keywords(keywords);
|
|
|
|
Index: multipath-tools-130222/libmultipath/parser.h
|
|
===================================================================
|
|
--- multipath-tools-130222.orig/libmultipath/parser.h
|
|
+++ multipath-tools-130222/libmultipath/parser.h
|
|
@@ -47,9 +47,6 @@ struct keyword {
|
|
int unique;
|
|
};
|
|
|
|
-/* global var exported */
|
|
-FILE *stream;
|
|
-
|
|
/* Reloading helpers */
|
|
#define SET_RELOAD (reload = 1)
|
|
#define UNSET_RELOAD (reload = 0)
|
|
@@ -72,9 +69,6 @@ extern int _install_keyword(char *string
|
|
extern void dump_keywords(vector keydump, int level);
|
|
extern void free_keywords(vector keywords);
|
|
extern vector alloc_strvec(char *string);
|
|
-extern int read_line(char *buf, int size);
|
|
-extern vector read_value_block(void);
|
|
-extern int alloc_value_block(vector strvec, void (*alloc_func) (vector));
|
|
extern void *set_value(vector strvec);
|
|
extern int alloc_keywords(void);
|
|
extern int process_file(char *conf_file);
|