124 lines
3.7 KiB
Diff
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
|
||
|
|