diff options
Diffstat (limited to '0119-RHBZ-1081397-save-alua-info.patch')
-rw-r--r-- | 0119-RHBZ-1081397-save-alua-info.patch | 565 |
1 files changed, 0 insertions, 565 deletions
diff --git a/0119-RHBZ-1081397-save-alua-info.patch b/0119-RHBZ-1081397-save-alua-info.patch deleted file mode 100644 index c9913f3..0000000 --- a/0119-RHBZ-1081397-save-alua-info.patch +++ /dev/null @@ -1,565 +0,0 @@ ---- - libmultipath/prio.c | 34 ++++++++++++++++- - libmultipath/prio.h | 7 +++ - libmultipath/prioritizers/alua.c | 62 +++++++++++++++++++++++-------- - libmultipath/prioritizers/alua_rtpg.c | 22 +++++++++-- - libmultipath/prioritizers/alua_rtpg.h | 4 +- - libmultipath/prioritizers/const.c | 4 ++ - libmultipath/prioritizers/datacore.c | 3 + - libmultipath/prioritizers/def_func.h | 11 +++++ - libmultipath/prioritizers/emc.c | 4 ++ - libmultipath/prioritizers/hds.c | 4 ++ - libmultipath/prioritizers/hp_sw.c | 4 ++ - libmultipath/prioritizers/iet.c | 4 ++ - libmultipath/prioritizers/ontap.c | 4 ++ - libmultipath/prioritizers/random.c | 4 ++ - libmultipath/prioritizers/rdac.c | 4 ++ - libmultipath/prioritizers/weightedpath.c | 3 + - libmultipath/propsel.c | 4 +- - multipathd/main.c | 24 ++++++++---- - 18 files changed, 174 insertions(+), 32 deletions(-) - -Index: multipath-tools-130222/libmultipath/prio.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prio.c -+++ multipath-tools-130222/libmultipath/prio.c -@@ -112,9 +112,24 @@ struct prio * add_prio (char * name) - p->getprio = (int (*)(struct path *, char *)) dlsym(p->handle, "getprio"); - errstr = dlerror(); - if (errstr != NULL) -- condlog(0, "A dynamic linking error occurred: (%s)", errstr); -+ condlog(0, "A dynamic linking error occurred with getprio: (%s)", errstr); - if (!p->getprio) - goto out; -+ -+ p->initprio = (int (*)(struct prio *)) dlsym(p->handle, "initprio"); -+ errstr = dlerror(); -+ if (errstr != NULL) -+ condlog(0, "A dynamic linking error occurred with initprio: (%s)", errstr); -+ if (!p->initprio) -+ goto out; -+ -+ p->freeprio = (int (*)(struct prio *)) dlsym(p->handle, "freeprio"); -+ errstr = dlerror(); -+ if (errstr != NULL) -+ condlog(0, "A dynamic linking error occurred with freeprio: (%s)", errstr); -+ if (!p->freeprio) -+ goto out; -+ - list_add(&p->node, &prioritizers); - return p; - out: -@@ -122,6 +137,13 @@ out: - return NULL; - } - -+int prio_init (struct prio * p) -+{ -+ if (!p || !p->initprio) -+ return 1; -+ return p->initprio(p); -+} -+ - int prio_getprio (struct prio * p, struct path * pp) - { - return p->getprio(pp, p->args); -@@ -156,8 +178,16 @@ void prio_get (struct prio * dst, char * - strncpy(dst->name, src->name, PRIO_NAME_LEN); - if (args) - strncpy(dst->args, args, PRIO_ARGS_LEN); -+ dst->initprio = src->initprio; - dst->getprio = src->getprio; -+ dst->freeprio = src->freeprio; - dst->handle = NULL; -+ dst->context = NULL; -+ -+ if (dst->initprio(dst) != 0){ -+ memset(dst, 0x0, sizeof(struct prio)); -+ return; -+ } - - src->refcount++; - } -@@ -173,6 +203,8 @@ void prio_put (struct prio * dst) - src = NULL; - else - src = prio_lookup(dst->name); -+ if (dst->freeprio) -+ dst->freeprio(dst); - memset(dst, 0x0, sizeof(struct prio)); - free_prio(src); - } -Index: multipath-tools-130222/libmultipath/prio.h -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prio.h -+++ multipath-tools-130222/libmultipath/prio.h -@@ -46,9 +46,15 @@ struct prio { - void *handle; - int refcount; - struct list_head node; -+ void * context; - char name[PRIO_NAME_LEN]; - char args[PRIO_ARGS_LEN]; -+ int (*initprio)(struct prio * p); -+ /* You are allowed to call initprio multiple times without calling -+ * freeprio. Doing so will reinitialize it (possibly skipping -+ * allocations) */ - int (*getprio)(struct path *, char *); -+ int (*freeprio)(struct prio * p); - }; - - unsigned int get_prio_timeout(unsigned int default_timeout); -@@ -57,6 +63,7 @@ void cleanup_prio (void); - struct prio * add_prio (char *); - struct prio * prio_lookup (char *); - int prio_getprio (struct prio *, struct path *); -+int prio_init (struct prio *); - void prio_get (struct prio *, char *, char *); - void prio_put (struct prio *); - int prio_selected (struct prio *); -Index: multipath-tools-130222/libmultipath/prioritizers/alua.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/alua.c -+++ multipath-tools-130222/libmultipath/prioritizers/alua.c -@@ -37,6 +37,12 @@ static const char * aas_string[] = { - [AAS_TRANSITIONING] = "transitioning between states", - }; - -+struct alua_context { -+ int tpg_support; -+ int tpg; -+ int buflen; -+}; -+ - static const char *aas_print_string(int rc) - { - rc &= 0x7f; -@@ -51,25 +57,26 @@ static const char *aas_print_string(int - } - - int --get_alua_info(int fd) -+get_alua_info(int fd, struct alua_context *ct) - { - int rc; -- int tpg; - int aas; - -- rc = get_target_port_group_support(fd); -- if (rc < 0) -- return -ALUA_PRIO_TPGS_FAILED; -- -- if (rc == TPGS_NONE) -- return -ALUA_PRIO_NOT_SUPPORTED; -- -- tpg = get_target_port_group(fd); -- if (tpg < 0) -- return -ALUA_PRIO_RTPG_FAILED; -+ if (ct->tpg_support <= 0 || ct->tpg < 0) { -+ ct->tpg_support = get_target_port_group_support(fd); -+ if (ct->tpg_support < 0) -+ return -ALUA_PRIO_TPGS_FAILED; -+ -+ if (ct->tpg_support == TPGS_NONE) -+ return -ALUA_PRIO_NOT_SUPPORTED; -+ -+ ct->tpg = get_target_port_group(fd, &ct->buflen); -+ if (ct->tpg < 0) -+ return -ALUA_PRIO_RTPG_FAILED; -+ } - -- condlog(3, "reported target port group is %i", tpg); -- rc = get_asymmetric_access_state(fd, tpg); -+ condlog(3, "reported target port group is %i", ct->tpg); -+ rc = get_asymmetric_access_state(fd, ct->tpg, &ct->buflen); - if (rc < 0) - return -ALUA_PRIO_GETAAS_FAILED; - aas = (rc & 0x0f); -@@ -88,7 +95,7 @@ int getprio (struct path * pp, char * ar - if (pp->fd < 0) - return -ALUA_PRIO_NO_INFORMATION; - -- rc = get_alua_info(pp->fd); -+ rc = get_alua_info(pp->fd, pp->prio.context); - if (rc >= 0) { - aas = (rc & 0x0f); - priopath = (rc & 0x80); -@@ -128,3 +135,28 @@ int getprio (struct path * pp, char * ar - } - return rc; - } -+ -+int initprio(struct prio *p) -+{ -+ if (!p->context) { -+ struct alua_context *ct; -+ -+ ct = malloc(sizeof(struct alua_context)); -+ if (!ct) -+ return 1; -+ p->context = ct; -+ } -+ memset(p->context, 0, sizeof(struct alua_context)); -+ return 0; -+} -+ -+ -+int freeprio(struct prio *p) -+{ -+ if (p->context) { -+ free(p->context); -+ p->context = NULL; -+ } -+ return 0; -+} -+ -Index: multipath-tools-130222/libmultipath/prioritizers/alua_rtpg.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/alua_rtpg.c -+++ multipath-tools-130222/libmultipath/prioritizers/alua_rtpg.c -@@ -171,7 +171,7 @@ get_target_port_group_support(int fd) - } - - int --get_target_port_group(int fd) -+get_target_port_group(int fd, int *buflen_ptr) - { - unsigned char *buf; - struct vpd83_data * vpd83; -@@ -179,7 +179,12 @@ get_target_port_group(int fd) - int rc; - int buflen, scsi_buflen; - -- buflen = 128; /* Lets start from 128 */ -+ if (!buflen_ptr || *buflen_ptr == 0) { -+ buflen = 128; /* Lets start from 128 */ -+ if (buflen_ptr) -+ *buflen_ptr = 128; -+ } else -+ buflen = *buflen_ptr; - buf = (unsigned char *)malloc(buflen); - if (!buf) { - PRINT_DEBUG("malloc failed: could not allocate" -@@ -202,6 +207,8 @@ get_target_port_group(int fd) - return -RTPG_RTPG_FAILED; - } - buflen = scsi_buflen; -+ if (buflen_ptr) -+ *buflen_ptr = buflen; - memset(buf, 0, buflen); - rc = do_inquiry(fd, 1, 0x83, buf, buflen); - if (rc < 0) -@@ -269,7 +276,7 @@ do_rtpg(int fd, void* resp, long resplen - } - - int --get_asymmetric_access_state(int fd, unsigned int tpg) -+get_asymmetric_access_state(int fd, unsigned int tpg, int *buflen_ptr) - { - unsigned char *buf; - struct rtpg_data * tpgd; -@@ -278,7 +285,12 @@ get_asymmetric_access_state(int fd, unsi - int buflen; - uint32_t scsi_buflen; - -- buflen = 128; /* Initial value from old code */ -+ if (!buflen_ptr || *buflen_ptr == 0) { -+ buflen = 128; /* Initial value from old code */ -+ if (buflen_ptr) -+ *buflen_ptr = 128; -+ } else -+ buflen = *buflen_ptr; - buf = (unsigned char *)malloc(buflen); - if (!buf) { - PRINT_DEBUG ("malloc failed: could not allocate" -@@ -299,6 +311,8 @@ get_asymmetric_access_state(int fd, unsi - return -RTPG_RTPG_FAILED; - } - buflen = scsi_buflen; -+ if (buflen_ptr) -+ *buflen_ptr = buflen; - memset(buf, 0, buflen); - rc = do_rtpg(fd, buf, buflen); - if (rc < 0) -Index: multipath-tools-130222/libmultipath/prioritizers/alua_rtpg.h -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/alua_rtpg.h -+++ multipath-tools-130222/libmultipath/prioritizers/alua_rtpg.h -@@ -23,8 +23,8 @@ - #define RTPG_TPG_NOT_FOUND 4 - - int get_target_port_group_support(int fd); --int get_target_port_group(int fd); --int get_asymmetric_access_state(int fd, unsigned int tpg); -+int get_target_port_group(int fd, int *buflen_ptr); -+int get_asymmetric_access_state(int fd, unsigned int tpg, int *buflen_ptr); - - #endif /* __RTPG_H__ */ - -Index: multipath-tools-130222/libmultipath/prioritizers/const.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/const.c -+++ multipath-tools-130222/libmultipath/prioritizers/const.c -@@ -1,8 +1,12 @@ - #include <stdio.h> - - #include <prio.h> -+#include "def_func.h" - - int getprio (struct path * pp, char * args) - { - return 1; - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/datacore.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/datacore.c -+++ multipath-tools-130222/libmultipath/prioritizers/datacore.c -@@ -25,6 +25,7 @@ - #include <debug.h> - #include <prio.h> - #include <structs.h> -+#include "def_func.h" - - #define INQ_REPLY_LEN 255 - #define INQ_CMD_CODE 0x12 -@@ -111,3 +112,5 @@ int getprio (struct path * pp, char * ar - return datacore_prio(pp->dev, pp->fd, args); - } - -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/def_func.h -=================================================================== ---- /dev/null -+++ multipath-tools-130222/libmultipath/prioritizers/def_func.h -@@ -0,0 +1,11 @@ -+#ifndef _DEF_FUNC_H -+#define _DEF_FUNC_H -+ -+#include "prio.h" -+ -+#define declare_nop_prio(name) \ -+int name (struct prio *p) \ -+{ \ -+ return 0; \ -+} -+#endif /* _DEF_FUNC_H */ -Index: multipath-tools-130222/libmultipath/prioritizers/emc.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/emc.c -+++ multipath-tools-130222/libmultipath/prioritizers/emc.c -@@ -6,6 +6,7 @@ - #include <debug.h> - #include <prio.h> - #include <structs.h> -+#include "def_func.h" - - #define INQUIRY_CMD 0x12 - #define INQUIRY_CMDLEN 6 -@@ -85,3 +86,6 @@ int getprio (struct path * pp, char * ar - { - return emc_clariion_prio(pp->dev, pp->fd); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/hds.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/hds.c -+++ multipath-tools-130222/libmultipath/prioritizers/hds.c -@@ -76,6 +76,7 @@ - #include <debug.h> - #include <prio.h> - #include <structs.h> -+#include "def_func.h" - - #define INQ_REPLY_LEN 255 - #define INQ_CMD_CODE 0x12 -@@ -170,3 +171,6 @@ int getprio (struct path * pp, char * ar - { - return hds_modular_prio(pp->dev, pp->fd); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/hp_sw.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/hp_sw.c -+++ multipath-tools-130222/libmultipath/prioritizers/hp_sw.c -@@ -16,6 +16,7 @@ - #include <debug.h> - #include <prio.h> - #include <structs.h> -+#include "def_func.h" - - #define TUR_CMD_LEN 6 - #define SCSI_CHECK_CONDITION 0x2 -@@ -99,3 +100,6 @@ int getprio (struct path * pp, char * ar - { - return hp_sw_prio(pp->dev, pp->fd); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/iet.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/iet.c -+++ multipath-tools-130222/libmultipath/prioritizers/iet.c -@@ -9,6 +9,7 @@ - #include <debug.h> - #include <unistd.h> - #include <structs.h> -+#include "def_func.h" - - // - // This prioritizer suits iSCSI needs, makes it possible to prefer one path. -@@ -141,3 +142,6 @@ int getprio(struct path * pp, char * arg - { - return iet_prio(pp->dev, args); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/ontap.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/ontap.c -+++ multipath-tools-130222/libmultipath/prioritizers/ontap.c -@@ -23,6 +23,7 @@ - #include <debug.h> - #include <prio.h> - #include <structs.h> -+#include "def_func.h" - - #define INQUIRY_CMD 0x12 - #define INQUIRY_CMDLEN 6 -@@ -245,3 +246,6 @@ int getprio (struct path * pp, char * ar - { - return ontap_prio(pp->dev, pp->fd); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/random.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/random.c -+++ multipath-tools-130222/libmultipath/prioritizers/random.c -@@ -4,6 +4,7 @@ - #include <time.h> - - #include <prio.h> -+#include "def_func.h" - - int getprio (struct path * pp, char * args) - { -@@ -13,3 +14,6 @@ int getprio (struct path * pp, char * ar - srand((unsigned int)tv.tv_usec); - return 1+(int) (10.0*rand()/(RAND_MAX+1.0)); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/rdac.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/rdac.c -+++ multipath-tools-130222/libmultipath/prioritizers/rdac.c -@@ -6,6 +6,7 @@ - #include <debug.h> - #include <prio.h> - #include <structs.h> -+#include "def_func.h" - - #define INQUIRY_CMD 0x12 - #define INQUIRY_CMDLEN 6 -@@ -95,3 +96,6 @@ int getprio (struct path * pp, char * ar - { - return rdac_prio(pp->dev, pp->fd); - } -+ -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/prioritizers/weightedpath.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/prioritizers/weightedpath.c -+++ multipath-tools-130222/libmultipath/prioritizers/weightedpath.c -@@ -32,6 +32,7 @@ - #include <memory.h> - #include <debug.h> - #include <regex.h> -+#include "def_func.h" - - char *get_next_string(char **temp, char *split_char) - { -@@ -104,3 +105,5 @@ int getprio(struct path *pp, char *args) - return prio_path_weight(pp, args); - } - -+declare_nop_prio(initprio) -+declare_nop_prio(freeprio) -Index: multipath-tools-130222/libmultipath/propsel.c -=================================================================== ---- multipath-tools-130222.orig/libmultipath/propsel.c -+++ multipath-tools-130222/libmultipath/propsel.c -@@ -401,10 +401,10 @@ detect_prio(struct path * pp) - - if (get_target_port_group_support(pp->fd) <= 0) - return; -- ret = get_target_port_group(pp->fd); -+ ret = get_target_port_group(pp->fd, NULL); - if (ret < 0) - return; -- if (get_asymmetric_access_state(pp->fd, ret) < 0) -+ if (get_asymmetric_access_state(pp->fd, ret, NULL) < 0) - return; - prio_get(p, PRIO_ALUA, DEFAULT_PRIO_ARGS); - } -Index: multipath-tools-130222/multipathd/main.c -=================================================================== ---- multipath-tools-130222.orig/multipathd/main.c -+++ multipath-tools-130222/multipathd/main.c -@@ -700,20 +700,23 @@ static int - uev_update_path (struct uevent *uev, struct vectors * vecs) - { - int ro, retval = 0; -+ struct path * pp; -+ -+ pp = find_path_by_dev(vecs->pathvec, uev->kernel); -+ if (!pp) { -+ condlog(0, "%s: spurious uevent, path not found", -+ uev->kernel); -+ return 1; -+ } -+ /* reinit the prio values on change event, in case something is -+ * different */ -+ prio_init(&pp->prio); - - ro = uevent_get_disk_ro(uev); - - if (ro >= 0) { -- struct path * pp; -- - condlog(2, "%s: update path write_protect to '%d' (uevent)", - uev->kernel, ro); -- pp = find_path_by_dev(vecs->pathvec, uev->kernel); -- if (!pp) { -- condlog(0, "%s: spurious uevent, path not found", -- uev->kernel); -- return 1; -- } - if (pp->mpp) { - retval = reload_map(vecs, pp->mpp, 0); - -@@ -1218,6 +1221,11 @@ check_path (struct vectors * vecs, struc - } - - if(newstate == PATH_UP || newstate == PATH_GHOST){ -+ /* -+ * Reinitialize the prioritizer, in case something -+ * changed. -+ */ -+ prio_init(&pp->prio); - if ( pp->mpp && pp->mpp->prflag ){ - /* - * Check Persistent Reservation. |