device-mapper-multipath/0001-for-upstream-add-tpg_pref-prioritizer.patch
2009-10-27 09:58:59 +00:00

124 lines
3.7 KiB
Diff

From faf6bfc96b98562626e0ea12aecb582032ff4cab Mon Sep 17 00:00:00 2001
From: Fabio M. Di Nitto <fdinitto@redhat.com>
Date: Mon, 19 Oct 2009 07:02:02 +0200
Subject: [PATCH 1/1] for-upstream: add tpg_pref prioritizer
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
---
:100644 100644 fc9277f... 1f40859... M libmultipath/prio.h
:100644 100644 949a60a... 5021c04... M libmultipath/prioritizers/Makefile
:100644 100644 0048a44... 22513ab... M libmultipath/prioritizers/alua.c
:100644 100644 0531052... cd9c29d... M libmultipath/prioritizers/alua_rtpg.c
:100644 100644 bddbbdd... daf95a6... M libmultipath/prioritizers/alua_spc3.h
libmultipath/prio.h | 1 +
libmultipath/prioritizers/Makefile | 10 ++++++++++
libmultipath/prioritizers/alua.c | 7 +++++++
libmultipath/prioritizers/alua_rtpg.c | 4 ++++
libmultipath/prioritizers/alua_spc3.h | 6 ++++++
5 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/libmultipath/prio.h b/libmultipath/prio.h
index fc9277f..1f40859 100644
--- a/libmultipath/prio.h
+++ b/libmultipath/prio.h
@@ -16,6 +16,7 @@
* Known prioritizers for use in hwtable.c
*/
#define PRIO_ALUA "alua"
+#define PRIO_TPG_PREF "tpg_pref"
#define PRIO_CONST "const"
#define PRIO_EMC "emc"
#define PRIO_HDS "hds"
diff --git a/libmultipath/prioritizers/Makefile b/libmultipath/prioritizers/Makefile
index 949a60a..5021c04 100644
--- a/libmultipath/prioritizers/Makefile
+++ b/libmultipath/prioritizers/Makefile
@@ -11,6 +11,7 @@ LIBS = \
libprioemc.so \
libpriordac.so \
libprioalua.so \
+ libpriotpg_pref.so \
libprionetapp.so \
libpriohds.so
@@ -21,9 +22,18 @@ all: $(LIBS)
libprioalua.so: alua.o alua_rtpg.o
$(CC) $(SHARED_FLAGS) -o $@ $^
+libpriotpg_pref.so: pref.o pref_rtpg.o
+ $(CC) $(SHARED_FLAGS) -o $@ $^
+
libprio%.so: %.o
$(CC) $(SHARED_FLAGS) -o $@ $^
+pref.o: alua.c
+ $(CC) $(CFLAGS) -DTPG_PREF -c -o $@ $<
+
+pref_rtpg.o: alua_rtpg.c
+ $(CC) $(CFLAGS) -DTPG_PREF -c -o $@ $<
+
install: $(LIBS)
$(INSTALL_PROGRAM) -m 755 libprio*.so $(DESTDIR)$(libdir)
diff --git a/libmultipath/prioritizers/alua.c b/libmultipath/prioritizers/alua.c
index 0048a44..22513ab 100644
--- a/libmultipath/prioritizers/alua.c
+++ b/libmultipath/prioritizers/alua.c
@@ -28,6 +28,12 @@
int
get_alua_info(int fd)
{
+#ifdef TPG_PREF
+ char * aas_string[] = {
+ [AAS_OPTIMIZED] = "preferred",
+ [AAS_STANDBY] = "non-preferred",
+ };
+#else
char * aas_string[] = {
[AAS_OPTIMIZED] = "active/optimized",
[AAS_NON_OPTIMIZED] = "active/non-optimized",
@@ -35,6 +41,7 @@ get_alua_info(int fd)
[AAS_UNAVAILABLE] = "unavailable",
[AAS_TRANSITIONING] = "transitioning between states",
};
+#endif
int rc;
int tpg;
diff --git a/libmultipath/prioritizers/alua_rtpg.c b/libmultipath/prioritizers/alua_rtpg.c
index 0531052..cd9c29d 100644
--- a/libmultipath/prioritizers/alua_rtpg.c
+++ b/libmultipath/prioritizers/alua_rtpg.c
@@ -293,7 +293,11 @@ get_asymmetric_access_state(int fd, unsigned int tpg)
"group.\n");
} else {
PRINT_DEBUG("pref=%i\n", dscr->b0);
+#ifdef TPG_PREF
+ rc = rtpg_tpg_dscr_get_pref(dscr);
+#else
rc = rtpg_tpg_dscr_get_aas(dscr);
+#endif
}
}
}
diff --git a/libmultipath/prioritizers/alua_spc3.h b/libmultipath/prioritizers/alua_spc3.h
index bddbbdd..daf95a6 100644
--- a/libmultipath/prioritizers/alua_spc3.h
+++ b/libmultipath/prioritizers/alua_spc3.h
@@ -302,6 +302,12 @@ rtpg_tpg_dscr_get_aas(struct rtpg_tpg_dscr *d)
return (d->b0 & 0x0f);
}
+static inline int
+rtpg_tpg_dscr_get_pref(struct rtpg_tpg_dscr *d)
+{
+ return ((d->b0 & 0x80)?AAS_OPTIMIZED:AAS_STANDBY);
+}
+
struct rtpg_data {
unsigned char length[4]; /* size-4 */
struct rtpg_tpg_dscr data[0];
--
1.6.5.1