summaryrefslogtreecommitdiffstats
path: root/0084-RHBZ-644111-read-only-bindings.patch
diff options
context:
space:
mode:
Diffstat (limited to '0084-RHBZ-644111-read-only-bindings.patch')
-rw-r--r--0084-RHBZ-644111-read-only-bindings.patch160
1 files changed, 160 insertions, 0 deletions
diff --git a/0084-RHBZ-644111-read-only-bindings.patch b/0084-RHBZ-644111-read-only-bindings.patch
new file mode 100644
index 0000000..23fce2a
--- /dev/null
+++ b/0084-RHBZ-644111-read-only-bindings.patch
@@ -0,0 +1,160 @@
+From c2f3abecdb76c4e7b3ec3aa418625b4f1b942496 Mon Sep 17 00:00:00 2001
+From: Malahal Naineni <malahal@us.ibm.com>
+Date: Mon, 16 Aug 2010 15:57:02 -0700
+Subject: [PATCH] option to multipath to not modify the bindinfs file
+
+initramfs is mounted read-write causing multipath to update the
+initramfs bindings file and name all multipath devices it finds using
+friendly names. The actual changes to the file are thrown away as they
+are only written to the memory image rather than to the disk image. This
+may cause the in memory updated initramfs bindings file inconsistent
+with the actual bindings file in the active root file system image when
+devices are added or removed.
+
+In other words, the boot time updated initramfs bindings file may have
+'uuid1 map to mpatha' and 'uuid2 map to mpathb', but the active root fs
+bindings file may have 'uuid1 map to mpathb' and 'uuid2 map to mpatha'
+
+The option, -B, will not modify the bindings file. It will only use the
+bindings file if needed. This option to multipath should be used when
+invoked in the initramfs context to avoid the inconsistency.
+
+Signed-off-by: Malahal Naineni (malahal@us.ibm.com)
+---
+ libmultipath/alias.c | 4 ++--
+ libmultipath/alias.h | 2 +-
+ libmultipath/config.h | 1 +
+ libmultipath/propsel.c | 3 ++-
+ multipath/main.c | 5 ++++-
+ multipath/multipath.8 | 5 ++++-
+ multipathd/main.c | 5 ++++-
+ 7 files changed, 18 insertions(+), 7 deletions(-)
+
+Index: multipath-tools/libmultipath/alias.c
+===================================================================
+--- multipath-tools.orig/libmultipath/alias.c
++++ multipath-tools/libmultipath/alias.c
+@@ -206,7 +206,7 @@ allocate_binding(int fd, char *wwid, int
+ }
+
+ char *
+-get_user_friendly_alias(char *wwid, char *file)
++get_user_friendly_alias(char *wwid, char *file, int bindings_read_only)
+ {
+ char *alias;
+ int fd, scan_fd, id;
+@@ -250,7 +250,7 @@ get_user_friendly_alias(char *wwid, char
+ return NULL;
+ }
+
+- if (!alias && can_write)
++ if (!alias && can_write && !bindings_read_only)
+ alias = allocate_binding(fd, wwid, id);
+
+ fclose(f);
+Index: multipath-tools/libmultipath/alias.h
+===================================================================
+--- multipath-tools.orig/libmultipath/alias.h
++++ multipath-tools/libmultipath/alias.h
+@@ -7,5 +7,5 @@
+ "# alias wwid\n" \
+ "#\n"
+
+-char *get_user_friendly_alias(char *wwid, char *file);
++char *get_user_friendly_alias(char *wwid, char *file, int bindings_readonly);
+ char *get_user_friendly_wwid(char *alias, char *file);
+Index: multipath-tools/libmultipath/config.h
+===================================================================
+--- multipath-tools.orig/libmultipath/config.h
++++ multipath-tools/libmultipath/config.h
+@@ -76,6 +76,7 @@ struct config {
+ int rr_weight;
+ int no_path_retry;
+ int user_friendly_names;
++ int bindings_read_only;
+ int pg_timeout;
+ int max_fds;
+ int force_reload;
+Index: multipath-tools/libmultipath/propsel.c
+===================================================================
+--- multipath-tools.orig/libmultipath/propsel.c
++++ multipath-tools/libmultipath/propsel.c
+@@ -219,7 +219,8 @@ select_alias (struct multipath * mp)
+ mp->alias = NULL;
+ if (conf->user_friendly_names)
+ mp->alias = get_user_friendly_alias(mp->wwid,
+- conf->bindings_file);
++ conf->bindings_file,
++ conf->bindings_read_only);
+ if (mp->alias == NULL){
+ char *alias;
+ if ((alias = MALLOC(WWID_SIZE)) != NULL){
+Index: multipath-tools/multipath/main.c
+===================================================================
+--- multipath-tools.orig/multipath/main.c
++++ multipath-tools/multipath/main.c
+@@ -383,7 +383,7 @@ main (int argc, char *argv[])
+ condlog(0, "multipath tools need sysfs mounted");
+ exit(1);
+ }
+- while ((arg = getopt(argc, argv, ":dchl::FfM:v:p:b:rq")) != EOF ) {
++ while ((arg = getopt(argc, argv, ":dchl::FfM:v:p:b:Brq")) != EOF ) {
+ switch(arg) {
+ case 1: printf("optarg : %s\n",optarg);
+ break;
+@@ -403,6 +403,9 @@ main (int argc, char *argv[])
+ case 'q':
+ conf->allow_queueing = 1;
+ break;
++ case 'B':
++ conf->bindings_read_only = 1;
++ break;
+ case 'd':
+ if (!conf->dry_run)
+ conf->dry_run = 1;
+Index: multipath-tools/multipath/multipath.8
+===================================================================
+--- multipath-tools.orig/multipath/multipath.8
++++ multipath-tools/multipath/multipath.8
+@@ -6,7 +6,7 @@ multipath \- Device mapper target autoco
+ .RB [\| \-v\ \c
+ .IR verbosity \|]
+ .RB [\| \-d \|]
+-.RB [\| \-h | \-l | \-ll | \-f | \-F \|]
++.RB [\| \-h | \-l | \-ll | \-f | \-F | \-B \|]
+ .RB [\| \-p\ \c
+ .BR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|]
+ .RB [\| device \|]
+@@ -47,6 +47,9 @@ flush a multipath device map specified a
+ .B \-F
+ flush all unused multipath device maps
+ .TP
++.B \-B
++treat the bindings file as read only
++.TP
+ .BI \-p " policy"
+ force maps to specified policy:
+ .RS 1.2i
+Index: multipath-tools/multipathd/main.c
+===================================================================
+--- multipath-tools.orig/multipathd/main.c
++++ multipath-tools/multipathd/main.c
+@@ -1640,7 +1640,7 @@ main (int argc, char *argv[])
+ if (!conf)
+ exit(1);
+
+- while ((arg = getopt(argc, argv, ":dv:k::")) != EOF ) {
++ while ((arg = getopt(argc, argv, ":dv:k::B")) != EOF ) {
+ switch(arg) {
+ case 'd':
+ logsink = 0;
+@@ -1653,6 +1653,9 @@ main (int argc, char *argv[])
+
+ conf->verbosity = atoi(optarg);
+ break;
++ case 'B':
++ conf->bindings_read_only = 1;
++ break;
+ case 'k':
+ uxclnt(optarg);
+ exit(0);