diff options
author | takeshi_hoshina <takeshi_hoshina@mail.toyota.co.jp> | 2020-11-02 11:07:33 +0900 |
---|---|---|
committer | takeshi_hoshina <takeshi_hoshina@mail.toyota.co.jp> | 2020-11-02 11:07:33 +0900 |
commit | 1c7d6584a7811b7785ae5c1e378f14b5ba0971cf (patch) | |
tree | cd70a267a5ef105ba32f200aa088e281fbd85747 /external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files | |
parent | 4204309872da5cb401cbb2729d9e2d4869a87f42 (diff) |
basesystem-jjsandbox/ToshikazuOhiwa/master-jj
recipes
Diffstat (limited to 'external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files')
33 files changed, 350 insertions, 3969 deletions
diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-add-explicit-dependency-on-libraries.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-add-explicit-dependency-on-libraries.patch new file mode 100644 index 00000000..2827bb87 --- /dev/null +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-add-explicit-dependency-on-libraries.patch @@ -0,0 +1,40 @@ +From 04884263d1de8c427a7a15bd1cf6466ea65d3a0b Mon Sep 17 00:00:00 2001 +From: Hongxu Jia <hongxu.jia@windriver.com> +Date: Mon, 25 May 2020 23:22:55 -0700 +Subject: [PATCH] add explicit dependency on libraries + +[snip] +gcc/i686-overc-linux/10.1.0/ld: cannot find -lmpathpersist +collect2: error: ld returned 1 exit status +Makefile:36: recipe for target 'multipathd' failed +make[1]: *** [multipathd] Error 1 +make[1]: Leaving directory 'git/multipathd' +Makefile:29: recipe for target 'multipathd' failed +make: *** [multipathd] Error 2 +ln -sf libmpathpersist.so.0 libmpathpersist.so +[snip] + +Upstream-Status: Pending + +Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> +--- + Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index bea0a0b2..37a77129 100644 +--- a/Makefile ++++ b/Makefile +@@ -29,7 +29,8 @@ $(BUILDDIRS): + $(MAKE) -C $@ + + multipath multipathd mpathpersist libmpathpersist : libmultipath +-mpathpersist: libmpathpersist ++mpathpersist multipathd: libmpathpersist ++libdmmp libmultipath mpathpersist multipath multipathd: libmpathcmd + + DEPS_ON_MULTIPATH := \ + multipath \ +-- +2.21.0 + diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-fix-bug-of-do_compile-and-do_install.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-fix-bug-of-do_compile-and-do_install.patch new file mode 100644 index 00000000..ac873376 --- /dev/null +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-fix-bug-of-do_compile-and-do_install.patch @@ -0,0 +1,44 @@ +From fd90d952edaa4b27e62a29fdba7a201288d440eb Mon Sep 17 00:00:00 2001 +From: Wang Mingyu <wangmy@cn.fujitsu.com> +Date: Sun, 10 May 2020 21:22:53 +0800 +Subject: [PATCH] fix bug of do_compile and do_install + +when multiple processes make run in parallel, +because of dependency error will occur. + +Signed-off-by: Wang Mingyu <wangmy@cn.fujitsu.com> +--- + Makefile | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/Makefile b/Makefile +index 1dee3680..bea0a0b2 100644 +--- a/Makefile ++++ b/Makefile +@@ -28,9 +28,22 @@ all: $(BUILDDIRS) + $(BUILDDIRS): + $(MAKE) -C $@ + +-multipath multipathd mpathpersist: libmultipath ++multipath multipathd mpathpersist libmpathpersist : libmultipath + mpathpersist: libmpathpersist + ++DEPS_ON_MULTIPATH := \ ++ multipath \ ++ libmultipath/prioritizers \ ++ libmultipath/checkers \ ++ libmultipath/foreign \ ++ multipathd \ ++ mpathpersist \ ++ libmpathpersist ++ ++$(DEPS_ON_MULTIPATH:=.install): libmultipath.install ++mpathpersist.install: libmpathpersist.install ++libdmmp.install libmultipath/foreign.install: mpathpersist.install ++ + $(BUILDDIRS.clean): + $(MAKE) -C ${@:.clean=} clean + +-- +2.17.1 + diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch deleted file mode 100644 index 1d983e97..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0001-multipath-tools-add-RDAC-SUN-ArrayStorage-to-hwtable.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Wed, 11 Apr 2018 15:14:13 +0200 -Subject: [PATCH] multipath-tools: add RDAC SUN/ArrayStorage to hwtable - -Already in scsi_dh: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/scsi/scsi_dh.c#n70 - -Cc: NetApp RDAC team <ng-eseries-upstream-maintainers@netapp.com> -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/hwtable.c | 12 ++++++++++++ - 1 file changed, 12 insertions(+) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 88b4700..827e899 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -890,6 +890,18 @@ static struct hwentry default_hw[] = { - .no_path_retry = 30, - }, - { -+ .vendor = "SUN", -+ .product = "ArrayStorage", -+ .bl_product = "Universal Xport", -+ .pgpolicy = GROUP_BY_PRIO, -+ .checker_name = RDAC, -+ .features = "2 pg_init_retries 50", -+ .hwhandler = "1 rdac", -+ .prio_name = PRIO_RDAC, -+ .pgfailback = -FAILBACK_IMMEDIATE, -+ .no_path_retry = 30, -+ }, -+ { - /* ZFS Storage Appliances */ - .vendor = "SUN", - .product = "(Sun Storage|ZFS Storage|COMSTAR)", --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch deleted file mode 100644 index 73f000ac..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0002-multipath-tools-remove-c-from-__cpluscplus-misspelle.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Tue, 24 Apr 2018 15:03:40 +0200 -Subject: [PATCH] multipath-tools: remove "c" from __cpluscplus, misspelled - -found by cppcheck(http://cppcheck.sf.net/): -[libmpathcmd/mpath_cmd.h:24]: (error) Invalid number of character '{' when these macros are defined: '__cpluscplus'. - -Cc: Benjamin Marzinski <bmarzins@redhat.com> -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmpathcmd/mpath_cmd.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmpathcmd/mpath_cmd.h b/libmpathcmd/mpath_cmd.h -index aaa8da9..df9d938 100644 ---- a/libmpathcmd/mpath_cmd.h -+++ b/libmpathcmd/mpath_cmd.h -@@ -20,7 +20,7 @@ - #ifndef LIB_MPATH_CMD_H - #define LIB_MPATH_CMD_H - --#ifdef __cpluscplus -+#ifdef __cplusplus - extern "C" { - #endif - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch deleted file mode 100644 index 7358e1ae..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0003-multipath-tools-remove-emacs-autoconfig-of-kpartx-gp.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Thu, 12 Apr 2018 18:17:13 +0200 -Subject: [PATCH] multipath-tools: remove emacs autoconfig of kpartx/gpt.h - -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - kpartx/gpt.h | 19 ------------------- - 1 file changed, 19 deletions(-) - -diff --git a/kpartx/gpt.h b/kpartx/gpt.h -index 66ce8f1..7bb54b7 100644 ---- a/kpartx/gpt.h -+++ b/kpartx/gpt.h -@@ -109,22 +109,3 @@ int read_gpt_pt (int fd, struct slice all, struct slice *sp, int ns); - - - #endif -- --/* -- * Overrides for Emacs so that we follow Linus's tabbing style. -- * Emacs will notice this stuff at the end of the file and automatically -- * adjust the settings for this buffer only. This must remain at the end -- * of the file. -- * --------------------------------------------------------------------------- -- * Local variables: -- * c-indent-level: 4 -- * c-brace-imaginary-offset: 0 -- * c-brace-offset: -4 -- * c-argdecl-indent: 4 -- * c-label-offset: -4 -- * c-continued-statement-offset: 4 -- * c-continued-brace-offset: 0 -- * indent-tabs-mode: nil -- * tab-width: 8 -- * End: -- */ --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch deleted file mode 100644 index 13f18b57..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0004-multipath-tools-replace-FSF-address-with-a-www-point.patch +++ /dev/null @@ -1,191 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Fri, 11 May 2018 15:42:43 +0200 -Subject: [PATCH] multipath-tools: replace FSF address with a www pointer - -Less prone to future modifications, new FSF licences -point exactly to this url: <http://www.gnu.org/licenses/>. -And sending a smail to FSF is outdated. - -First clean up was done in 5619a39c433ac3d10a88079593cec1aa6472cbeb - -Cc: Martin Wilck <mwilck@suse.com> -Cc: Benjamin Marzinski <bmarzins@redhat.com> -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/dm-generic.c | 4 +--- - libmultipath/dm-generic.h | 4 +--- - libmultipath/foreign.c | 4 +--- - libmultipath/foreign.h | 4 +--- - libmultipath/foreign/nvme.c | 4 +--- - libmultipath/generic.c | 4 +--- - libmultipath/generic.h | 4 +--- - tests/dmevents.c | 2 +- - tests/parser.c | 2 +- - tests/uevent.c | 2 +- - tests/util.c | 2 +- - 11 files changed, 11 insertions(+), 25 deletions(-) - -diff --git a/libmultipath/dm-generic.c b/libmultipath/dm-generic.c -index bdc9ca0..d752991 100644 ---- a/libmultipath/dm-generic.c -+++ b/libmultipath/dm-generic.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - - #include <stdint.h> -diff --git a/libmultipath/dm-generic.h b/libmultipath/dm-generic.h -index 5d59724..986429f 100644 ---- a/libmultipath/dm-generic.h -+++ b/libmultipath/dm-generic.h -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - #ifndef _DM_GENERIC_H - #define _DM_GENERIC_H -diff --git a/libmultipath/foreign.c b/libmultipath/foreign.c -index 7217184..80b399b 100644 ---- a/libmultipath/foreign.c -+++ b/libmultipath/foreign.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - - #include <sys/sysmacros.h> -diff --git a/libmultipath/foreign.h b/libmultipath/foreign.h -index 973f368..697f12f 100644 ---- a/libmultipath/foreign.h -+++ b/libmultipath/foreign.h -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - #ifndef _FOREIGN_H - #define _FOREIGN_H -diff --git a/libmultipath/foreign/nvme.c b/libmultipath/foreign/nvme.c -index 235f75d..280b6bd 100644 ---- a/libmultipath/foreign/nvme.c -+++ b/libmultipath/foreign/nvme.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - - #include <sys/sysmacros.h> -diff --git a/libmultipath/generic.c b/libmultipath/generic.c -index 6f7a2cd..0d1e632 100644 ---- a/libmultipath/generic.c -+++ b/libmultipath/generic.c -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - - -diff --git a/libmultipath/generic.h b/libmultipath/generic.h -index 7f7fe66..6346ffe 100644 ---- a/libmultipath/generic.h -+++ b/libmultipath/generic.h -@@ -12,9 +12,7 @@ - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -- USA. -+ along with this program. If not, see <https://www.gnu.org/licenses/>. - */ - #ifndef _GENERIC_H - #define _GENERIC_H -diff --git a/tests/dmevents.c b/tests/dmevents.c -index bba51dc..3399c81 100644 ---- a/tests/dmevents.c -+++ b/tests/dmevents.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -diff --git a/tests/parser.c b/tests/parser.c -index a7e7598..29859da 100644 ---- a/tests/parser.c -+++ b/tests/parser.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -diff --git a/tests/uevent.c b/tests/uevent.c -index acfcb14..b0d0bfd 100644 ---- a/tests/uevent.c -+++ b/tests/uevent.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - -diff --git a/tests/util.c b/tests/util.c -index 113b134..839effd 100644 ---- a/tests/util.c -+++ b/tests/util.c -@@ -12,7 +12,7 @@ - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License -- * along with this program; if not, write to the Free Software -+ * along with this program. If not, see <https://www.gnu.org/licenses/>. - * - */ - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch deleted file mode 100644 index 953e739e..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0005-multipath-tools-Remove-trailing-leading-whitespaces-.patch +++ /dev/null @@ -1,156 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Fri, 11 May 2018 15:43:11 +0200 -Subject: [PATCH] multipath-tools: Remove trailing/leading whitespaces and - reformat code - -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: device-mapper development <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - Makefile.inc | 23 +++++++++++------------ - kpartx/mac.h | 2 +- - kpartx/test-kpartx | 2 +- - libmpathcmd/Makefile | 2 +- - libmultipath/hwtable.c | 14 +++++++------- - libmultipath/print.h | 2 +- - multipathd/main.h | 6 +++--- - 7 files changed, 25 insertions(+), 26 deletions(-) - -diff --git a/Makefile.inc b/Makefile.inc -index 57a1835..af2f5ba 100644 ---- a/Makefile.inc -+++ b/Makefile.inc -@@ -103,21 +103,20 @@ LDFLAGS = -Wl,-z,relro -Wl,-z,now - BIN_LDFLAGS = -pie - - # Check whether a function with name $1 has been declared in header file $2. --check_func = \ -- $(shell \ -+check_func = $(shell \ - if grep -Eq "^[^[:blank:]]+[[:blank:]]+$1[[:blank:]]*(.*)*" "$2"; then \ -- found=1; \ -- status="yes"; \ -- else \ -- found=0; \ -- status="no"; \ -- fi; \ -- echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -- echo "$$found" \ -- ) -+ found=1; \ -+ status="yes"; \ -+ else \ -+ found=0; \ -+ status="no"; \ -+ fi; \ -+ echo 1>&2 "Checking for $1 in $2 ... $$status"; \ -+ echo "$$found" \ -+ ) - - # Checker whether a file with name $1 exists --check_file = $(shell \ -+check_file = $(shell \ - if [ -f "$1" ]; then \ - found=1; \ - status="yes"; \ -diff --git a/kpartx/mac.h b/kpartx/mac.h -index a44cf38..55c3ec9 100644 ---- a/kpartx/mac.h -+++ b/kpartx/mac.h -@@ -24,7 +24,7 @@ struct mac_driver_desc { - uint16_t signature; /* expected to be MAC_DRIVER_MAGIC */ - uint16_t block_size; - uint32_t block_count; -- /* ... more stuff */ -+ /* ... more stuff */ - }; - - #endif -diff --git a/kpartx/test-kpartx b/kpartx/test-kpartx -index 9cee20f..d2001dc 100755 ---- a/kpartx/test-kpartx -+++ b/kpartx/test-kpartx -@@ -131,7 +131,7 @@ step "create DM devices (spans)" - # They also serve as DM devices to test partition removal on those. - - TABLE="\ --0 $((SIZE/SECTSIZ-OFFS)) linear $DEV1 $OFFS -+0 $((SIZE/SECTSIZ-OFFS)) linear $DEV1 $OFFS - $((SIZE/SECTSIZ-OFFS)) $((SIZE/SECTSIZ-OFFS)) linear $DEV2 $OFFS" - - SPAN1=kpt -diff --git a/libmpathcmd/Makefile b/libmpathcmd/Makefile -index 53c0899..0f6b816 100644 ---- a/libmpathcmd/Makefile -+++ b/libmpathcmd/Makefile -@@ -27,7 +27,7 @@ uninstall: - $(RM) $(DESTDIR)$(includedir)/mpath_cmd.h - - clean: dep_clean -- $(RM) core *.a *.o *.so *.so.* *.gz -+ $(RM) core *.a *.o *.so *.so.* *.gz - - include $(wildcard $(OBJS:.o=.d)) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 827e899..2ca6888 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -78,13 +78,13 @@ - #endif - - static struct hwentry default_hw[] = { -- /* -- * Generic NVMe -- * -- * Due to the parsing logic in find_hwe(), generic entries -- * have to be put on top of this list, and more specific ones -- * below. -- */ -+ /* -+ * Generic NVMe devices -+ * -+ * Due to the parsing logic in find_hwe(), generic entries -+ * have to be put on top of this list, and more specific ones -+ * below. -+ */ - { - .vendor = "NVME", - .product = ".*", -diff --git a/libmultipath/print.h b/libmultipath/print.h -index 7ba6438..9b5a23a 100644 ---- a/libmultipath/print.h -+++ b/libmultipath/print.h -@@ -113,7 +113,7 @@ int _snprint_multipath (const struct gen_multipath *, char *, int, - const char *, int); - #define snprint_multipath(buf, len, fmt, mp, v) \ - _snprint_multipath(dm_multipath_to_gen(mp), buf, len, fmt, v) --int _snprint_multipath_topology (const struct gen_multipath *, char *, int, -+int _snprint_multipath_topology (const struct gen_multipath *, char *, int, - int verbosity); - #define snprint_multipath_topology(buf, len, mpp, v) \ - _snprint_multipath_topology (dm_multipath_to_gen(mpp), buf, len, v) -diff --git a/multipathd/main.h b/multipathd/main.h -index af39558..8fd426b 100644 ---- a/multipathd/main.h -+++ b/multipathd/main.h -@@ -29,11 +29,11 @@ int ev_remove_map (char *, char *, int, struct vectors *); - int set_config_state(enum daemon_status); - void * mpath_alloc_prin_response(int prin_sa); - int prin_do_scsi_ioctl(char *, int rq_servact, struct prin_resp * resp, -- int noisy); -+ int noisy); - void dumpHex(const char * , int len, int no_ascii); - int prout_do_scsi_ioctl(char * , int rq_servact, int rq_scope, -- unsigned int rq_type, struct prout_param_descriptor *param, -- int noisy); -+ unsigned int rq_type, -+ struct prout_param_descriptor *param, int noisy); - int mpath_pr_event_handle(struct path *pp); - void * mpath_pr_event_handler_fn (void * ); - int update_map_pr(struct multipath *mpp); --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch deleted file mode 100644 index c6fd5b4c..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0006-multipath-tools-fix-compilation-with-musl-libc.patch +++ /dev/null @@ -1,58 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Fri, 11 May 2018 18:39:44 +0200 -Subject: [PATCH] multipath-tools: fix compilation with musl libc -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -In file included from alias.c:15: -file.h:9:47: error: unknown type name ‘mode_t’; did you mean ‘time_t’? - int ensure_directories_exist(const char *str, mode_t dir_mode); - ^~~~~~ - time_t - -sysfs.c: In function ‘sysfs_is_multipathed’: -sysfs.c:304:15: error: ‘PATH_MAX’ undeclared (first use in this function); did you mean ‘PATH_UP’? - char pathbuf[PATH_MAX]; - ^~~~~~~~ - PATH_UP - -Cc: Martin Wilck <mwilck@suse.com> -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/file.h | 2 ++ - libmultipath/sysfs.c | 1 + - 2 files changed, 3 insertions(+) - -diff --git a/libmultipath/file.h b/libmultipath/file.h -index 29520c7..3c75c90 100644 ---- a/libmultipath/file.h -+++ b/libmultipath/file.h -@@ -5,6 +5,8 @@ - #ifndef _FILE_H - #define _FILE_H - -+#include <sys/stat.h> -+ - #define FILE_TIMEOUT 30 - int ensure_directories_exist(const char *str, mode_t dir_mode); - int open_file(const char *file, int *can_write, const char *header); -diff --git a/libmultipath/sysfs.c b/libmultipath/sysfs.c -index ee72e6a..16e0a73 100644 ---- a/libmultipath/sysfs.c -+++ b/libmultipath/sysfs.c -@@ -28,6 +28,7 @@ - #include <dirent.h> - #include <libudev.h> - #include <fnmatch.h> -+#include <limits.h> - - #include "checkers.h" - #include "vector.h" --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch deleted file mode 100644 index 9e608e16..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0007-multipath-tools-add-x-to-doc-preclean.pl-and-split-m.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Sun, 13 May 2018 00:39:41 +0200 -Subject: [PATCH] multipath-tools: add +x to doc-preclean.pl and split-man.pl - -It is not strictly necessary, but it helps identify bin files. - -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libdmmp/docs/doc-preclean.pl | 0 - libdmmp/docs/split-man.pl | 0 - 2 files changed, 0 insertions(+), 0 deletions(-) - mode change 100644 => 100755 libdmmp/docs/doc-preclean.pl - mode change 100644 => 100755 libdmmp/docs/split-man.pl - -diff --git a/libdmmp/docs/doc-preclean.pl b/libdmmp/docs/doc-preclean.pl -old mode 100644 -new mode 100755 -diff --git a/libdmmp/docs/split-man.pl b/libdmmp/docs/split-man.pl -old mode 100644 -new mode 100755 --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch deleted file mode 100644 index 37521587..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0008-multipath-tools-refresh-kernel-doc-from-kernel-sourc.patch +++ /dev/null @@ -1,784 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Sun, 13 May 2018 00:39:42 +0200 -Subject: [PATCH] multipath-tools: refresh kernel-doc from kernel sources - -Cc: Gris Ge <fge@redhat.com> -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: device-mapper development <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libdmmp/docs/kernel-doc | 671 ++++++++++++++++++++++++++---------------------- - 1 file changed, 368 insertions(+), 303 deletions(-) - -diff --git a/libdmmp/docs/kernel-doc b/libdmmp/docs/kernel-doc -index fee8952..0057d8e 100755 ---- a/libdmmp/docs/kernel-doc -+++ b/libdmmp/docs/kernel-doc -@@ -1,4 +1,5 @@ - #!/usr/bin/env perl -+# SPDX-License-Identifier: GPL-2.0 - - use warnings; - use strict; -@@ -328,13 +329,15 @@ my $lineprefix=""; - use constant { - STATE_NORMAL => 0, # normal code - STATE_NAME => 1, # looking for function name -- STATE_FIELD => 2, # scanning field start -- STATE_PROTO => 3, # scanning prototype -- STATE_DOCBLOCK => 4, # documentation block -- STATE_INLINE => 5, # gathering documentation outside main block -+ STATE_BODY_MAYBE => 2, # body - or maybe more description -+ STATE_BODY => 3, # the body of the comment -+ STATE_PROTO => 4, # scanning prototype -+ STATE_DOCBLOCK => 5, # documentation block -+ STATE_INLINE => 6, # gathering documentation outside main block - }; - my $state; - my $in_doc_sect; -+my $leading_space; - - # Inline documentation state - use constant { -@@ -363,7 +366,7 @@ my $doc_sect = $doc_com . - my $doc_content = $doc_com_body . '(.*)'; - my $doc_block = $doc_com . 'DOC:\s*(.*)?'; - my $doc_inline_start = '^\s*/\*\*\s*$'; --my $doc_inline_sect = '\s*\*\s*(@[\w\s]+):(.*)'; -+my $doc_inline_sect = '\s*\*\s*(@\s*[\w][\w\.]*\s*):(.*)'; - my $doc_inline_end = '^\s*\*/\s*$'; - my $doc_inline_oneline = '^\s*/\*\*\s*(@[\w\s]+):\s*(.*)\s*\*/\s*$'; - my $export_symbol = '^\s*EXPORT_SYMBOL(_GPL)?\s*\(\s*(\w+)\s*\)\s*;'; -@@ -553,10 +556,9 @@ sub output_highlight { - } - if ($line eq ""){ - if (! $output_preformatted) { -- print $lineprefix, local_unescape($blankline); -+ print $lineprefix, $blankline; - } - } else { -- $line =~ s/\\\\\\/\&/g; - if ($output_mode eq "man" && substr($line, 0, 1) eq ".") { - print "\\&$line"; - } else { -@@ -747,17 +749,73 @@ sub output_blockhead_rst(%) { - } - } - --sub output_highlight_rst { -- my $contents = join "\n",@_; -- my $line; -- -- # undo the evil effects of xml_escape() earlier -- $contents = xml_unescape($contents); -- -+# -+# Apply the RST highlights to a sub-block of text. -+# -+sub highlight_block($) { -+ # The dohighlight kludge requires the text be called $contents -+ my $contents = shift; - eval $dohighlight; - die $@ if $@; -+ return $contents; -+} - -- foreach $line (split "\n", $contents) { -+# -+# Regexes used only here. -+# -+my $sphinx_literal = '^[^.].*::$'; -+my $sphinx_cblock = '^\.\.\ +code-block::'; -+ -+sub output_highlight_rst { -+ my $input = join "\n",@_; -+ my $output = ""; -+ my $line; -+ my $in_literal = 0; -+ my $litprefix; -+ my $block = ""; -+ -+ foreach $line (split "\n",$input) { -+ # -+ # If we're in a literal block, see if we should drop out -+ # of it. Otherwise pass the line straight through unmunged. -+ # -+ if ($in_literal) { -+ if (! ($line =~ /^\s*$/)) { -+ # -+ # If this is the first non-blank line in a literal -+ # block we need to figure out what the proper indent is. -+ # -+ if ($litprefix eq "") { -+ $line =~ /^(\s*)/; -+ $litprefix = '^' . $1; -+ $output .= $line . "\n"; -+ } elsif (! ($line =~ /$litprefix/)) { -+ $in_literal = 0; -+ } else { -+ $output .= $line . "\n"; -+ } -+ } else { -+ $output .= $line . "\n"; -+ } -+ } -+ # -+ # Not in a literal block (or just dropped out) -+ # -+ if (! $in_literal) { -+ $block .= $line . "\n"; -+ if (($line =~ /$sphinx_literal/) || ($line =~ /$sphinx_cblock/)) { -+ $in_literal = 1; -+ $litprefix = ""; -+ $output .= highlight_block($block); -+ $block = "" -+ } -+ } -+ } -+ -+ if ($block) { -+ $output .= highlight_block($block); -+ } -+ foreach $line (split "\n", $output) { - print $lineprefix . $line . "\n"; - } - } -@@ -1062,7 +1120,7 @@ sub dump_struct($$) { - # Handle bitmaps - $arg =~ s/:\s*\d+\s*//g; - # Handle arrays -- $arg =~ s/\[\S+\]//g; -+ $arg =~ s/\[.*\]//g; - # The type may have multiple words, - # and multiple IDs can be defined, like: - # const struct foo, *bar, foobar -@@ -1422,8 +1480,6 @@ sub push_parameter($$$$) { - } - } - -- $param = xml_escape($param); -- - # strip spaces from $param so that it is one continuous string - # on @parameterlist; - # this fixes a problem where check_sections() cannot find -@@ -1522,6 +1578,7 @@ sub dump_function($$) { - $prototype =~ s/__meminit +//; - $prototype =~ s/__must_check +//; - $prototype =~ s/__weak +//; -+ $prototype =~ s/__sched +//; - my $define = $prototype =~ s/^#\s*define\s+//; #ak added - $prototype =~ s/__attribute__\s*\(\( - (?: -@@ -1748,47 +1805,6 @@ sub process_proto_type($$) { - } - } - --# xml_escape: replace <, >, and & in the text stream; --# --# however, formatting controls that are generated internally/locally in the --# kernel-doc script are not escaped here; instead, they begin life like --# $blankline_html (4 of '\' followed by a mnemonic + ':'), then these strings --# are converted to their mnemonic-expected output, without the 4 * '\' & ':', --# just before actual output; (this is done by local_unescape()) --sub xml_escape($) { -- my $text = shift; -- if ($output_mode eq "man") { -- return $text; -- } -- $text =~ s/\&/\\\\\\amp;/g; -- $text =~ s/\</\\\\\\lt;/g; -- $text =~ s/\>/\\\\\\gt;/g; -- return $text; --} -- --# xml_unescape: reverse the effects of xml_escape --sub xml_unescape($) { -- my $text = shift; -- if ($output_mode eq "man") { -- return $text; -- } -- $text =~ s/\\\\\\amp;/\&/g; -- $text =~ s/\\\\\\lt;/</g; -- $text =~ s/\\\\\\gt;/>/g; -- return $text; --} -- --# convert local escape strings to html --# local escape strings look like: '\\\\menmonic:' (that's 4 backslashes) --sub local_unescape($) { -- my $text = shift; -- if ($output_mode eq "man") { -- return $text; -- } -- $text =~ s/\\\\\\\\lt:/</g; -- $text =~ s/\\\\\\\\gt:/>/g; -- return $text; --} - - sub map_filename($) { - my $file; -@@ -1826,15 +1842,291 @@ sub process_export_file($) { - close(IN); - } - --sub process_file($) { -- my $file; -+# -+# Parsers for the various processing states. -+# -+# STATE_NORMAL: looking for the /** to begin everything. -+# -+sub process_normal() { -+ if (/$doc_start/o) { -+ $state = STATE_NAME; # next line is always the function name -+ $in_doc_sect = 0; -+ $declaration_start_line = $. + 1; -+ } -+} -+ -+# -+# STATE_NAME: Looking for the "name - description" line -+# -+sub process_name($$) { -+ my $file = shift; - my $identifier; -- my $func; - my $descr; -- my $in_purpose = 0; -+ -+ if (/$doc_block/o) { -+ $state = STATE_DOCBLOCK; -+ $contents = ""; -+ $new_start_line = $. + 1; -+ -+ if ( $1 eq "" ) { -+ $section = $section_intro; -+ } else { -+ $section = $1; -+ } -+ } -+ elsif (/$doc_decl/o) { -+ $identifier = $1; -+ if (/\s*([\w\s]+?)(\(\))?\s*-/) { -+ $identifier = $1; -+ } -+ -+ $state = STATE_BODY; -+ # if there's no @param blocks need to set up default section -+ # here -+ $contents = ""; -+ $section = $section_default; -+ $new_start_line = $. + 1; -+ if (/-(.*)/) { -+ # strip leading/trailing/multiple spaces -+ $descr= $1; -+ $descr =~ s/^\s*//; -+ $descr =~ s/\s*$//; -+ $descr =~ s/\s+/ /g; -+ $declaration_purpose = $descr; -+ $state = STATE_BODY_MAYBE; -+ } else { -+ $declaration_purpose = ""; -+ } -+ -+ if (($declaration_purpose eq "") && $verbose) { -+ print STDERR "${file}:$.: warning: missing initial short description on line:\n"; -+ print STDERR $_; -+ ++$warnings; -+ } -+ -+ if ($identifier =~ m/^struct/) { -+ $decl_type = 'struct'; -+ } elsif ($identifier =~ m/^union/) { -+ $decl_type = 'union'; -+ } elsif ($identifier =~ m/^enum/) { -+ $decl_type = 'enum'; -+ } elsif ($identifier =~ m/^typedef/) { -+ $decl_type = 'typedef'; -+ } else { -+ $decl_type = 'function'; -+ } -+ -+ if ($verbose) { -+ print STDERR "${file}:$.: info: Scanning doc for $identifier\n"; -+ } -+ } else { -+ print STDERR "${file}:$.: warning: Cannot understand $_ on line $.", -+ " - I thought it was a doc line\n"; -+ ++$warnings; -+ $state = STATE_NORMAL; -+ } -+} -+ -+ -+# -+# STATE_BODY and STATE_BODY_MAYBE: the bulk of a kerneldoc comment. -+# -+sub process_body($$) { -+ my $file = shift; -+ -+ if (/$doc_sect/i) { # case insensitive for supported section names -+ $newsection = $1; -+ $newcontents = $2; -+ -+ # map the supported section names to the canonical names -+ if ($newsection =~ m/^description$/i) { -+ $newsection = $section_default; -+ } elsif ($newsection =~ m/^context$/i) { -+ $newsection = $section_context; -+ } elsif ($newsection =~ m/^returns?$/i) { -+ $newsection = $section_return; -+ } elsif ($newsection =~ m/^\@return$/) { -+ # special: @return is a section, not a param description -+ $newsection = $section_return; -+ } -+ -+ if (($contents ne "") && ($contents ne "\n")) { -+ if (!$in_doc_sect && $verbose) { -+ print STDERR "${file}:$.: warning: contents before sections\n"; -+ ++$warnings; -+ } -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ } -+ -+ $in_doc_sect = 1; -+ $state = STATE_BODY; -+ $contents = $newcontents; -+ $new_start_line = $.; -+ while (substr($contents, 0, 1) eq " ") { -+ $contents = substr($contents, 1); -+ } -+ if ($contents ne "") { -+ $contents .= "\n"; -+ } -+ $section = $newsection; -+ $leading_space = undef; -+ } elsif (/$doc_end/) { -+ if (($contents ne "") && ($contents ne "\n")) { -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ } -+ # look for doc_com + <text> + doc_end: -+ if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') { -+ print STDERR "${file}:$.: warning: suspicious ending line: $_"; -+ ++$warnings; -+ } -+ -+ $prototype = ""; -+ $state = STATE_PROTO; -+ $brcount = 0; -+ } elsif (/$doc_content/) { -+ # miguel-style comment kludge, look for blank lines after -+ # @parameter line to signify start of description -+ if ($1 eq "") { -+ if ($section =~ m/^@/ || $section eq $section_context) { -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ $new_start_line = $.; -+ } else { -+ $contents .= "\n"; -+ } -+ $state = STATE_BODY; -+ } elsif ($state == STATE_BODY_MAYBE) { -+ # Continued declaration purpose -+ chomp($declaration_purpose); -+ $declaration_purpose .= " " . $1; -+ $declaration_purpose =~ s/\s+/ /g; -+ } else { -+ my $cont = $1; -+ if ($section =~ m/^@/ || $section eq $section_context) { -+ if (!defined $leading_space) { -+ if ($cont =~ m/^(\s+)/) { -+ $leading_space = $1; -+ } else { -+ $leading_space = ""; -+ } -+ } -+ $cont =~ s/^$leading_space//; -+ } -+ $contents .= $cont . "\n"; -+ } -+ } else { -+ # i dont know - bad line? ignore. -+ print STDERR "${file}:$.: warning: bad line: $_"; -+ ++$warnings; -+ } -+} -+ -+ -+# -+# STATE_PROTO: reading a function/whatever prototype. -+# -+sub process_proto($$) { -+ my $file = shift; -+ -+ if (/$doc_inline_oneline/) { -+ $section = $1; -+ $contents = $2; -+ if ($contents ne "") { -+ $contents .= "\n"; -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ } -+ } elsif (/$doc_inline_start/) { -+ $state = STATE_INLINE; -+ $inline_doc_state = STATE_INLINE_NAME; -+ } elsif ($decl_type eq 'function') { -+ process_proto_function($_, $file); -+ } else { -+ process_proto_type($_, $file); -+ } -+} -+ -+# -+# STATE_DOCBLOCK: within a DOC: block. -+# -+sub process_docblock($$) { -+ my $file = shift; -+ -+ if (/$doc_end/) { -+ dump_doc_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ $function = ""; -+ %parameterdescs = (); -+ %parametertypes = (); -+ @parameterlist = (); -+ %sections = (); -+ @sectionlist = (); -+ $prototype = ""; -+ $state = STATE_NORMAL; -+ } elsif (/$doc_content/) { -+ if ( $1 eq "" ) { -+ $contents .= $blankline; -+ } else { -+ $contents .= $1 . "\n"; -+ } -+ } -+} -+ -+# -+# STATE_INLINE: docbook comments within a prototype. -+# -+sub process_inline($$) { -+ my $file = shift; -+ -+ # First line (state 1) needs to be a @parameter -+ if ($inline_doc_state == STATE_INLINE_NAME && /$doc_inline_sect/o) { -+ $section = $1; -+ $contents = $2; -+ $new_start_line = $.; -+ if ($contents ne "") { -+ while (substr($contents, 0, 1) eq " ") { -+ $contents = substr($contents, 1); -+ } -+ $contents .= "\n"; -+ } -+ $inline_doc_state = STATE_INLINE_TEXT; -+ # Documentation block end */ -+ } elsif (/$doc_inline_end/) { -+ if (($contents ne "") && ($contents ne "\n")) { -+ dump_section($file, $section, $contents); -+ $section = $section_default; -+ $contents = ""; -+ } -+ $state = STATE_PROTO; -+ $inline_doc_state = STATE_INLINE_NA; -+ # Regular text -+ } elsif (/$doc_content/) { -+ if ($inline_doc_state == STATE_INLINE_TEXT) { -+ $contents .= $1 . "\n"; -+ # nuke leading blank lines -+ if ($contents =~ /^\s*$/) { -+ $contents = ""; -+ } -+ } elsif ($inline_doc_state == STATE_INLINE_NAME) { -+ $inline_doc_state = STATE_INLINE_ERROR; -+ print STDERR "${file}:$.: warning: "; -+ print STDERR "Incorrect use of kernel-doc format: $_"; -+ ++$warnings; -+ } -+ } -+} -+ -+ -+sub process_file($) { -+ my $file; - my $initial_section_counter = $section_counter; - my ($orig_file) = @_; -- my $leading_space; - - $file = map_filename($orig_file); - -@@ -1853,250 +2145,23 @@ sub process_file($) { - } - # Replace tabs by spaces - while ($_ =~ s/\t+/' ' x (length($&) * 8 - length($`) % 8)/e) {}; -+ # Hand this line to the appropriate state handler - if ($state == STATE_NORMAL) { -- if (/$doc_start/o) { -- $state = STATE_NAME; # next line is always the function name -- $in_doc_sect = 0; -- $declaration_start_line = $. + 1; -- } -- } elsif ($state == STATE_NAME) {# this line is the function name (always) -- if (/$doc_block/o) { -- $state = STATE_DOCBLOCK; -- $contents = ""; -- $new_start_line = $. + 1; -- -- if ( $1 eq "" ) { -- $section = $section_intro; -- } else { -- $section = $1; -- } -- } -- elsif (/$doc_decl/o) { -- $identifier = $1; -- if (/\s*([\w\s]+?)\s*-/) { -- $identifier = $1; -- } -- -- $state = STATE_FIELD; -- # if there's no @param blocks need to set up default section -- # here -- $contents = ""; -- $section = $section_default; -- $new_start_line = $. + 1; -- if (/-(.*)/) { -- # strip leading/trailing/multiple spaces -- $descr= $1; -- $descr =~ s/^\s*//; -- $descr =~ s/\s*$//; -- $descr =~ s/\s+/ /g; -- $declaration_purpose = xml_escape($descr); -- $in_purpose = 1; -- } else { -- $declaration_purpose = ""; -- } -- -- if (($declaration_purpose eq "") && $verbose) { -- print STDERR "${file}:$.: warning: missing initial short description on line:\n"; -- print STDERR $_; -- ++$warnings; -- } -- -- if ($identifier =~ m/^struct/) { -- $decl_type = 'struct'; -- } elsif ($identifier =~ m/^union/) { -- $decl_type = 'union'; -- } elsif ($identifier =~ m/^enum/) { -- $decl_type = 'enum'; -- } elsif ($identifier =~ m/^typedef/) { -- $decl_type = 'typedef'; -- } else { -- $decl_type = 'function'; -- } -- -- if ($verbose) { -- print STDERR "${file}:$.: info: Scanning doc for $identifier\n"; -- } -- } else { -- print STDERR "${file}:$.: warning: Cannot understand $_ on line $.", -- " - I thought it was a doc line\n"; -- ++$warnings; -- $state = STATE_NORMAL; -- } -- } elsif ($state == STATE_FIELD) { # look for head: lines, and include content -- if (/$doc_sect/i) { # case insensitive for supported section names -- $newsection = $1; -- $newcontents = $2; -- -- # map the supported section names to the canonical names -- if ($newsection =~ m/^description$/i) { -- $newsection = $section_default; -- } elsif ($newsection =~ m/^context$/i) { -- $newsection = $section_context; -- } elsif ($newsection =~ m/^returns?$/i) { -- $newsection = $section_return; -- } elsif ($newsection =~ m/^\@return$/) { -- # special: @return is a section, not a param description -- $newsection = $section_return; -- } -- -- if (($contents ne "") && ($contents ne "\n")) { -- if (!$in_doc_sect && $verbose) { -- print STDERR "${file}:$.: warning: contents before sections\n"; -- ++$warnings; -- } -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- } -- -- $in_doc_sect = 1; -- $in_purpose = 0; -- $contents = $newcontents; -- $new_start_line = $.; -- while (substr($contents, 0, 1) eq " ") { -- $contents = substr($contents, 1); -- } -- if ($contents ne "") { -- $contents .= "\n"; -- } -- $section = $newsection; -- $leading_space = undef; -- } elsif (/$doc_end/) { -- if (($contents ne "") && ($contents ne "\n")) { -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- } -- # look for doc_com + <text> + doc_end: -- if ($_ =~ m'\s*\*\s*[a-zA-Z_0-9:\.]+\*/') { -- print STDERR "${file}:$.: warning: suspicious ending line: $_"; -- ++$warnings; -- } -- -- $prototype = ""; -- $state = STATE_PROTO; -- $brcount = 0; --# print STDERR "end of doc comment, looking for prototype\n"; -- } elsif (/$doc_content/) { -- # miguel-style comment kludge, look for blank lines after -- # @parameter line to signify start of description -- if ($1 eq "") { -- if ($section =~ m/^@/ || $section eq $section_context) { -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- $new_start_line = $.; -- } else { -- $contents .= "\n"; -- } -- $in_purpose = 0; -- } elsif ($in_purpose == 1) { -- # Continued declaration purpose -- chomp($declaration_purpose); -- $declaration_purpose .= " " . xml_escape($1); -- $declaration_purpose =~ s/\s+/ /g; -- } else { -- my $cont = $1; -- if ($section =~ m/^@/ || $section eq $section_context) { -- if (!defined $leading_space) { -- if ($cont =~ m/^(\s+)/) { -- $leading_space = $1; -- } else { -- $leading_space = ""; -- } -- } -- -- $cont =~ s/^$leading_space//; -- } -- $contents .= $cont . "\n"; -- } -- } else { -- # i dont know - bad line? ignore. -- print STDERR "${file}:$.: warning: bad line: $_"; -- ++$warnings; -- } -+ process_normal(); -+ } elsif ($state == STATE_NAME) { -+ process_name($file, $_); -+ } elsif ($state == STATE_BODY || $state == STATE_BODY_MAYBE) { -+ process_body($file, $_); - } elsif ($state == STATE_INLINE) { # scanning for inline parameters -- # First line (state 1) needs to be a @parameter -- if ($inline_doc_state == STATE_INLINE_NAME && /$doc_inline_sect/o) { -- $section = $1; -- $contents = $2; -- $new_start_line = $.; -- if ($contents ne "") { -- while (substr($contents, 0, 1) eq " ") { -- $contents = substr($contents, 1); -- } -- $contents .= "\n"; -- } -- $inline_doc_state = STATE_INLINE_TEXT; -- # Documentation block end */ -- } elsif (/$doc_inline_end/) { -- if (($contents ne "") && ($contents ne "\n")) { -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- } -- $state = STATE_PROTO; -- $inline_doc_state = STATE_INLINE_NA; -- # Regular text -- } elsif (/$doc_content/) { -- if ($inline_doc_state == STATE_INLINE_TEXT) { -- $contents .= $1 . "\n"; -- # nuke leading blank lines -- if ($contents =~ /^\s*$/) { -- $contents = ""; -- } -- } elsif ($inline_doc_state == STATE_INLINE_NAME) { -- $inline_doc_state = STATE_INLINE_ERROR; -- print STDERR "${file}:$.: warning: "; -- print STDERR "Incorrect use of kernel-doc format: $_"; -- ++$warnings; -- } -- } -- } elsif ($state == STATE_PROTO) { # scanning for function '{' (end of prototype) -- if (/$doc_inline_oneline/) { -- $section = $1; -- $contents = $2; -- if ($contents ne "") { -- $contents .= "\n"; -- dump_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- } -- } elsif (/$doc_inline_start/) { -- $state = STATE_INLINE; -- $inline_doc_state = STATE_INLINE_NAME; -- } elsif ($decl_type eq 'function') { -- process_proto_function($_, $file); -- } else { -- process_proto_type($_, $file); -- } -+ process_inline($file, $_); -+ } elsif ($state == STATE_PROTO) { -+ process_proto($file, $_); - } elsif ($state == STATE_DOCBLOCK) { -- if (/$doc_end/) -- { -- dump_doc_section($file, $section, xml_escape($contents)); -- $section = $section_default; -- $contents = ""; -- $function = ""; -- %parameterdescs = (); -- %parametertypes = (); -- @parameterlist = (); -- %sections = (); -- @sectionlist = (); -- $prototype = ""; -- $state = STATE_NORMAL; -- } -- elsif (/$doc_content/) -- { -- if ( $1 eq "" ) -- { -- $contents .= $blankline; -- } -- else -- { -- $contents .= $1 . "\n"; -- } -- } -+ process_docblock($file, $_); - } - } -+ -+ # Make sure we got something interesting. - if ($initial_section_counter == $section_counter) { - if ($output_mode ne "none") { - print STDERR "${file}:1: warning: no structured comments found\n"; --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch deleted file mode 100644 index 2cae0750..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0009-multipath-tools-configure-hitachi-ams2000-and-hus100.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Xose Vazquez Perez <xose.vazquez@gmail.com> -Date: Mon, 14 May 2018 17:30:17 +0200 -Subject: [PATCH] multipath-tools: configure hitachi ams2000 and hus100 as full - active arrays - -AMS2000 and HUS100 families are active/active arrays. - -Based on https://support.hitachivantara.com/download/epcra/df818913.pdf -and internal hitachi docs. - -Cc: Matthias Rudolph <Matthias.Rudolph@hitachivantara.com> -Cc: Christophe Varoqui <christophe.varoqui@opensvc.com> -Cc: DM-DEV ML <dm-devel@redhat.com> -Signed-off-by: Xose Vazquez Perez <xose.vazquez@gmail.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/hwtable.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 2ca6888..148f0ba 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -398,13 +398,13 @@ static struct hwentry default_hw[] = { - * Mail : matthias.rudolph@hds.com - */ - { -- /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families */ -+ /* USP-V, HUS VM, VSP, VSP G1X00 and VSP GX00 families / HP XP */ - .vendor = "(HITACHI|HP)", - .product = "^OPEN-", - .pgpolicy = MULTIBUS, - }, - { -- /* AMS 2000 and HUS 100 families */ -+ /* AMS other than AMS 2000 */ - .vendor = "HITACHI", - .product = "^DF", - .no_path_retry = NO_PATH_RETRY_QUEUE, -@@ -412,6 +412,12 @@ static struct hwentry default_hw[] = { - .pgfailback = -FAILBACK_IMMEDIATE, - .prio_name = PRIO_HDS, - }, -+ { -+ /* AMS 2000 and HUS 100 families */ -+ .vendor = "HITACHI", -+ .product = "^DF600F", -+ .pgpolicy = MULTIBUS, -+ }, - /* - * IBM - * --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch deleted file mode 100644 index 2dda2eda..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0010-libmultipath-don-t-reject-maps-with-undefined-prio.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck <mwilck@suse.com> -Date: Wed, 21 Mar 2018 10:34:18 +0100 -Subject: [PATCH] libmultipath: don't reject maps with undefined prio - -libmultipath's prio routines can deal with pp->priority == PRIO_UNDEF -just fine. PRIO_UNDEF is just a very low priority. So there's -no reason to reject setting up a multipath map because paths have -undefined priority. - -Signed-off-by: Martin Wilck <mwilck@suse.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/configure.c | 5 ----- - 1 file changed, 5 deletions(-) - -diff --git a/libmultipath/configure.c b/libmultipath/configure.c -index 5796683..5c54f9b 100644 ---- a/libmultipath/configure.c -+++ b/libmultipath/configure.c -@@ -1063,9 +1063,6 @@ int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, - continue; - } - -- if (pp1->priority == PRIO_UNDEF) -- mpp->action = ACT_REJECT; -- - if (!mpp->paths) { - condlog(0, "%s: skip coalesce (no paths)", mpp->alias); - remove_map(mpp, vecs, 0); -@@ -1091,8 +1088,6 @@ int coalesce_paths (struct vectors * vecs, vector newmp, char * refwwid, - mpp->size); - mpp->action = ACT_REJECT; - } -- if (pp2->priority == PRIO_UNDEF) -- mpp->action = ACT_REJECT; - } - verify_paths(mpp, vecs); - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch deleted file mode 100644 index 96a814ff..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0011-multipathd-handle-errors-in-uxlsnr-as-fatal.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck <mwilck@suse.com> -Date: Wed, 21 Mar 2018 10:34:19 +0100 -Subject: [PATCH] multipathd: handle errors in uxlsnr as fatal - -The ppoll() calls of the uxlsnr thread are vital for proper functioning of -multipathd. If the uxlsnr thread can't open the socket or fails to call ppoll() -for other reasons, quit the daemon. If we don't do that, multipathd may -hang in a state where it can't be terminated any more, because the uxlsnr -thread is responsible for handling all signals. This happens e.g. if -systemd's multipathd.socket is running in and multipathd is started from -outside systemd. - -24f2844 "multipathd: fix signal blocking logic" has made this problem more -severe. Before that patch, the signals weren't actually blocked in any thread. -That's not to say 24f2844 was wrong. I still think it's correct, we just -need this one on top. - -Signed-off-by: Martin Wilck <mwilck@suse.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - multipathd/uxlsnr.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/multipathd/uxlsnr.c b/multipathd/uxlsnr.c -index cdafd82..6f66666 100644 ---- a/multipathd/uxlsnr.c -+++ b/multipathd/uxlsnr.c -@@ -178,7 +178,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) - - if (ux_sock == -1) { - condlog(1, "could not create uxsock: %d", errno); -- return NULL; -+ exit_daemon(); - } - - pthread_cleanup_push(uxsock_cleanup, (void *)ux_sock); -@@ -187,7 +187,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) - polls = (struct pollfd *)MALLOC((MIN_POLLS + 1) * sizeof(struct pollfd)); - if (!polls) { - condlog(0, "uxsock: failed to allocate poll fds"); -- return NULL; -+ exit_daemon(); - } - sigfillset(&mask); - sigdelset(&mask, SIGINT); -@@ -249,6 +249,7 @@ void * uxsock_listen(uxsock_trigger_fn uxsock_trigger, void * trigger_data) - - /* something went badly wrong! */ - condlog(0, "uxsock: poll failed with %d", errno); -+ exit_daemon(); - break; - } - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch deleted file mode 100644 index 8ce2431d..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0012-libmultipath-fix-error-parsing-find_multipaths-stric.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Martin Wilck <mwilck@suse.com> -Date: Tue, 15 May 2018 14:32:44 +0200 -Subject: [PATCH] libmultipath: fix error parsing "find_multipaths strict" - -If "find_multipaths strict" is set in multipath.conf, the error message -"illegal value for find_multipaths: strict" is printed. This causes no -functional problem, as "strict" happens to be the default, fallback -value. It should be fixed nonetheless. FIND_MULTIPATHS_STRICT, having -the highest numeric value, must be last in the enum. - -Fixes: c36f2f42 "libmultipath: change find_multipaths option to multi-value" -Signed-off-by: Martin Wilck <mwilck@suse.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/structs.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index eb6a178..e424b15 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -122,9 +122,9 @@ enum find_multipaths_states { - FIND_MULTIPATHS_UNDEF = YNU_UNDEF, - FIND_MULTIPATHS_OFF = YNU_NO, - FIND_MULTIPATHS_ON = _FIND_MULTIPATHS_F, -- FIND_MULTIPATHS_STRICT = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_N, - FIND_MULTIPATHS_GREEDY = _FIND_MULTIPATHS_I, - FIND_MULTIPATHS_SMART = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_I, -+ FIND_MULTIPATHS_STRICT = _FIND_MULTIPATHS_F|_FIND_MULTIPATHS_N, - __FIND_MULTIPATHS_LAST, - }; - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch deleted file mode 100644 index c767804d..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0013-libmultipath-print-correct-default-for-delay_-_check.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Mon, 7 May 2018 17:16:05 -0500 -Subject: [PATCH] libmultipath: print correct default for delay_*_checks - -These options default to "no", so they should display that when the -config is printed. - -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/dict.c | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 4040611..3e7c5d6 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -1115,7 +1115,8 @@ print_off_int_undef(char * buff, int len, long v) - } - - declare_def_handler(delay_watch_checks, set_off_int_undef) --declare_def_snprint(delay_watch_checks, print_off_int_undef) -+declare_def_snprint_defint(delay_watch_checks, print_off_int_undef, -+ DEFAULT_DELAY_CHECKS) - declare_ovr_handler(delay_watch_checks, set_off_int_undef) - declare_ovr_snprint(delay_watch_checks, print_off_int_undef) - declare_hw_handler(delay_watch_checks, set_off_int_undef) -@@ -1123,7 +1124,8 @@ declare_hw_snprint(delay_watch_checks, print_off_int_undef) - declare_mp_handler(delay_watch_checks, set_off_int_undef) - declare_mp_snprint(delay_watch_checks, print_off_int_undef) - declare_def_handler(delay_wait_checks, set_off_int_undef) --declare_def_snprint(delay_wait_checks, print_off_int_undef) -+declare_def_snprint_defint(delay_wait_checks, print_off_int_undef, -+ DEFAULT_DELAY_CHECKS) - declare_ovr_handler(delay_wait_checks, set_off_int_undef) - declare_ovr_snprint(delay_wait_checks, print_off_int_undef) - declare_hw_handler(delay_wait_checks, set_off_int_undef) --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch deleted file mode 100644 index 0ab4e067..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0014-multipath.conf.5-clarify-property-whitelist-handling.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Wed, 9 May 2018 14:32:59 -0500 -Subject: [PATCH] multipath.conf.5: clarify property whitelist handling - -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - multipath/multipath.conf.5 | 7 +++---- - 1 file changed, 3 insertions(+), 4 deletions(-) - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index f689795..96d1b66 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -1181,10 +1181,9 @@ and - keywords. For a full description of these keywords please see the \fIdevices\fR - section description. - .LP --The \fIproperty\fR blacklist and whitelist handling is different from the usual --handling in the sense that the whitelist \fIhas\fR to be set, otherwise the --device will be blacklisted. In these cases the message \fIblacklisted, udev --property missing\fR will be displayed. -+The \fIproperty\fR whitelist handling is different from the usual -+handling in the sense that the device \fIhas\fR to have a udev property that -+matches the whitelist, otherwise the device will be blacklisted. In these cases the message \fIblacklisted, udev property missing\fR will be displayed. - . - . - .\" ---------------------------------------------------------------------------- --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch deleted file mode 100644 index be2681d7..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0015-mpathpersist-add-all_tg_pt-option.patch +++ /dev/null @@ -1,317 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Thu, 31 May 2018 17:47:11 -0500 -Subject: [PATCH] mpathpersist: add all_tg_pt option - -Some arrays, such as the EMC VNX, don't follow the scsi persistent -reservations spec in making key registrations per I_T NEXUS. Instead, -the registration is shared by all target ports connected to a given -host. This causes mpathpersist to fail whenever it tries to register a -key, since it will receive a registration conflict on some of the paths. - -To deal with this, mpathpersist needs to track the hosts that it has -done a registration on, and only register once per host. The new -"all_tg_pt" multipath.conf option is used to set which arrays need this -feature. I currently don't know if all EMC VNX arrays handle persistent -reservations like this, or if it is configurable. A future patch will -update the VNX built-in config, if this is indeed their default (or -only) setting. - -Multipathd doesn't need to worry about this. It is often the case that -when a path device comes back, it will still have the keys registered to -it. Because of this, multipathd uses register-and-ignore, which means -that it won't cause an error if the registration has already happened -down a different target port. - -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmpathpersist/mpath_persist.c | 28 ++++++++++++++++++++++------ - libmultipath/config.c | 2 ++ - libmultipath/config.h | 2 ++ - libmultipath/defaults.h | 1 + - libmultipath/dict.c | 10 ++++++++++ - libmultipath/propsel.c | 15 +++++++++++++++ - libmultipath/propsel.h | 1 + - libmultipath/structs.h | 7 +++++++ - multipath/multipath.conf.5 | 11 +++++++++++ - 9 files changed, 71 insertions(+), 6 deletions(-) - -diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c -index 907a17c..ca91c55 100644 ---- a/libmpathpersist/mpath_persist.c -+++ b/libmpathpersist/mpath_persist.c -@@ -335,6 +335,7 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope, - - conf = get_multipath_config(); - select_reservation_key(conf, mpp); -+ select_all_tg_pt(conf, mpp); - put_multipath_config(conf); - - memcpy(&prkey, paramp->sa_key, 8); -@@ -456,7 +457,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy) - { - -- int i, j; -+ int i, j, k; - struct pathgroup *pgp = NULL; - struct path *pp = NULL; - int rollback = 0; -@@ -481,11 +482,13 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - } - - struct threadinfo thread[active_pathcount]; -+ int hosts[active_pathcount]; - - memset(thread, 0, sizeof(thread)); - - /* init thread parameter */ - for (i =0; i< active_pathcount; i++){ -+ hosts[i] = -1; - thread[i].param.rq_servact = rq_servact; - thread[i].param.rq_scope = rq_scope; - thread[i].param.rq_type = rq_type; -@@ -514,6 +517,17 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - condlog (1, "%s: %s path not up. Skip.", mpp->wwid, pp->dev); - continue; - } -+ if (mpp->all_tg_pt == ALL_TG_PT_ON && -+ pp->sg_id.host_no != -1) { -+ for (k = 0; k < count; k++) { -+ if (pp->sg_id.host_no == hosts[k]) { -+ condlog(3, "%s: %s host %d matches skip.", pp->wwid, pp->dev, pp->sg_id.host_no); -+ break; -+ } -+ } -+ if (k < count) -+ continue; -+ } - strncpy(thread[count].param.dev, pp->dev, - FILE_NAME_SIZE - 1); - -@@ -531,10 +545,12 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - condlog (0, "%s: failed to create thread %d", mpp->wwid, rc); - thread[count].param.status = MPATH_PR_THREAD_ERROR; - } -+ else -+ hosts[count] = pp->sg_id.host_no; - count = count + 1; - } - } -- for( i=0; i < active_pathcount ; i++){ -+ for( i=0; i < count ; i++){ - if (thread[i].param.status != MPATH_PR_THREAD_ERROR) { - rc = pthread_join(thread[i].id, NULL); - if (rc){ -@@ -557,7 +573,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - } - if (rollback && ((rq_servact == MPATH_PROUT_REG_SA) && sa_key != 0 )){ - condlog (3, "%s: ERROR: initiating pr out rollback", mpp->wwid); -- for( i=0 ; i < active_pathcount ; i++){ -+ for( i=0 ; i < count ; i++){ - if(thread[i].param.status == MPATH_PR_SUCCESS) { - memcpy(&thread[i].param.paramp->key, &thread[i].param.paramp->sa_key, 8); - memset(&thread[i].param.paramp->sa_key, 0, 8); -@@ -571,7 +587,7 @@ int mpath_prout_reg(struct multipath *mpp,int rq_servact, int rq_scope, - } else - thread[i].param.status = MPATH_PR_SKIP; - } -- for(i=0; i < active_pathcount ; i++){ -+ for(i=0; i < count ; i++){ - if (thread[i].param.status != MPATH_PR_SKIP && - thread[i].param.status != MPATH_PR_THREAD_ERROR) { - rc = pthread_join(thread[i].id, NULL); -@@ -720,7 +736,7 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope, - } - } - pthread_attr_destroy (&attr); -- for (i = 0; i < active_pathcount; i++){ -+ for (i = 0; i < count; i++){ - if (thread[i].param.status != MPATH_PR_THREAD_ERROR) { - rc = pthread_join (thread[i].id, NULL); - if (rc){ -@@ -729,7 +745,7 @@ int mpath_prout_rel(struct multipath *mpp,int rq_servact, int rq_scope, - } - } - -- for (i = 0; i < active_pathcount; i++){ -+ for (i = 0; i < count; i++){ - /* check thread status here and return the status */ - - if (thread[i].param.status == MPATH_PR_RESERV_CONFLICT) -diff --git a/libmultipath/config.c b/libmultipath/config.c -index 085a3e1..5872927 100644 ---- a/libmultipath/config.c -+++ b/libmultipath/config.c -@@ -352,6 +352,7 @@ merge_hwe (struct hwentry * dst, struct hwentry * src) - merge_num(skip_kpartx); - merge_num(max_sectors_kb); - merge_num(ghost_delay); -+ merge_num(all_tg_pt); - - snprintf(id, sizeof(id), "%s/%s", dst->vendor, dst->product); - reconcile_features_with_options(id, &dst->features, -@@ -622,6 +623,7 @@ load_config (char * file) - conf->disable_changed_wwids = DEFAULT_DISABLE_CHANGED_WWIDS; - conf->remove_retries = 0; - conf->ghost_delay = DEFAULT_GHOST_DELAY; -+ conf->all_tg_pt = DEFAULT_ALL_TG_PT; - - /* - * preload default hwtable -diff --git a/libmultipath/config.h b/libmultipath/config.h -index 6e69a37..1bf708a 100644 ---- a/libmultipath/config.h -+++ b/libmultipath/config.h -@@ -82,6 +82,7 @@ struct hwentry { - int skip_kpartx; - int max_sectors_kb; - int ghost_delay; -+ int all_tg_pt; - char * bl_product; - }; - -@@ -194,6 +195,7 @@ struct config { - char * partition_delim; - char * config_dir; - int prkey_source; -+ int all_tg_pt; - struct be64 reservation_key; - - vector keywords; -diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index d7b87b4..f076b4b 100644 ---- a/libmultipath/defaults.h -+++ b/libmultipath/defaults.h -@@ -43,6 +43,7 @@ - #define DEFAULT_GHOST_DELAY GHOST_DELAY_OFF - #define DEFAULT_FIND_MULTIPATHS_TIMEOUT -10 - #define DEFAULT_UNKNOWN_FIND_MULTIPATHS_TIMEOUT 1 -+#define DEFAULT_ALL_TG_PT ALL_TG_PT_OFF - - #define DEFAULT_CHECKINT 5 - #define MAX_CHECKINT(a) (a << 2) -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 3e7c5d6..2557b8a 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -1178,6 +1178,13 @@ declare_hw_snprint(ghost_delay, print_off_int_undef) - declare_mp_handler(ghost_delay, set_off_int_undef) - declare_mp_snprint(ghost_delay, print_off_int_undef) - -+declare_def_handler(all_tg_pt, set_yes_no_undef) -+declare_def_snprint_defint(all_tg_pt, print_yes_no_undef, DEFAULT_ALL_TG_PT) -+declare_ovr_handler(all_tg_pt, set_yes_no_undef) -+declare_ovr_snprint(all_tg_pt, print_yes_no_undef) -+declare_hw_handler(all_tg_pt, set_yes_no_undef) -+declare_hw_snprint(all_tg_pt, print_yes_no_undef) -+ - - static int - def_uxsock_timeout_handler(struct config *conf, vector strvec) -@@ -1509,6 +1516,7 @@ init_keywords(vector keywords) - install_keyword("prkeys_file", &def_prkeys_file_handler, &snprint_def_prkeys_file); - install_keyword("log_checker_err", &def_log_checker_err_handler, &snprint_def_log_checker_err); - install_keyword("reservation_key", &def_reservation_key_handler, &snprint_def_reservation_key); -+ install_keyword("all_tg_pt", &def_all_tg_pt_handler, &snprint_def_all_tg_pt); - install_keyword("retain_attached_hw_handler", &def_retain_hwhandler_handler, &snprint_def_retain_hwhandler); - install_keyword("detect_prio", &def_detect_prio_handler, &snprint_def_detect_prio); - install_keyword("detect_checker", &def_detect_checker_handler, &snprint_def_detect_checker); -@@ -1618,6 +1626,7 @@ init_keywords(vector keywords) - install_keyword("skip_kpartx", &hw_skip_kpartx_handler, &snprint_hw_skip_kpartx); - install_keyword("max_sectors_kb", &hw_max_sectors_kb_handler, &snprint_hw_max_sectors_kb); - install_keyword("ghost_delay", &hw_ghost_delay_handler, &snprint_hw_ghost_delay); -+ install_keyword("all_tg_pt", &hw_all_tg_pt_handler, &snprint_hw_all_tg_pt); - install_sublevel_end(); - - install_keyword_root("overrides", &overrides_handler); -@@ -1654,6 +1663,7 @@ init_keywords(vector keywords) - install_keyword("skip_kpartx", &ovr_skip_kpartx_handler, &snprint_ovr_skip_kpartx); - install_keyword("max_sectors_kb", &ovr_max_sectors_kb_handler, &snprint_ovr_max_sectors_kb); - install_keyword("ghost_delay", &ovr_ghost_delay_handler, &snprint_ovr_ghost_delay); -+ install_keyword("all_tg_pt", &ovr_all_tg_pt_handler, &snprint_ovr_all_tg_pt); - - install_keyword_root("multipaths", &multipaths_handler); - install_keyword_multi("multipath", &multipath_handler, NULL); -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 627d366..9ca1355 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -978,3 +978,18 @@ out: - pp->dev, pp->find_multipaths_timeout, origin); - return 0; - } -+ -+int select_all_tg_pt (struct config *conf, struct multipath * mp) -+{ -+ const char *origin; -+ -+ mp_set_ovr(all_tg_pt); -+ mp_set_hwe(all_tg_pt); -+ mp_set_conf(all_tg_pt); -+ mp_set_default(all_tg_pt, DEFAULT_ALL_TG_PT); -+out: -+ condlog(3, "%s: all_tg_pt = %s %s", mp->alias, -+ (mp->all_tg_pt == ALL_TG_PT_ON)? "yes" : "no", -+ origin); -+ return 0; -+} -diff --git a/libmultipath/propsel.h b/libmultipath/propsel.h -index a022bee..ae99b92 100644 ---- a/libmultipath/propsel.h -+++ b/libmultipath/propsel.h -@@ -34,3 +34,4 @@ int select_ghost_delay(struct config *conf, struct multipath * mp); - void reconcile_features_with_options(const char *id, char **features, - int* no_path_retry, - int *retain_hwhandler); -+int select_all_tg_pt (struct config *conf, struct multipath * mp); -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index e424b15..0194b1e 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -217,6 +217,12 @@ enum prkey_sources { - PRKEY_SOURCE_FILE, - }; - -+enum all_tg_pt_states { -+ ALL_TG_PT_UNDEF = YNU_UNDEF, -+ ALL_TG_PT_OFF = YNU_NO, -+ ALL_TG_PT_ON = YNU_YES, -+}; -+ - struct sg_id { - int host_no; - int channel; -@@ -362,6 +368,7 @@ struct multipath { - int prkey_source; - struct be64 reservation_key; - unsigned char prflag; -+ int all_tg_pt; - struct gen_multipath generic_mp; - }; - -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 96d1b66..0c1f174 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -743,6 +743,17 @@ The default is: \fB<unset>\fR - . - . - .TP -+.B all_tg_pt -+This must be set to \fByes\fR to successfully use mpathpersist on arrays that -+automatically set and clear registration keys on all target ports from a -+host, instead of per target port per host. -+.RS -+.TP -+The default is: \fBno\fR -+.RE -+. -+. -+.TP - .B retain_attached_hw_handler - (Obsolete for kernels >= 4.3) If set to - .I yes --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch deleted file mode 100644 index 8d195472..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0016-libmultipath-remove-rbd-code.patch +++ /dev/null @@ -1,1093 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Fri, 1 Jun 2018 16:30:44 -0500 -Subject: [PATCH] libmultipath: remove rbd code - -The Ceph tean has asked to drop support for multipathed rbd, since it -was running into data corruption issues. There was never an upstream -Ceph release based on it, and because of the corruption, there should be -no users of this code. This patch simply reverts all the rbd code from -multipath. - -Cc: Michael Christie <mchristi@redhat.com> -Cc: Jason Dillaman <dillaman@redhat.com> -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/checkers.c | 22 -- - libmultipath/checkers.h | 6 - - libmultipath/checkers/Makefile | 7 - - libmultipath/checkers/cciss_tur.c | 5 - - libmultipath/checkers/directio.c | 5 - - libmultipath/checkers/emc_clariion.c | 5 - - libmultipath/checkers/hp_sw.c | 5 - - libmultipath/checkers/rbd.c | 653 ----------------------------------- - libmultipath/checkers/rdac.c | 5 - - libmultipath/checkers/readsector0.c | 5 - - libmultipath/checkers/tur.c | 5 - - libmultipath/discovery.c | 70 ---- - libmultipath/hwtable.c | 12 - - multipath/multipath.conf.5 | 3 - - multipathd/main.c | 11 - - 15 files changed, 819 deletions(-) - delete mode 100644 libmultipath/checkers/rbd.c - -diff --git a/libmultipath/checkers.c b/libmultipath/checkers.c -index 08cdfc3..0bacc86 100644 ---- a/libmultipath/checkers.c -+++ b/libmultipath/checkers.c -@@ -141,13 +141,6 @@ struct checker * add_checker (char *multipath_dir, char * name) - if (!c->free) - goto out; - -- c->repair = (void (*)(struct checker *)) dlsym(c->handle, -- "libcheck_repair"); -- errstr = dlerror(); -- if (errstr != NULL) -- condlog(0, "A dynamic linking error occurred: (%s)", errstr); -- if (!c->repair) -- goto out; - done: - c->fd = -1; - c->sync = 1; -@@ -222,20 +215,6 @@ void checker_put (struct checker * dst) - free_checker(src); - } - --void checker_repair (struct checker * c) --{ -- if (!checker_selected(c)) -- return; -- -- c->message[0] = '\0'; -- if (c->disable) { -- MSG(c, "checker disabled"); -- return; -- } -- if (c->repair) -- c->repair(c); --} -- - int checker_check (struct checker * c, int path_state) - { - int r; -@@ -310,7 +289,6 @@ void checker_get (char *multipath_dir, struct checker * dst, char * name) - dst->sync = src->sync; - strncpy(dst->name, src->name, CHECKER_NAME_LEN); - strncpy(dst->message, src->message, CHECKER_MSG_LEN); -- dst->repair = src->repair; - dst->check = src->check; - dst->init = src->init; - dst->free = src->free; -diff --git a/libmultipath/checkers.h b/libmultipath/checkers.h -index 52154ca..7b18a1a 100644 ---- a/libmultipath/checkers.h -+++ b/libmultipath/checkers.h -@@ -86,7 +86,6 @@ enum path_check_state { - #define READSECTOR0 "readsector0" - #define CCISS_TUR "cciss_tur" - #define NONE "none" --#define RBD "rbd" - - #define ASYNC_TIMEOUT_SEC 30 - -@@ -113,9 +112,6 @@ struct checker { - multipath-wide. Use MALLOC if - you want to stuff data in. */ - int (*check)(struct checker *); -- void (*repair)(struct checker *); /* called if check returns -- PATH_DOWN to bring path into -- usable state */ - int (*init)(struct checker *); /* to allocate the context */ - void (*free)(struct checker *); /* to free the context */ - }; -@@ -136,7 +132,6 @@ void checker_set_async (struct checker *); - void checker_set_fd (struct checker *, int); - void checker_enable (struct checker *); - void checker_disable (struct checker *); --void checker_repair (struct checker *); - int checker_check (struct checker *, int); - int checker_selected (struct checker *); - char * checker_name (struct checker *); -@@ -148,6 +143,5 @@ void checker_get (char *, struct checker *, char *); - int libcheck_check(struct checker *); - int libcheck_init(struct checker *); - void libcheck_free(struct checker *); --void libcheck_repair(struct checker *); - - #endif /* _CHECKERS_H */ -diff --git a/libmultipath/checkers/Makefile b/libmultipath/checkers/Makefile -index 87c15bd..02caea6 100644 ---- a/libmultipath/checkers/Makefile -+++ b/libmultipath/checkers/Makefile -@@ -15,15 +15,8 @@ LIBS= \ - libcheckhp_sw.so \ - libcheckrdac.so - --ifneq ($(call check_file,/usr/include/rados/librados.h),0) --LIBS += libcheckrbd.so --endif -- - all: $(LIBS) - --libcheckrbd.so: rbd.o -- $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -lrados -ludev -- - libcheckdirectio.so: libsg.o directio.o - $(CC) $(LDFLAGS) $(SHARED_FLAGS) -o $@ $^ -laio - -diff --git a/libmultipath/checkers/cciss_tur.c b/libmultipath/checkers/cciss_tur.c -index 436470c..1cab201 100644 ---- a/libmultipath/checkers/cciss_tur.c -+++ b/libmultipath/checkers/cciss_tur.c -@@ -59,11 +59,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - int libcheck_check(struct checker * c) - { - int rc; -diff --git a/libmultipath/checkers/directio.c b/libmultipath/checkers/directio.c -index ce60e4c..a80848d 100644 ---- a/libmultipath/checkers/directio.c -+++ b/libmultipath/checkers/directio.c -@@ -118,11 +118,6 @@ void libcheck_free (struct checker * c) - free(ct); - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - static int - check_state(int fd, struct directio_context *ct, int sync, int timeout_secs) - { -diff --git a/libmultipath/checkers/emc_clariion.c b/libmultipath/checkers/emc_clariion.c -index 9c1ffed..9115b1b 100644 ---- a/libmultipath/checkers/emc_clariion.c -+++ b/libmultipath/checkers/emc_clariion.c -@@ -90,11 +90,6 @@ void libcheck_free (struct checker * c) - free(c->context); - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - int libcheck_check (struct checker * c) - { - unsigned char sense_buffer[128] = { 0, }; -diff --git a/libmultipath/checkers/hp_sw.c b/libmultipath/checkers/hp_sw.c -index cee9aab..0ad34a6 100644 ---- a/libmultipath/checkers/hp_sw.c -+++ b/libmultipath/checkers/hp_sw.c -@@ -45,11 +45,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - static int - do_inq(int sg_fd, int cmddt, int evpd, unsigned int pg_op, - void *resp, int mx_resp_len, int noisy, unsigned int timeout) -diff --git a/libmultipath/checkers/rbd.c b/libmultipath/checkers/rbd.c -deleted file mode 100644 -index 4ff54f4..0000000 ---- a/libmultipath/checkers/rbd.c -+++ /dev/null -@@ -1,653 +0,0 @@ --/* -- * Copyright (c) 2016 Red Hat -- * Copyright (c) 2004 Christophe Varoqui -- * -- * Code based off of tur.c and ceph's krbd.cc -- */ --#define _GNU_SOURCE --#include <stdio.h> --#include <stdlib.h> --#include <string.h> --#include <unistd.h> --#include <fcntl.h> --#include <errno.h> --#include <pthread.h> --#include <libudev.h> --#include <ifaddrs.h> --#include <sys/types.h> --#include <sys/stat.h> --#include <sys/ioctl.h> --#include <sys/time.h> --#include <sys/wait.h> --#include <urcu.h> -- --#include "rados/librados.h" -- --#include "structs.h" --#include "checkers.h" -- --#include "../libmultipath/debug.h" --#include "../libmultipath/util.h" --#include "../libmultipath/time-util.h" --#include "../libmultipath/util.h" -- --struct rbd_checker_context; --typedef int (thread_fn)(struct rbd_checker_context *ct, char *msg); -- --#define RBD_MSG(msg, fmt, args...) snprintf(msg, CHECKER_MSG_LEN, fmt, ##args); -- --#define RBD_FEATURE_EXCLUSIVE_LOCK (1 << 2) -- --struct rbd_checker_context { -- int rbd_bus_id; -- char *client_addr; -- char *config_info; -- char *snap; -- char *pool; -- char *image; -- char *username; -- int remapped; -- int blacklisted; -- unsigned lock_on_read:1; -- -- rados_t cluster; -- -- int state; -- int running; -- time_t time; -- thread_fn *fn; -- pthread_t thread; -- pthread_mutex_t lock; -- pthread_cond_t active; -- pthread_spinlock_t hldr_lock; -- int holders; -- char message[CHECKER_MSG_LEN]; --}; -- --int libcheck_init(struct checker * c) --{ -- struct rbd_checker_context *ct; -- struct udev_device *block_dev; -- struct udev_device *bus_dev; -- struct udev *udev; -- struct stat sb; -- const char *block_name, *addr, *config_info, *features_str; -- const char *image, *pool, *snap, *username; -- uint64_t features = 0; -- char sysfs_path[PATH_SIZE]; -- int ret; -- -- ct = malloc(sizeof(struct rbd_checker_context)); -- if (!ct) -- return 1; -- memset(ct, 0, sizeof(struct rbd_checker_context)); -- ct->holders = 1; -- pthread_cond_init_mono(&ct->active); -- pthread_mutex_init(&ct->lock, NULL); -- pthread_spin_init(&ct->hldr_lock, PTHREAD_PROCESS_PRIVATE); -- c->context = ct; -- -- /* -- * The rbd block layer sysfs device is not linked to the rbd bus -- * device that we interact with, so figure that out now. -- */ -- if (fstat(c->fd, &sb) != 0) -- goto free_ct; -- -- udev = udev_new(); -- if (!udev) -- goto free_ct; -- -- block_dev = udev_device_new_from_devnum(udev, 'b', sb.st_rdev); -- if (!block_dev) -- goto free_udev; -- -- block_name = udev_device_get_sysname(block_dev); -- ret = sscanf(block_name, "rbd%d", &ct->rbd_bus_id); -- -- udev_device_unref(block_dev); -- if (ret != 1) -- goto free_udev; -- -- snprintf(sysfs_path, sizeof(sysfs_path), "/sys/bus/rbd/devices/%d", -- ct->rbd_bus_id); -- bus_dev = udev_device_new_from_syspath(udev, sysfs_path); -- if (!bus_dev) -- goto free_udev; -- -- addr = udev_device_get_sysattr_value(bus_dev, "client_addr"); -- if (!addr) { -- condlog(0, "rbd%d: Could not find client_addr in rbd sysfs. " -- "Try updating kernel", ct->rbd_bus_id); -- goto free_dev; -- } -- -- ct->client_addr = strdup(addr); -- if (!ct->client_addr) -- goto free_dev; -- -- features_str = udev_device_get_sysattr_value(bus_dev, "features"); -- if (!features_str) -- goto free_addr; -- features = strtoll(features_str, NULL, 16); -- if (!(features & RBD_FEATURE_EXCLUSIVE_LOCK)) { -- condlog(3, "rbd%d: Exclusive lock not set.", ct->rbd_bus_id); -- goto free_addr; -- } -- -- config_info = udev_device_get_sysattr_value(bus_dev, "config_info"); -- if (!config_info) -- goto free_addr; -- -- if (!strstr(config_info, "noshare")) { -- condlog(3, "rbd%d: Only nonshared clients supported.", -- ct->rbd_bus_id); -- goto free_addr; -- } -- -- if (strstr(config_info, "lock_on_read")) -- ct->lock_on_read = 1; -- -- ct->config_info = strdup(config_info); -- if (!ct->config_info) -- goto free_addr; -- -- username = strstr(config_info, "name="); -- if (username) { -- char *end; -- int len; -- -- username += 5; -- end = strchr(username, ','); -- if (!end) -- goto free_info; -- len = end - username; -- -- ct->username = malloc(len + 1); -- if (!ct->username) -- goto free_info; -- strncpy(ct->username, username, len); -- ct->username[len] = '\0'; -- } -- -- image = udev_device_get_sysattr_value(bus_dev, "name"); -- if (!image) -- goto free_username; -- -- ct->image = strdup(image); -- if (!ct->image) -- goto free_username; -- -- pool = udev_device_get_sysattr_value(bus_dev, "pool"); -- if (!pool) -- goto free_image; -- -- ct->pool = strdup(pool); -- if (!ct->pool) -- goto free_image; -- -- snap = udev_device_get_sysattr_value(bus_dev, "current_snap"); -- if (!snap) -- goto free_pool; -- -- if (strcmp("-", snap)) { -- ct->snap = strdup(snap); -- if (!ct->snap) -- goto free_pool; -- } -- -- if (rados_create(&ct->cluster, NULL) < 0) { -- condlog(0, "rbd%d: Could not create rados cluster", -- ct->rbd_bus_id); -- goto free_snap; -- } -- -- if (rados_conf_read_file(ct->cluster, NULL) < 0) { -- condlog(0, "rbd%d: Could not read rados conf", ct->rbd_bus_id); -- goto shutdown_rados; -- } -- -- ret = rados_connect(ct->cluster); -- if (ret < 0) { -- condlog(0, "rbd%d: Could not connect to rados cluster", -- ct->rbd_bus_id); -- goto shutdown_rados; -- } -- -- udev_device_unref(bus_dev); -- udev_unref(udev); -- -- condlog(3, "rbd%d checker init %s %s/%s@%s %s", ct->rbd_bus_id, -- ct->client_addr, ct->pool, ct->image, ct->snap ? ct->snap : "-", -- ct->username ? ct->username : "none"); -- return 0; -- --shutdown_rados: -- rados_shutdown(ct->cluster); --free_snap: -- if (ct->snap) -- free(ct->snap); --free_pool: -- free(ct->pool); --free_image: -- free(ct->image); --free_username: -- if (ct->username) -- free(ct->username); --free_info: -- free(ct->config_info); --free_addr: -- free(ct->client_addr); --free_dev: -- udev_device_unref(bus_dev); --free_udev: -- udev_unref(udev); --free_ct: -- free(ct); -- return 1; --} -- --static void cleanup_context(struct rbd_checker_context *ct) --{ -- pthread_mutex_destroy(&ct->lock); -- pthread_cond_destroy(&ct->active); -- pthread_spin_destroy(&ct->hldr_lock); -- -- rados_shutdown(ct->cluster); -- -- if (ct->username) -- free(ct->username); -- if (ct->snap) -- free(ct->snap); -- free(ct->pool); -- free(ct->image); -- free(ct->config_info); -- free(ct->client_addr); -- free(ct); --} -- --void libcheck_free(struct checker * c) --{ -- if (c->context) { -- struct rbd_checker_context *ct = c->context; -- int holders; -- pthread_t thread; -- -- pthread_spin_lock(&ct->hldr_lock); -- ct->holders--; -- holders = ct->holders; -- thread = ct->thread; -- pthread_spin_unlock(&ct->hldr_lock); -- if (holders) -- pthread_cancel(thread); -- else -- cleanup_context(ct); -- c->context = NULL; -- } --} -- --static int rbd_is_blacklisted(struct rbd_checker_context *ct, char *msg) --{ -- char *addr_tok, *start, *save; -- const char *cmd[2]; -- char *blklist, *stat; -- size_t blklist_len, stat_len; -- int ret; -- char *end; -- -- cmd[0] = "{\"prefix\": \"osd blacklist ls\"}"; -- cmd[1] = NULL; -- -- ret = rados_mon_command(ct->cluster, (const char **)cmd, 1, "", 0, -- &blklist, &blklist_len, &stat, &stat_len); -- if (ret < 0) { -- RBD_MSG(msg, "checker failed: mon command failed %d", ret); -- return ret; -- } -- -- if (!blklist || !blklist_len) -- goto free_bufs; -- -- /* -- * parse list of addrs with the format -- * ipv4:port/nonce date time\n -- * or -- * [ipv6]:port/nonce date time\n -- */ -- ret = 0; -- for (start = blklist; ; start = NULL) { -- addr_tok = strtok_r(start, "\n", &save); -- if (!addr_tok || !strlen(addr_tok)) -- break; -- -- end = strchr(addr_tok, ' '); -- if (!end) { -- RBD_MSG(msg, "checker failed: invalid blacklist %s", -- addr_tok); -- break; -- } -- *end = '\0'; -- -- if (!strcmp(addr_tok, ct->client_addr)) { -- ct->blacklisted = 1; -- RBD_MSG(msg, "%s is blacklisted", ct->client_addr); -- ret = 1; -- break; -- } -- } -- --free_bufs: -- rados_buffer_free(blklist); -- rados_buffer_free(stat); -- return ret; --} -- --static int rbd_check(struct rbd_checker_context *ct, char *msg) --{ -- if (ct->blacklisted || rbd_is_blacklisted(ct, msg) == 1) -- return PATH_DOWN; -- -- RBD_MSG(msg, "checker reports path is up"); -- /* -- * Path may have issues, but the ceph cluster is at least -- * accepting IO, so we can attempt to do IO. -- * -- * TODO: in future versions, we can run other tests to -- * verify OSDs and networks. -- */ -- return PATH_UP; --} -- --static int sysfs_write_rbd_bus(const char *which, const char *buf, -- size_t buf_len) --{ -- char sysfs_path[PATH_SIZE]; -- int fd; -- int r; -- -- /* we require newer kernels so single_major should always be there */ -- snprintf(sysfs_path, sizeof(sysfs_path), -- "/sys/bus/rbd/%s_single_major", which); -- fd = open(sysfs_path, O_WRONLY); -- if (fd < 0) -- return -errno; -- -- r = safe_write(fd, buf, buf_len); -- close(fd); -- return r; --} -- --static int rbd_remap(struct rbd_checker_context *ct) --{ -- char *argv[11]; -- pid_t pid; -- int ret = 0, i = 0; -- int status; -- -- pid = fork(); -- switch (pid) { -- case 0: -- argv[i++] = "rbd"; -- argv[i++] = "map"; -- if (ct->lock_on_read) -- argv[i++] = "-o noshare,lock_on_read"; -- else -- argv[i++] = "-o noshare"; -- if (ct->username) { -- argv[i++] = "--id"; -- argv[i++] = ct->username; -- } -- argv[i++] = "--pool"; -- argv[i++] = ct->pool; -- if (ct->snap) { -- argv[i++] = "--snap"; -- argv[i++] = ct->snap; -- } -- argv[i++] = ct->image; -- argv[i] = NULL; -- -- ret = execvp(argv[0], argv); -- condlog(0, "rbd%d: Error executing rbd: %s", ct->rbd_bus_id, -- strerror(errno)); -- exit(-1); -- case -1: -- condlog(0, "rbd%d: fork failed: %s", ct->rbd_bus_id, -- strerror(errno)); -- return -1; -- default: -- ret = -1; -- wait(&status); -- if (WIFEXITED(status)) { -- status = WEXITSTATUS(status); -- if (status == 0) -- ret = 0; -- else -- condlog(0, "rbd%d: failed with %d", -- ct->rbd_bus_id, status); -- } -- } -- -- return ret; --} -- --static int sysfs_write_rbd_remove(const char *buf, int buf_len) --{ -- return sysfs_write_rbd_bus("remove", buf, buf_len); --} -- --static int rbd_rm_blacklist(struct rbd_checker_context *ct) --{ -- const char *cmd[2]; -- char *stat, *cmd_str; -- size_t stat_len; -- int ret; -- -- ret = asprintf(&cmd_str, "{\"prefix\": \"osd blacklist\", \"blacklistop\": \"rm\", \"addr\": \"%s\"}", -- ct->client_addr); -- if (ret == -1) -- return -ENOMEM; -- -- cmd[0] = cmd_str; -- cmd[1] = NULL; -- -- ret = rados_mon_command(ct->cluster, (const char **)cmd, 1, "", 0, -- NULL, NULL, &stat, &stat_len); -- if (ret < 0) { -- condlog(1, "rbd%d: repair failed to remove blacklist for %s %d", -- ct->rbd_bus_id, ct->client_addr, ret); -- goto free_cmd; -- } -- -- condlog(1, "rbd%d: repair rm blacklist for %s", -- ct->rbd_bus_id, ct->client_addr); -- free(stat); --free_cmd: -- free(cmd_str); -- return ret; --} -- --static int rbd_repair(struct rbd_checker_context *ct, char *msg) --{ -- char del[17]; -- int ret; -- -- if (!ct->blacklisted) -- return PATH_UP; -- -- if (!ct->remapped) { -- ret = rbd_remap(ct); -- if (ret) { -- RBD_MSG(msg, "repair failed to remap. Err %d", ret); -- return PATH_DOWN; -- } -- } -- ct->remapped = 1; -- -- snprintf(del, sizeof(del), "%d force", ct->rbd_bus_id); -- ret = sysfs_write_rbd_remove(del, strlen(del) + 1); -- if (ret) { -- RBD_MSG(msg, "repair failed to clean up. Err %d", ret); -- return PATH_DOWN; -- } -- -- ret = rbd_rm_blacklist(ct); -- if (ret) { -- RBD_MSG(msg, "repair could not remove blacklist entry. Err %d", -- ret); -- return PATH_DOWN; -- } -- -- ct->remapped = 0; -- ct->blacklisted = 0; -- -- RBD_MSG(msg, "has been repaired"); -- return PATH_UP; --} -- --#define rbd_thread_cleanup_push(ct) pthread_cleanup_push(cleanup_func, ct) --#define rbd_thread_cleanup_pop(ct) pthread_cleanup_pop(1) -- --static void cleanup_func(void *data) --{ -- int holders; -- struct rbd_checker_context *ct = data; -- pthread_spin_lock(&ct->hldr_lock); -- ct->holders--; -- holders = ct->holders; -- ct->thread = 0; -- pthread_spin_unlock(&ct->hldr_lock); -- if (!holders) -- cleanup_context(ct); -- rcu_unregister_thread(); --} -- --static void *rbd_thread(void *ctx) --{ -- struct rbd_checker_context *ct = ctx; -- int state; -- -- /* This thread can be canceled, so setup clean up */ -- rbd_thread_cleanup_push(ct) -- rcu_register_thread(); -- condlog(3, "rbd%d: thread starting up", ct->rbd_bus_id); -- -- ct->message[0] = '\0'; -- -- /* checker start up */ -- pthread_mutex_lock(&ct->lock); -- ct->state = PATH_PENDING; -- pthread_mutex_unlock(&ct->lock); -- -- state = ct->fn(ct, ct->message); -- -- /* checker done */ -- pthread_mutex_lock(&ct->lock); -- ct->state = state; -- pthread_cond_signal(&ct->active); -- pthread_mutex_unlock(&ct->lock); -- -- condlog(3, "rbd%d: thead finished, state %s", ct->rbd_bus_id, -- checker_state_name(state)); -- rbd_thread_cleanup_pop(ct); -- return ((void *)0); --} -- --static void rbd_timeout(struct timespec *tsp) --{ -- clock_gettime(CLOCK_MONOTONIC, tsp); -- tsp->tv_nsec += 1000 * 1000; /* 1 millisecond */ -- normalize_timespec(tsp); --} -- --static int rbd_exec_fn(struct checker *c, thread_fn *fn) --{ -- struct rbd_checker_context *ct = c->context; -- struct timespec tsp; -- pthread_attr_t attr; -- int rbd_status, r; -- -- if (c->sync) -- return fn(ct, c->message); -- /* -- * Async mode -- */ -- r = pthread_mutex_lock(&ct->lock); -- if (r != 0) { -- condlog(2, "rbd%d: mutex lock failed with %d", ct->rbd_bus_id, -- r); -- MSG(c, "rbd%d: thread failed to initialize", ct->rbd_bus_id); -- return PATH_WILD; -- } -- -- if (ct->running) { -- /* Check if checker is still running */ -- if (ct->thread) { -- condlog(3, "rbd%d: thread not finished", -- ct->rbd_bus_id); -- rbd_status = PATH_PENDING; -- } else { -- /* checker done */ -- ct->running = 0; -- rbd_status = ct->state; -- strncpy(c->message, ct->message, CHECKER_MSG_LEN); -- c->message[CHECKER_MSG_LEN - 1] = '\0'; -- } -- pthread_mutex_unlock(&ct->lock); -- } else { -- /* Start new checker */ -- ct->state = PATH_UNCHECKED; -- ct->fn = fn; -- pthread_spin_lock(&ct->hldr_lock); -- ct->holders++; -- pthread_spin_unlock(&ct->hldr_lock); -- setup_thread_attr(&attr, 32 * 1024, 1); -- r = pthread_create(&ct->thread, &attr, rbd_thread, ct); -- if (r) { -- pthread_mutex_unlock(&ct->lock); -- ct->thread = 0; -- ct->holders--; -- condlog(3, "rbd%d failed to start rbd thread, using sync mode", -- ct->rbd_bus_id); -- return fn(ct, c->message); -- } -- pthread_attr_destroy(&attr); -- rbd_timeout(&tsp); -- r = pthread_cond_timedwait(&ct->active, &ct->lock, &tsp); -- rbd_status = ct->state; -- strncpy(c->message, ct->message,CHECKER_MSG_LEN); -- c->message[CHECKER_MSG_LEN -1] = '\0'; -- pthread_mutex_unlock(&ct->lock); -- -- if (ct->thread && -- (rbd_status == PATH_PENDING || rbd_status == PATH_UNCHECKED)) { -- condlog(3, "rbd%d: thread still running", -- ct->rbd_bus_id); -- ct->running = 1; -- rbd_status = PATH_PENDING; -- } -- } -- -- return rbd_status; --} -- --void libcheck_repair(struct checker * c) --{ -- struct rbd_checker_context *ct = c->context; -- -- if (!ct || !ct->blacklisted) -- return; -- rbd_exec_fn(c, rbd_repair); --} -- --int libcheck_check(struct checker * c) --{ -- struct rbd_checker_context *ct = c->context; -- -- if (!ct) -- return PATH_UNCHECKED; -- -- if (ct->blacklisted) -- return PATH_DOWN; -- -- return rbd_exec_fn(c, rbd_check); --} -diff --git a/libmultipath/checkers/rdac.c b/libmultipath/checkers/rdac.c -index a643a4a..5104e4e 100644 ---- a/libmultipath/checkers/rdac.c -+++ b/libmultipath/checkers/rdac.c -@@ -139,11 +139,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - static int - do_inq(int sg_fd, unsigned int pg_op, void *resp, int mx_resp_len, - unsigned int timeout) -diff --git a/libmultipath/checkers/readsector0.c b/libmultipath/checkers/readsector0.c -index 8fccb46..1c2a868 100644 ---- a/libmultipath/checkers/readsector0.c -+++ b/libmultipath/checkers/readsector0.c -@@ -23,11 +23,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - int libcheck_check (struct checker * c) - { - unsigned char buf[4096]; -diff --git a/libmultipath/checkers/tur.c b/libmultipath/checkers/tur.c -index eb3348d..bf8486d 100644 ---- a/libmultipath/checkers/tur.c -+++ b/libmultipath/checkers/tur.c -@@ -112,11 +112,6 @@ void libcheck_free (struct checker * c) - return; - } - --void libcheck_repair (struct checker * c) --{ -- return; --} -- - #define TUR_MSG(fmt, args...) \ - do { \ - char msg[CHECKER_MSG_LEN]; \ -diff --git a/libmultipath/discovery.c b/libmultipath/discovery.c -index 1ef1dfa..18ad0e2 100644 ---- a/libmultipath/discovery.c -+++ b/libmultipath/discovery.c -@@ -1246,21 +1246,6 @@ nvme_sysfs_pathinfo (struct path * pp, vector hwtable) - } - - static int --rbd_sysfs_pathinfo (struct path * pp, vector hwtable) --{ -- sprintf(pp->vendor_id, "Ceph"); -- sprintf(pp->product_id, "RBD"); -- -- condlog(3, "%s: vendor = %s product = %s", pp->dev, pp->vendor_id, -- pp->product_id); -- /* -- * set the hwe configlet pointer -- */ -- pp->hwe = find_hwe(hwtable, pp->vendor_id, pp->product_id, NULL); -- return 0; --} -- --static int - ccw_sysfs_pathinfo (struct path * pp, vector hwtable) - { - struct udev_device *parent; -@@ -1486,8 +1471,6 @@ sysfs_pathinfo(struct path * pp, vector hwtable) - pp->bus = SYSFS_BUS_CCW; - if (!strncmp(pp->dev,"sd", 2)) - pp->bus = SYSFS_BUS_SCSI; -- if (!strncmp(pp->dev,"rbd", 3)) -- pp->bus = SYSFS_BUS_RBD; - if (!strncmp(pp->dev,"nvme", 4)) - pp->bus = SYSFS_BUS_NVME; - -@@ -1502,9 +1485,6 @@ sysfs_pathinfo(struct path * pp, vector hwtable) - } else if (pp->bus == SYSFS_BUS_CCISS) { - if (cciss_sysfs_pathinfo(pp, hwtable)) - return 1; -- } else if (pp->bus == SYSFS_BUS_RBD) { -- if (rbd_sysfs_pathinfo(pp, hwtable)) -- return 1; - } else if (pp->bus == SYSFS_BUS_NVME) { - if (nvme_sysfs_pathinfo(pp, hwtable)) - return 1; -@@ -1753,53 +1733,6 @@ get_udev_uid(struct path * pp, char *uid_attribute, struct udev_device *udev) - } - - static int --get_rbd_uid(struct path * pp) --{ -- struct udev_device *rbd_bus_dev; -- int ret, rbd_bus_id; -- const char *pool, *image, *snap; -- char sysfs_path[PATH_SIZE]; -- uint64_t snap_id, max_snap_id = -3; -- -- ret = sscanf(pp->dev, "rbd%d", &rbd_bus_id); -- if (ret != 1) -- return -EINVAL; -- -- snprintf(sysfs_path, sizeof(sysfs_path), "/sys/bus/rbd/devices/%d", -- rbd_bus_id); -- rbd_bus_dev = udev_device_new_from_syspath(udev, sysfs_path); -- if (!rbd_bus_dev) -- return -ENODEV; -- -- ret = -EINVAL; -- pool = udev_device_get_sysattr_value(rbd_bus_dev, "pool_id"); -- if (!pool) -- goto free_dev; -- -- image = udev_device_get_sysattr_value(rbd_bus_dev, "image_id"); -- if (!image) -- goto free_dev; -- -- snap = udev_device_get_sysattr_value(rbd_bus_dev, "snap_id"); -- if (!snap) -- goto free_dev; -- snap_id = strtoull(snap, NULL, 19); -- if (snap_id >= max_snap_id) -- ret = snprintf(pp->wwid, WWID_SIZE, "%s-%s", pool, image); -- else -- ret = snprintf(pp->wwid, WWID_SIZE, "%s-%s-%s", pool, -- image, snap); -- if (ret >= WWID_SIZE) { -- condlog(0, "%s: wwid overflow", pp->dev); -- ret = -EOVERFLOW; -- } -- --free_dev: -- udev_device_unref(rbd_bus_dev); -- return ret; --} -- --static int - get_vpd_uid(struct path * pp) - { - struct udev_device *parent = pp->udev; -@@ -1876,9 +1809,6 @@ get_uid (struct path * pp, int path_state, struct udev_device *udev) - } else - len = strlen(pp->wwid); - origin = "callout"; -- } else if (pp->bus == SYSFS_BUS_RBD) { -- len = get_rbd_uid(pp); -- origin = "sysfs"; - } else { - - if (udev && pp->uid_attribute) { -diff --git a/libmultipath/hwtable.c b/libmultipath/hwtable.c -index 148f0ba..d529bae 100644 ---- a/libmultipath/hwtable.c -+++ b/libmultipath/hwtable.c -@@ -1000,18 +1000,6 @@ static struct hwentry default_hw[] = { - .prio_name = PRIO_ALUA, - }, - /* -- * Red Hat -- * -- * Maintainer: Mike Christie -- * Mail: mchristi@redhat.com -- */ -- { -- .vendor = "Ceph", -- .product = "RBD", -- .checker_name = RBD, -- .deferred_remove = DEFERRED_REMOVE_ON, -- }, -- /* - * Kove - */ - { -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 0c1f174..31f4585 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -482,9 +482,6 @@ Check the path state for HP/COMPAQ Smart Array(CCISS) controllers. - .I none - Do not check the device, fallback to use the values retrieved from sysfs - .TP --.I rbd --Check if the path is in the Ceph blacklist and remap the path if it is. --.TP - The default is: \fBtur\fR - .RE - . -diff --git a/multipathd/main.c b/multipathd/main.c -index 0db88ee..d40c416 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -1783,15 +1783,6 @@ int update_path_groups(struct multipath *mpp, struct vectors *vecs, int refresh) - return 0; - } - --void repair_path(struct path * pp) --{ -- if (pp->state != PATH_DOWN) -- return; -- -- checker_repair(&pp->checker); -- LOG_MSG(1, checker_message(&pp->checker)); --} -- - /* - * Returns '1' if the path has been checked, '-1' if it was blacklisted - * and '0' otherwise -@@ -1972,7 +1963,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks) - pp->mpp->failback_tick = 0; - - pp->mpp->stat_path_failures++; -- repair_path(pp); - return 1; - } - -@@ -2071,7 +2061,6 @@ check_path (struct vectors * vecs, struct path * pp, int ticks) - } - - pp->state = newstate; -- repair_path(pp); - - if (pp->mpp->wait_for_udev) - return 1; --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch deleted file mode 100644 index b98d310a..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0017-mpathpersist-fix-aptpl-support.patch +++ /dev/null @@ -1,543 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Mon, 4 Jun 2018 22:04:44 -0500 -Subject: [PATCH] mpathpersist: fix aptpl support - -The "Active Persist Through Power Loss" flag must be set whenever a key -is registered. However, there is no way for multipathd to know if this -was set by mpathpersist. The result is that if a path goes down and -comes back up (or if it wasn't up when mpathpersist was first run) -multipathd will clear the aptpl flag when it reregisters the key on it. - -To fix this, multipath.conf now accepts an optional ":aptpl" appended -on the reservation_key value. If this is added to the reservation_key -multipathd will set the aptpl flag when it reregisters the key. If -reservation_key is set to "file", this will automatically be tracked -in the /etc/multipath/prkeys file. - -To track this flag in the prkeys file, without changing the format -I've made "0x<key>" stand for non-aptpl keys, and "0X<key>" stand -for aptpl keys. Since previously, all keys used a lower-case x, this -will default to the current behavior for existing keys. Obviously, the -next time mpathpersist is run, this will be changed if --param-aptpl -is used. Since there are no more flags that are in sg_persist that -multipathd needs to care about in mpathpersist, there shouldn't need -to be any more flags added to the prkeys file. - -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmpathpersist/mpath_persist.c | 3 ++- - libmpathpersist/mpath_updatepr.c | 11 +++++++---- - libmpathpersist/mpathpr.h | 3 ++- - libmultipath/Makefile | 2 +- - libmultipath/config.h | 2 ++ - libmultipath/dict.c | 23 +++++++++++++++++++---- - libmultipath/dict.h | 3 ++- - libmultipath/prkey.c | 27 ++++++++++++++++++++++++--- - libmultipath/prkey.h | 6 ++++-- - libmultipath/propsel.c | 6 ++++-- - libmultipath/structs.h | 1 + - libmultipath/util.c | 16 ++++++++++++++++ - libmultipath/util.h | 1 + - multipath/multipath.conf.5 | 7 +++++-- - multipathd/cli_handlers.c | 15 ++++++++++----- - multipathd/main.c | 1 + - 16 files changed, 101 insertions(+), 26 deletions(-) - -diff --git a/libmpathpersist/mpath_persist.c b/libmpathpersist/mpath_persist.c -index ca91c55..6e9e67f 100644 ---- a/libmpathpersist/mpath_persist.c -+++ b/libmpathpersist/mpath_persist.c -@@ -344,7 +344,8 @@ int mpath_persistent_reserve_out ( int fd, int rq_servact, int rq_scope, - rq_servact == MPATH_PROUT_REG_SA) || - rq_servact == MPATH_PROUT_REG_IGN_SA)) { - memcpy(&mpp->reservation_key, paramp->sa_key, 8); -- if (update_prkey(alias, get_be64(mpp->reservation_key))) { -+ if (update_prkey_flags(alias, get_be64(mpp->reservation_key), -+ paramp->sa_flags)) { - condlog(0, "%s: failed to set prkey for multipathd.", - alias); - ret = MPATH_PR_DMMP_ERROR; -diff --git a/libmpathpersist/mpath_updatepr.c b/libmpathpersist/mpath_updatepr.c -index 8063e90..0aca28e 100644 ---- a/libmpathpersist/mpath_updatepr.c -+++ b/libmpathpersist/mpath_updatepr.c -@@ -1,7 +1,5 @@ - #include <stdio.h> - #include <unistd.h> --#include <errno.h> -- - #include <stdlib.h> - #include <stdarg.h> - #include <fcntl.h> -@@ -11,6 +9,8 @@ - #include <sys/un.h> - #include <poll.h> - #include <errno.h> -+#include <libudev.h> -+#include <mpath_persist.h> - #include "debug.h" - #include "mpath_cmd.h" - #include "uxsock.h" -@@ -59,11 +59,14 @@ int update_prflag(char *mapname, int set) { - return do_update_pr(mapname, (set)? "setprstatus" : "unsetprstatus"); - } - --int update_prkey(char *mapname, uint64_t prkey) { -+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags) { - char str[256]; -+ char *flagstr = ""; - -+ if (sa_flags & MPATH_F_APTPL_MASK) -+ flagstr = ":aptpl"; - if (prkey) -- sprintf(str, "setprkey key %" PRIx64, prkey); -+ sprintf(str, "setprkey key %" PRIx64 "%s", prkey, flagstr); - else - sprintf(str, "unsetprkey"); - return do_update_pr(mapname, str); -diff --git a/libmpathpersist/mpathpr.h b/libmpathpersist/mpathpr.h -index 72feb60..5ea8cd6 100644 ---- a/libmpathpersist/mpathpr.h -+++ b/libmpathpersist/mpathpr.h -@@ -46,7 +46,8 @@ int send_prout_activepath(char * dev, int rq_servact, int rq_scope, - unsigned int rq_type, struct prout_param_descriptor * paramp, int noisy); - - int update_prflag(char *mapname, int set); --int update_prkey(char *mapname, uint64_t prkey); -+int update_prkey_flags(char *mapname, uint64_t prkey, uint8_t sa_flags); -+#define update_prkey(mapname, prkey) update_prkey_flags(mapname, prkey, 0) - void * mpath_alloc_prin_response(int prin_sa); - int update_map_pr(struct multipath *mpp); - -diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index f51786d..33f5269 100644 ---- a/libmultipath/Makefile -+++ b/libmultipath/Makefile -@@ -7,7 +7,7 @@ SONAME = 0 - DEVLIB = libmultipath.so - LIBS = $(DEVLIB).$(SONAME) - --CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir) -+CFLAGS += $(LIB_CFLAGS) -I$(mpathcmddir) -I$(mpathpersistdir) - - LIBDEPS += -lpthread -ldl -ldevmapper -ludev -L$(mpathcmddir) -lmpathcmd -lurcu -laio - -diff --git a/libmultipath/config.h b/libmultipath/config.h -index 1bf708a..fcbe3fc 100644 ---- a/libmultipath/config.h -+++ b/libmultipath/config.h -@@ -98,6 +98,7 @@ struct mpentry { - char * prio_args; - int prkey_source; - struct be64 reservation_key; -+ uint8_t sa_flags; - int pgpolicy; - int pgfailback; - int rr_weight; -@@ -197,6 +198,7 @@ struct config { - int prkey_source; - int all_tg_pt; - struct be64 reservation_key; -+ uint8_t sa_flags; - - vector keywords; - vector mptable; -diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 2557b8a..7ad0f5a 100644 ---- a/libmultipath/dict.c -+++ b/libmultipath/dict.c -@@ -22,6 +22,8 @@ - #include "util.h" - #include <errno.h> - #include <inttypes.h> -+#include <libudev.h> -+#include <mpath_persist.h> - #include "mpath_cmd.h" - #include "dict.h" - -@@ -1012,10 +1014,12 @@ snprint_def_log_checker_err (struct config *conf, char * buff, int len, - } - - static int --set_reservation_key(vector strvec, struct be64 *be64_ptr, int *source_ptr) -+set_reservation_key(vector strvec, struct be64 *be64_ptr, uint8_t *flags_ptr, -+ int *source_ptr) - { - char *buff; - uint64_t prkey; -+ uint8_t sa_flags; - - buff = set_value(strvec); - if (!buff) -@@ -1023,35 +1027,43 @@ set_reservation_key(vector strvec, struct be64 *be64_ptr, int *source_ptr) - - if (strcmp(buff, "file") == 0) { - *source_ptr = PRKEY_SOURCE_FILE; -+ *flags_ptr = 0; - put_be64(*be64_ptr, 0); - FREE(buff); - return 0; - } - -- if (parse_prkey(buff, &prkey) != 0) { -+ if (parse_prkey_flags(buff, &prkey, &sa_flags) != 0) { - FREE(buff); - return 1; - } - *source_ptr = PRKEY_SOURCE_CONF; -+ *flags_ptr = sa_flags; - put_be64(*be64_ptr, prkey); - FREE(buff); - return 0; - } - - int --print_reservation_key(char * buff, int len, struct be64 key, int source) -+print_reservation_key(char * buff, int len, struct be64 key, uint8_t flags, -+ int source) - { -+ char *flagstr = ""; - if (source == PRKEY_SOURCE_NONE) - return 0; - if (source == PRKEY_SOURCE_FILE) - return snprintf(buff, len, "file"); -- return snprintf(buff, len, "0x%" PRIx64, get_be64(key)); -+ if (flags & MPATH_F_APTPL_MASK) -+ flagstr = ":aptpl"; -+ return snprintf(buff, len, "0x%" PRIx64 "%s", get_be64(key), -+ flagstr); - } - - static int - def_reservation_key_handler(struct config *conf, vector strvec) - { - return set_reservation_key(strvec, &conf->reservation_key, -+ &conf->sa_flags, - &conf->prkey_source); - } - -@@ -1060,6 +1072,7 @@ snprint_def_reservation_key (struct config *conf, char * buff, int len, - const void * data) - { - return print_reservation_key(buff, len, conf->reservation_key, -+ conf->sa_flags, - conf->prkey_source); - } - -@@ -1070,6 +1083,7 @@ mp_reservation_key_handler(struct config *conf, vector strvec) - if (!mpe) - return 1; - return set_reservation_key(strvec, &mpe->reservation_key, -+ &mpe->sa_flags, - &mpe->prkey_source); - } - -@@ -1079,6 +1093,7 @@ snprint_mp_reservation_key (struct config *conf, char * buff, int len, - { - const struct mpentry * mpe = (const struct mpentry *)data; - return print_reservation_key(buff, len, mpe->reservation_key, -+ mpe->sa_flags, - mpe->prkey_source); - } - -diff --git a/libmultipath/dict.h b/libmultipath/dict.h -index 7564892..a40ac66 100644 ---- a/libmultipath/dict.h -+++ b/libmultipath/dict.h -@@ -15,6 +15,7 @@ int print_pgpolicy(char *buff, int len, long v); - int print_no_path_retry(char *buff, int len, long v); - int print_fast_io_fail(char *buff, int len, long v); - int print_dev_loss(char *buff, int len, unsigned long v); --int print_reservation_key(char * buff, int len, struct be64 key, int source); -+int print_reservation_key(char * buff, int len, struct be64 key, uint8_t -+ flags, int source); - int print_off_int_undef(char *buff, int len, long v); - #endif /* _DICT_H */ -diff --git a/libmultipath/prkey.c b/libmultipath/prkey.c -index 89b90ed..d645f81 100644 ---- a/libmultipath/prkey.c -+++ b/libmultipath/prkey.c -@@ -11,6 +11,8 @@ - #include <string.h> - #include <inttypes.h> - #include <errno.h> -+#include <libudev.h> -+#include <mpath_persist.h> - - #define PRKEY_READ 0 - #define PRKEY_WRITE 1 -@@ -108,7 +110,8 @@ static int do_prkey(int fd, char *wwid, char *keystr, int cmd) - return 0; - } - --int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey) -+int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey, -+ uint8_t *sa_flags) - { - int fd; - int unused; -@@ -124,6 +127,9 @@ int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey) - ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_READ); - if (ret) - goto out_file; -+ *sa_flags = 0; -+ if (strchr(keystr, 'X')) -+ *sa_flags = MPATH_F_APTPL_MASK; - ret = !!parse_prkey(keystr, prkey); - out_file: - close(fd); -@@ -131,7 +137,8 @@ out: - return ret; - } - --int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey) -+int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey, -+ uint8_t sa_flags) - { - int fd; - int can_write = 1; -@@ -141,6 +148,12 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey) - if (!strlen(mpp->wwid)) - goto out; - -+ if (sa_flags & ~MPATH_F_APTPL_MASK) { -+ condlog(0, "unsupported pr flags, 0x%x", -+ sa_flags & ~MPATH_F_APTPL_MASK); -+ sa_flags &= MPATH_F_APTPL_MASK; -+ } -+ - fd = open_file(conf->prkeys_file, &can_write, PRKEYS_FILE_HEADER); - if (fd < 0) - goto out; -@@ -149,7 +162,15 @@ int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey) - goto out_file; - } - if (prkey) { -- snprintf(keystr, PRKEY_SIZE, "0x%016" PRIx64, prkey); -+ /* using the capitalization of the 'x' is a hack, but -+ * it's unlikely that mpath_persist will support more options -+ * since sg_persist doesn't, and this lets us keep the -+ * same file format as before instead of needing to change -+ * the format of the prkeys file */ -+ if (sa_flags) -+ snprintf(keystr, PRKEY_SIZE, "0X%016" PRIx64, prkey); -+ else -+ snprintf(keystr, PRKEY_SIZE, "0x%016" PRIx64, prkey); - keystr[PRKEY_SIZE - 1] = '\0'; - ret = do_prkey(fd, mpp->wwid, keystr, PRKEY_WRITE); - } -diff --git a/libmultipath/prkey.h b/libmultipath/prkey.h -index 4028e70..6739191 100644 ---- a/libmultipath/prkey.h -+++ b/libmultipath/prkey.h -@@ -13,7 +13,9 @@ - "# prkey wwid\n" \ - "#\n" - --int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey); --int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey); -+int set_prkey(struct config *conf, struct multipath *mpp, uint64_t prkey, -+ uint8_t sa_flags); -+int get_prkey(struct config *conf, struct multipath *mpp, uint64_t *prkey, -+ uint8_t *sa_flags); - - #endif /* _PRKEY_H */ -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 9ca1355..62a6893 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -106,6 +106,7 @@ do { \ - if (src && src->prkey_source != PRKEY_SOURCE_NONE) { \ - mp->prkey_source = src->prkey_source; \ - mp->reservation_key = src->reservation_key; \ -+ mp->sa_flags = src->sa_flags; \ - origin = msg; \ - goto out; \ - } \ -@@ -703,18 +704,19 @@ int select_reservation_key(struct config *conf, struct multipath *mp) - do_prkey_set(mp->mpe, multipaths_origin); - do_prkey_set(conf, conf_origin); - put_be64(mp->reservation_key, 0); -+ mp->sa_flags = 0; - mp->prkey_source = PRKEY_SOURCE_NONE; - return 0; - out: - if (mp->prkey_source == PRKEY_SOURCE_FILE) { - from_file = " (from prkeys file)"; -- if (get_prkey(conf, mp, &prkey) != 0) -+ if (get_prkey(conf, mp, &prkey, &mp->sa_flags) != 0) - put_be64(mp->reservation_key, 0); - else - put_be64(mp->reservation_key, prkey); - } - print_reservation_key(buff, PRKEY_SIZE, mp->reservation_key, -- mp->prkey_source); -+ mp->sa_flags, mp->prkey_source); - condlog(3, "%s: reservation_key = %s %s%s", mp->alias, buff, origin, - from_file); - return 0; -diff --git a/libmultipath/structs.h b/libmultipath/structs.h -index 0194b1e..987479f 100644 ---- a/libmultipath/structs.h -+++ b/libmultipath/structs.h -@@ -367,6 +367,7 @@ struct multipath { - /* persistent management data*/ - int prkey_source; - struct be64 reservation_key; -+ uint8_t sa_flags; - unsigned char prflag; - int all_tg_pt; - struct gen_multipath generic_mp; -diff --git a/libmultipath/util.c b/libmultipath/util.c -index 7251ad0..8d8fcc8 100644 ---- a/libmultipath/util.c -+++ b/libmultipath/util.c -@@ -10,6 +10,8 @@ - #include <dirent.h> - #include <unistd.h> - #include <errno.h> -+#include <libudev.h> -+#include <mpath_persist.h> - - #include "util.h" - #include "debug.h" -@@ -435,6 +437,20 @@ int parse_prkey(char *ptr, uint64_t *prkey) - return 0; - } - -+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags) -+{ -+ char *flagstr; -+ -+ flagstr = strchr(ptr, ':'); -+ *flags = 0; -+ if (flagstr) { -+ *flagstr++ = '\0'; -+ if (strlen(flagstr) == 5 && strcmp(flagstr, "aptpl") == 0) -+ *flags = MPATH_F_APTPL_MASK; -+ } -+ return parse_prkey(ptr, prkey); -+} -+ - int safe_write(int fd, const void *buf, size_t count) - { - while (count > 0) { -diff --git a/libmultipath/util.h b/libmultipath/util.h -index a3ab894..56cec76 100644 ---- a/libmultipath/util.h -+++ b/libmultipath/util.h -@@ -19,6 +19,7 @@ void setup_thread_attr(pthread_attr_t *attr, size_t stacksize, int detached); - int systemd_service_enabled(const char *dev); - int get_linux_version_code(void); - int parse_prkey(char *ptr, uint64_t *prkey); -+int parse_prkey_flags(char *ptr, uint64_t *prkey, uint8_t *flags); - int safe_write(int fd, const void *buf, size_t count); - - #define KERNEL_VERSION(maj, min, ptc) ((((maj) * 256) + (min)) * 256 + (ptc)) -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 31f4585..30d8598 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -726,14 +726,17 @@ This is the service action reservation key used by mpathpersist. It must be - set for all multipath devices using persistent reservations, and it must be - the same as the RESERVATION KEY field of the PERSISTENT RESERVE OUT parameter - list which contains an 8-byte value provided by the application client to the --device server to identify the I_T nexus. -+device server to identify the I_T nexus. If the \fI--param-aptpl\fR option is -+used when registering the key with mpathpersist, \fB:aptpl\fR must be appended -+to the end of the reservation key. - .RS - .PP - Alternatively, this can be set to \fBfile\fR, which will store the RESERVATION - KEY registered by mpathpersist in the \fIprkeys_file\fR. multipathd will then - use this key to register additional paths as they appear. When the - registration is removed, the RESERVATION KEY is removed from the --\fIprkeys_file\fR. -+\fIprkeys_file\fR. The prkeys file will automatically keep track of whether -+the key was registered with \fI--param-aptpl\fR. - .TP - The default is: \fB<unset>\fR - .RE -diff --git a/multipathd/cli_handlers.c b/multipathd/cli_handlers.c -index ba50fb8..6452796 100644 ---- a/multipathd/cli_handlers.c -+++ b/multipathd/cli_handlers.c -@@ -21,6 +21,7 @@ - #include "sysfs.h" - #include <errno.h> - #include <libudev.h> -+#include <mpath_persist.h> - #include "util.h" - #include "prkey.h" - #include "propsel.h" -@@ -1463,6 +1464,7 @@ cli_getprkey(void * v, char ** reply, int * len, void * data) - struct multipath * mpp; - struct vectors * vecs = (struct vectors *)data; - char *mapname = get_keyparam(v, MAP); -+ char *flagstr = ""; - - mapname = convert_dev(mapname, 0); - condlog(3, "%s: get persistent reservation key (operator)", mapname); -@@ -1478,8 +1480,10 @@ cli_getprkey(void * v, char ** reply, int * len, void * data) - *len = strlen(*reply) + 1; - return 0; - } -- snprintf(*reply, 20, "0x%" PRIx64 "\n", -- get_be64(mpp->reservation_key)); -+ if (mpp->sa_flags & MPATH_F_APTPL_MASK) -+ flagstr = ":aptpl"; -+ snprintf(*reply, 20, "0x%" PRIx64 "%s\n", -+ get_be64(mpp->reservation_key), flagstr); - (*reply)[19] = '\0'; - *len = strlen(*reply) + 1; - return 0; -@@ -1503,7 +1507,7 @@ cli_unsetprkey(void * v, char ** reply, int * len, void * data) - - conf = get_multipath_config(); - pthread_cleanup_push(put_multipath_config, conf); -- ret = set_prkey(conf, mpp, 0); -+ ret = set_prkey(conf, mpp, 0, 0); - pthread_cleanup_pop(1); - - return ret; -@@ -1517,6 +1521,7 @@ cli_setprkey(void * v, char ** reply, int * len, void * data) - char *mapname = get_keyparam(v, MAP); - char *keyparam = get_keyparam(v, KEY); - uint64_t prkey; -+ uint8_t flags; - int ret; - struct config *conf; - -@@ -1527,14 +1532,14 @@ cli_setprkey(void * v, char ** reply, int * len, void * data) - if (!mpp) - return 1; - -- if (parse_prkey(keyparam, &prkey) != 0) { -+ if (parse_prkey_flags(keyparam, &prkey, &flags) != 0) { - condlog(0, "%s: invalid prkey : '%s'", mapname, keyparam); - return 1; - } - - conf = get_multipath_config(); - pthread_cleanup_push(put_multipath_config, conf); -- ret = set_prkey(conf, mpp, prkey); -+ ret = set_prkey(conf, mpp, prkey, flags); - pthread_cleanup_pop(1); - - return ret; -diff --git a/multipathd/main.c b/multipathd/main.c -index d40c416..6b1e782 100644 ---- a/multipathd/main.c -+++ b/multipathd/main.c -@@ -3089,6 +3089,7 @@ void * mpath_pr_event_handler_fn (void * pathp ) - - param= malloc(sizeof(struct prout_param_descriptor)); - memset(param, 0 , sizeof(struct prout_param_descriptor)); -+ param->sa_flags = mpp->sa_flags; - memcpy(param->sa_key, &mpp->reservation_key, 8); - param->num_transportid = 0; - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch deleted file mode 100644 index 5a3fd837..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0018-multipath-don-t-check-timestamps-without-a-path.patch +++ /dev/null @@ -1,34 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Tue, 5 Jun 2018 15:31:55 -0500 -Subject: [PATCH] multipath: don't check timestamps without a path - -If a path was blacklisted, pathvec could exist but have no path in it. -print_cmd_valid wasn't checking this before calling -find_multipaths_check_timeout(). This was causing it to dereference a -NULL pointer in these cases. - -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - multipath/main.c | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) - -diff --git a/multipath/main.c b/multipath/main.c -index c69e996..3f0a6aa 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -482,10 +482,8 @@ static int print_cmd_valid(int k, const vector pathvec, - pp, pp->find_multipaths_timeout, &until); - if (wait != FIND_MULTIPATHS_WAITING) - k = 1; -- } else if (pathvec != NULL) { -- pp = VECTOR_SLOT(pathvec, 0); -+ } else if (pathvec != NULL && (pp = VECTOR_SLOT(pathvec, 0))) - wait = find_multipaths_check_timeout(pp, 0, &until); -- } - if (wait == FIND_MULTIPATHS_WAITING) - printf("FIND_MULTIPATHS_WAIT_UNTIL=\"%ld.%06ld\"\n", - until.tv_sec, until.tv_nsec/1000); --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch deleted file mode 100644 index 23908fa5..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0019-libmultipath-fix-detect-alua-corner-case.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Fri, 8 Jun 2018 17:12:37 -0500 -Subject: [PATCH] libmultipath: fix detect alua corner case - -If retain_attach_hw_handler = no, then the paths tpgs state will never -be checked, and the multipath device will always select the alua -handler, if no other handler is selected. the paths tpgs state -should be checked, regardless of the retain_hwhandler value. - -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/propsel.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/libmultipath/propsel.c b/libmultipath/propsel.c -index 62a6893..f626c74 100644 ---- a/libmultipath/propsel.c -+++ b/libmultipath/propsel.c -@@ -403,9 +403,11 @@ int select_hwhandler(struct config *conf, struct multipath *mp) - bool all_tpgs = true; - - dh_state = &handler[2]; -+ -+ vector_foreach_slot(mp->paths, pp, i) -+ all_tpgs = all_tpgs && (pp->tpgs > 0); - if (mp->retain_hwhandler != RETAIN_HWHANDLER_OFF) { - vector_foreach_slot(mp->paths, pp, i) { -- all_tpgs = all_tpgs && (pp->tpgs > 0); - if (get_dh_state(pp, dh_state, sizeof(handler) - 2) > 0 - && strcmp(dh_state, "detached")) { - memcpy(handler, "1 ", 2); --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch deleted file mode 100644 index 624f45ef..00000000 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0020-multipath-fix-setting-conf-version.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Fri, 8 Jun 2018 17:23:07 -0500 -Subject: [PATCH] multipath: fix setting conf->version - -Commit d3b71498 stopped multipath from setting conf->version. Instead, -it was always being set to 0.0.0. Multipathd was still setting this -correctly. - -Fixes: d3b71498 "multipath: fix rcu thread cancellation hang" -Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> ---- - libmultipath/devmapper.c | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c -index f2befad..8136d15 100644 ---- a/libmultipath/devmapper.c -+++ b/libmultipath/devmapper.c -@@ -245,13 +245,13 @@ void libmp_dm_init(void) - int verbosity; - unsigned int version[3]; - -+ if (dm_prereq(version)) -+ exit(1); - conf = get_multipath_config(); - verbosity = conf->verbosity; -- memcpy(version, conf->version, sizeof(version)); -+ memcpy(conf->version, version, sizeof(version)); - put_multipath_config(conf); - dm_init(verbosity); -- if (dm_prereq(version)) -- exit(1); - dm_udev_set_sync_support(libmp_dm_udev_sync); - } - --- -2.7.4 - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch index 4ef3e708..e88e2561 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0021-RH-fixup-udev-rules-for-redhat.patch @@ -10,18 +10,21 @@ false warnings that gcc throws because of the changed options. Fix these too. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Update patch to 0.8.0 + +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- Makefile.inc | 2 +- kpartx/kpartx.rules | 2 +- multipath/Makefile | 4 ++-- - multipath/main.c | 2 +- - 4 files changed, 5 insertions(+), 5 deletions(-) + 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index af2f5ba..0b271ea 100644 +index fc728ca..2f0bcea 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -51,7 +51,7 @@ endif +@@ -48,7 +48,7 @@ endif prefix = exec_prefix = $(prefix) usr_prefix = $(prefix) @@ -64,19 +67,6 @@ index 0828a8f..b9bbb3c 100644 $(RM) $(DESTDIR)$(man8dir)/$(EXEC).8.gz $(RM) $(DESTDIR)$(man5dir)/$(EXEC).conf.5.gz -diff --git a/multipath/main.c b/multipath/main.c -index 3f0a6aa..6fdde03 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -389,7 +389,7 @@ static int find_multipaths_check_timeout(const struct path *pp, long tmo, - struct timespec now, ftimes[2], tdiff; - struct stat st; - long fd; -- int r, err, retries = 0; -+ int r, err = 0, retries = 0; - - clock_gettime(CLOCK_REALTIME, &now); - -- 2.7.4 diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch index 451c524c..21b8ec6b 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0022-RH-Remove-the-property-blacklist-exception-builtin.patch @@ -1,7 +1,7 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Wed, 2 Jul 2014 12:49:53 -0500 -Subject: [PATCH] RH: Remove the property blacklist exception builtin +From 0000000000000000000000000000000000000000 Mon Sep 17 +00:00:00 2001 From:Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, 2 Jul +2014 12:49:53 -0500 Subject: [PATCH] RH: Remove the property blacklist +exception builtin Multipath set the default property blacklist exceptions to (ID_SCSI_VPD|ID_WWN). This has the effect of blacklisting some internal @@ -12,76 +12,46 @@ blacklist_exception is given, then devices aren't failed for not matching it. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upsteam-Status: Pending + +Update patch to 0.8.2 +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- - libmultipath/blacklist.c | 15 ++++++--------- - multipath/multipath.conf.5 | 14 ++++++++------ - 2 files changed, 14 insertions(+), 15 deletions(-) + libmultipath/blacklist.c | 13 +++++-------- + 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c -index ee396e2..19d4697 100644 +index 00e8dbd..5204501 100644 --- a/libmultipath/blacklist.c +++ b/libmultipath/blacklist.c -@@ -181,12 +181,6 @@ setup_default_blist (struct config * conf) - if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT)) - return 1; +@@ -192,12 +192,6 @@ setup_default_blist (struct config * conf) + char * str; + int i; -- str = STRDUP("(SCSI_IDENT_|ID_WWN)"); +- str = STRDUP("^(ram|zram|raw|loop|fd|md|dm-|sr|scd|st|dcssblk)[0-9]"); - if (!str) - return 1; -- if (store_ble(conf->elist_property, str, ORIGIN_DEFAULT)) +- if (store_ble(conf->blist_devnode, str, ORIGIN_DEFAULT)) - return 1; - - vector_foreach_slot (conf->hwtable, hwe, i) { - if (hwe->bl_product) { - if (_blacklist_device(conf->blist_device, hwe->vendor, -@@ -390,9 +384,12 @@ filter_property(struct config * conf, struct udev_device * udev) - * This is the inverse of the 'normal' matching; - * the environment variable _has_ to match. - */ -- log_filter(devname, NULL, NULL, NULL, NULL, -- MATCH_PROPERTY_BLIST_MISSING); -- return MATCH_PROPERTY_BLIST_MISSING; -+ if (VECTOR_SIZE(conf->elist_property)) { -+ log_filter(devname, NULL, NULL, NULL, NULL, -+ MATCH_PROPERTY_BLIST_MISSING); -+ return MATCH_PROPERTY_BLIST_MISSING; -+ } -+ return 0; + str = STRDUP("^(td|hd|vd)[a-z]"); + if (!str) + return 1; +@@ -437,8 +431,11 @@ filter_property(struct config *conf, struct udev_device *udev, int lvl, + r = MATCH_NOTHING; + } + +- log_filter(devname, NULL, NULL, NULL, env, NULL, r, lvl); +- return r; ++ if (VECTOR_SIZE(conf->elist_property)) { ++ log_filter(devname, NULL, NULL, NULL, env, NULL, r, lvl); ++ return r; ++ } ++ return 0; } - void -diff --git a/multipath/multipath.conf.5 b/multipath/multipath.conf.5 -index 30d8598..c45da9f 100644 ---- a/multipath/multipath.conf.5 -+++ b/multipath/multipath.conf.5 -@@ -1179,10 +1179,6 @@ The \fIWorld Wide Identification\fR of a device. - .TP - .B property - Regular expression of the udev property to be whitelisted. --.RS --.TP --The default is: \fB(SCSI_IDENT_|ID_WWN)\fR --.RE - .TP - .B device - Subsection for the device description. This subsection recognizes the -@@ -1193,8 +1189,14 @@ keywords. For a full description of these keywords please see the \fIdevices\fR - section description. - .LP - The \fIproperty\fR whitelist handling is different from the usual --handling in the sense that the device \fIhas\fR to have a udev property that --matches the whitelist, otherwise the device will be blacklisted. In these cases the message \fIblacklisted, udev property missing\fR will be displayed. -+handling in the sense that if the propery whitelist is set, the device -+\fIhas\fR to have a udev property that matches the whitelist, otherwise the -+device will be blacklisted. In these cases the message \fIblacklisted, udev -+property missing\fR will be displayed. For example settting the -+property blacklist_exception to \fB(SCSI_IDENT_|ID_WWN)\fR will blacklist -+all devices that have no udev property whose name regex matches either -+\fBSCSI_IDENT_\fR or \fBID_WWN\fR. This works to exclude most -+non-multipathable devices. - . - . - .\" ---------------------------------------------------------------------------- + static void free_ble(struct blentry *ble) -- 2.7.4 diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch index 886f1c86..ea6137f8 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0023-RH-don-t-start-without-a-config-file.patch @@ -1,7 +1,10 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Wed, 15 Oct 2014 10:39:30 -0500 -Subject: [PATCH] RH: don't start without a config file +From 0bf8ff8dab26201b268b419809844c07e168f17d Mon Sep 17 00:00:00 2001 +From: Changqing Li <changqing.li@windriver.com> +Date: Fri, 23 Nov 2018 17:25:15 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, 15 + Oct 2014 10:39:30 -0500 Subject: [PATCH] RH: don't start without a config + file If /etc/multipath.conf doesn't exist, don't start multipathd and blacklist all devices when running multipath. A completely blank configuration file @@ -11,16 +14,21 @@ simple way to disable multipath. Simply removing or renaming /etc/multipath.conf will keep multipath from doing anything. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upstream-Status: Pending + +update this patch to new version +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- - libmultipath/config.c | 15 +++++++++++++++ + libmultipath/config.c | 18 ++++++++++++++++++ libmultipath/config.h | 1 + multipath/multipath.rules | 1 + multipathd/multipathd.8 | 2 ++ multipathd/multipathd.service | 1 + - 5 files changed, 20 insertions(+) + 5 files changed, 23 insertions(+) diff --git a/libmultipath/config.c b/libmultipath/config.c -index 5872927..0607403 100644 +index 5af7af5..e4233f1 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c @@ -26,6 +26,7 @@ @@ -30,30 +38,33 @@ index 5872927..0607403 100644 +#include "version.h" static int - hwe_strmatch (struct hwentry *hwe1, struct hwentry *hwe2) -@@ -658,6 +659,20 @@ load_config (char * file) - factorize_hwtable(conf->hwtable, builtin_hwtable_size); + hwe_strmatch (const struct hwentry *hwe1, const struct hwentry *hwe2) +@@ -743,6 +745,23 @@ load_config (char * file) + goto out; } - + factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); + } else { + condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); + if (conf->blist_devnode == NULL) { + conf->blist_devnode = vector_alloc(); + if (!conf->blist_devnode) { -+ condlog(0, "cannot allocate blacklist\n"); ++ conf->blist_devnode = vector_alloc(); ++ if (!conf->blist_devnode) { ++ condlog(0, "cannot allocate blacklist\n"); ++ goto out; ++ } ++ } ++ if (store_ble(conf->blist_devnode, strdup(".*"), ++ ORIGIN_NO_CONFIG)) { ++ condlog(0, "cannot store default no-config blacklist\n"); + goto out; + } + } -+ if (store_ble(conf->blist_devnode, strdup(".*"), -+ ORIGIN_NO_CONFIG)) { -+ condlog(0, "cannot store default no-config blacklist\n"); -+ goto out; -+ } } conf->processed_main_config = 1; diff --git a/libmultipath/config.h b/libmultipath/config.h -index fcbe3fc..3a42435 100644 +index 7d0cd9a..d7fb8e2 100644 --- a/libmultipath/config.h +++ b/libmultipath/config.h @@ -9,6 +9,7 @@ @@ -65,7 +76,7 @@ index fcbe3fc..3a42435 100644 /* * In kernel, fast_io_fail == 0 means immediate failure on rport delete. diff --git a/multipath/multipath.rules b/multipath/multipath.rules -index d658073..b3f54d7 100644 +index 9df11a9..0486bf7 100644 --- a/multipath/multipath.rules +++ b/multipath/multipath.rules @@ -9,6 +9,7 @@ IMPORT{cmdline}="nompath" @@ -77,7 +88,7 @@ index d658073..b3f54d7 100644 ENV{DEVTYPE}!="partition", GOTO="test_dev" IMPORT{parent}="DM_MULTIPATH_DEVICE_PATH" diff --git a/multipathd/multipathd.8 b/multipathd/multipathd.8 -index e78ac9e..09cdead 100644 +index 94c3f97..ed13efd 100644 --- a/multipathd/multipathd.8 +++ b/multipathd/multipathd.8 @@ -38,6 +38,8 @@ map regains its maximum performance and redundancy. diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch index 9330bf07..17542fd4 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0024-RH-use-rpm-optflags-if-present.patch @@ -1,52 +1,64 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Wed, 19 Apr 2017 06:10:01 -0500 -Subject: [PATCH] RH: use rpm optflags if present +From 436f7594485e35523269e662c4b5dc3a2c10ff9b Mon Sep 17 00:00:00 2001 +From: Changqing Li <changqing.li@windriver.com> +Date: Mon, 26 Nov 2018 09:19:17 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep +17 + 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Wed, +19 + Apr 2017 06:10:01 -0500 Subject: [PATCH] RH: use rpm optflags if +present Use the passed in optflags when compiling as an RPM, and keep the default flags as close as possible to the current fedora flags, while still being generic. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upstream-Status: Pending + +update this patch to new version + +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- Makefile.inc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 0b271ea..5ff69a3 100644 +index 42dbb5bf..55a06c60 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -85,14 +85,22 @@ TEST_CC_OPTION = $(shell \ +@@ -89,15 +89,23 @@ TEST_CC_OPTION = $(shell \ echo "$(2)"; \ fi) -STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) -- --OPTFLAGS = -O2 -g -pipe -Wall -Wextra -Wformat=2 -Werror=implicit-int \ -- -Werror=implicit-function-declaration -Werror=format-security \ -- -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered \ -- -Werror=cast-qual -Werror=discarded-qualifiers \ -- -Wp,-D_FORTIFY_SOURCE=2 $(STACKPROT) \ -- --param=ssp-buffer-size=4 +-ERROR_DISCARDED_QUALIFIERS := $(call TEST_CC_OPTION,-Werror=discarded-qualifiers,) +-WNOCLOBBERED := $(call TEST_CC_OPTION,-Wno-clobbered,) +ifndef RPM_OPT_FLAGS -+ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) -+ OPTFLAGS = -O2 -g -pipe -Wall -Werror=format-security \ -+ -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \ -+ $(STACKPROT) --param=ssp-buffer-size=4 \ -+ -grecord-gcc-switches -+ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1) -+ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -+ endif ++ STACKPROT := $(call TEST_CC_OPTION,-fstack-protector-strong,-fstack-protector) ++ OPTFLAGS = -O2 -g -pipe -Wall -Werror=format-security \ ++ -Wp,-D_FORTIFY_SOURCE=2 -fexceptions \ ++ $(STACKPROT) --param=ssp-buffer-size=4 \ ++ -grecord-gcc-switches ++ ifeq ($(shell test -f /usr/lib/rpm/redhat/redhat-hardened-cc1 && echo 1),1) ++ OPTFLAGS += -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 ++ endif +else -+ OPTFLAGS = $(RPM_OPT_FLAGS) ++ OPTFLAGS = $(RPM_OPT_FLAGS) +endif -+OPTFLAGS += -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \ -+ -Werror=implicit-function-declaration -Wno-sign-compare \ -+ -Wno-unused-parameter -Werror=cast-qual \ -+ -Werror=discarded-qualifiers ++OPTFLAGS += -Wextra -Wstrict-prototypes -Wformat=2 -Werror=implicit-int \ ++ -Werror=implicit-function-declaration -Wno-sign-compare \ ++ -Wno-unused-parameter -Werror=cast-qual \ ++ -Werror=discarded-qualifiers +-OPTFLAGS = -O2 -g -pipe -Werror -Wall -Wextra -Wformat=2 -Werror=implicit-int \ +- -Werror=implicit-function-declaration -Werror=format-security \ +- $(WNOCLOBBERED) \ +- -Werror=cast-qual $(ERROR_DISCARDED_QUALIFIERS) \ +- $(STACKPROT) --param=ssp-buffer-size=4 + CPPFLAGS := -Wp,-D_FORTIFY_SOURCE=2 CFLAGS := $(OPTFLAGS) -DBIN_DIR=\"$(bindir)\" -DLIB_STRING=\"${LIB}\" -DRUN_DIR=\"${RUN}\" \ -MMD -MP $(CFLAGS) -- -2.7.4 +2.17.1 diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch index 5cad22b2..a1407718 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0025-RH-add-mpathconf.patch @@ -1,7 +1,9 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Thu, 16 Oct 2014 15:49:01 -0500 -Subject: [PATCH] RH: add mpathconf +From eb5a36e6e0caedf06008e48eb77b7bf7c6534ee5 Mon Sep 17 00:00:00 2001 +From: Changqing Li <changqing.li@windriver.com> +Date: Mon, 26 Nov 2018 09:55:12 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Thu, 16 + Oct 2014 15:49:01 -0500 Subject: [PATCH] RH: add mpathconf mpathconf is a program (largely based on lvmcomf) to help users configure /etc/multipath.conf and enable or disable multipathing. It @@ -11,6 +13,12 @@ with the OS defaults, and to enable and disable multipathing via a single command. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upstream-Status: Pending + +update this patch to new version + +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- libmultipath/config.c | 1 + multipath/Makefile | 5 + @@ -21,11 +29,11 @@ Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> create mode 100644 multipath/mpathconf.8 diff --git a/libmultipath/config.c b/libmultipath/config.c -index 0607403..5c98e48 100644 +index e4233f1..b779505 100644 --- a/libmultipath/config.c +++ b/libmultipath/config.c -@@ -661,6 +661,7 @@ load_config (char * file) - +@@ -747,6 +747,7 @@ load_config (char * file) + factorize_hwtable(conf->hwtable, builtin_hwtable_size, file); } else { condlog(0, "/etc/multipath.conf does not exist, blacklisting all devices."); + condlog(0, "You can run /sbin/mpathconf to create or modify /etc/multipath.conf"); diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch index ddf022f7..5fd6d668 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0026-RH-add-wwids-from-kernel-cmdline-mpath.wwids-with-A.patch @@ -1,7 +1,13 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Fri, 17 Oct 2014 11:20:34 -0500 -Subject: [PATCH] RH: add wwids from kernel cmdline mpath.wwids with -A +From 0f54b3120ca06ff3168cdbf901a27b68c4638398 Mon Sep 17 00:00:00 2001 +From: Changqing Li <changqing.li@windriver.com> +Date: Thu, 26 Sep 2019 16:29:48 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep +17 + 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Fri, +17 + Oct 2014 11:20:34 -0500 Subject: [PATCH] RH: add wwids from kernel +cmdline + mpath.wwids with -A This patch adds another option to multipath, "-A", which reads /proc/cmdline for mpath.wwid=<WWID> options, and adds any wwids it finds @@ -13,68 +19,71 @@ patch also execs "/sbin/multipath -A" before running multipathd in multipathd.service Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upstream-Status: Pending + +Update this patch to new version 0.8.2 + +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- - libmultipath/wwids.c | 44 +++++++++++++++++++++++++++++++++++++++++++ - libmultipath/wwids.h | 1 + - multipath/main.c | 10 ++++++++-- - multipath/multipath.8 | 5 ++++- - multipathd/multipathd.service | 1 + - 5 files changed, 58 insertions(+), 3 deletions(-) + libmultipath/wwids.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ + libmultipath/wwids.h | 1 + + 2 files changed, 45 insertions(+) diff --git a/libmultipath/wwids.c b/libmultipath/wwids.c -index 53e7951..39e08cd 100644 +index 28a2150d..a0bfa851 100644 --- a/libmultipath/wwids.c +++ b/libmultipath/wwids.c -@@ -443,3 +443,47 @@ int op ## _wwid(const char *wwid) \ +@@ -454,3 +454,47 @@ int op ## _wwid(const char *wwid) \ declare_failed_wwid_op(is_failed, false) declare_failed_wwid_op(mark_failed, true) declare_failed_wwid_op(unmark_failed, true) + +int remember_cmdline_wwid(void) +{ -+ FILE *f = NULL; -+ char buf[LINE_MAX], *next, *ptr; -+ int ret = 0; ++ FILE *f = NULL; ++ char buf[LINE_MAX], *next, *ptr; ++ int ret = 0; + -+ f = fopen("/proc/cmdline", "re"); -+ if (!f) { -+ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); -+ return -1; -+ } ++ f = fopen("/proc/cmdline", "re"); ++ if (!f) { ++ condlog(0, "can't open /proc/cmdline : %s", strerror(errno)); ++ return -1; ++ } + -+ if (!fgets(buf, sizeof(buf), f)) { -+ if (ferror(f)) -+ condlog(0, "read of /proc/cmdline failed : %s", -+ strerror(errno)); -+ else -+ condlog(0, "couldn't read /proc/cmdline"); -+ fclose(f); -+ return -1; -+ } -+ fclose(f); -+ next = buf; -+ while((ptr = strstr(next, "mpath.wwid="))) { -+ ptr += 11; -+ next = strpbrk(ptr, " \t\n"); -+ if (next) { -+ *next = '\0'; -+ next++; -+ } -+ if (strlen(ptr)) { -+ if (remember_wwid(ptr) != 0) -+ ret = -1; -+ } -+ else { -+ condlog(0, "empty mpath.wwid kernel command line option"); -+ ret = -1; -+ } -+ if (!next) -+ break; -+ } -+ return ret; ++ if (!fgets(buf, sizeof(buf), f)) { ++ if (ferror(f)) ++ condlog(0, "read of /proc/cmdline failed : %s", ++ strerror(errno)); ++ else ++ condlog(0, "couldn't read /proc/cmdline"); ++ fclose(f); ++ return -1; ++ } ++ fclose(f); ++ next = buf; ++ while((ptr = strstr(next, "mpath.wwid="))) { ++ ptr += 11; ++ next = strpbrk(ptr, " \t\n"); ++ if (next) { ++ *next = '\0'; ++ next++; ++ } ++ if (strlen(ptr)) { ++ if (remember_wwid(ptr) != 0) ++ ret = -1; ++ } ++ else { ++ condlog(0, "empty mpath.wwid kernel command line option"); ++ ret = -1; ++ } ++ if (!next) ++ break; ++ } ++ return ret; +} diff --git a/libmultipath/wwids.h b/libmultipath/wwids.h -index 0c6ee54..e32a0b0 100644 +index 0c6ee54d..e32a0b0e 100644 --- a/libmultipath/wwids.h +++ b/libmultipath/wwids.h @@ -17,6 +17,7 @@ int remember_wwid(char *wwid); @@ -85,83 +94,6 @@ index 0c6ee54..e32a0b0 100644 enum { WWID_IS_NOT_FAILED = 0, -diff --git a/multipath/main.c b/multipath/main.c -index 6fdde03..7bac232 100644 ---- a/multipath/main.c -+++ b/multipath/main.c -@@ -109,7 +109,7 @@ usage (char * progname) - { - fprintf (stderr, VERSION_STRING); - fprintf (stderr, "Usage:\n"); -- fprintf (stderr, " %s [-a|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname); -+ fprintf (stderr, " %s [-a|-A|-c|-w|-W] [-d] [-r] [-i] [-v lvl] [-p pol] [-b fil] [-q] [dev]\n", progname); - fprintf (stderr, " %s -l|-ll|-f [-v lvl] [-b fil] [-R num] [dev]\n", progname); - fprintf (stderr, " %s -F [-v lvl] [-R num]\n", progname); - fprintf (stderr, " %s -t\n", progname); -@@ -123,6 +123,8 @@ usage (char * progname) - " -f flush a multipath device map\n" - " -F flush all multipath device maps\n" - " -a add a device wwid to the wwids file\n" -+ " -A add devices from kernel command line mpath.wwids\n" -+ " parameters to wwids file\n" - " -c check if a device should be a path in a multipath device\n" - " -C check if a multipath device has usable paths\n" - " -q allow queue_if_no_path when multipathd is not running\n" -@@ -907,7 +909,7 @@ main (int argc, char *argv[]) - exit(1); - multipath_conf = conf; - conf->retrigger_tries = 0; -- while ((arg = getopt(argc, argv, ":adcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) { -+ while ((arg = getopt(argc, argv, ":aAdcChl::FfM:v:p:b:BrR:itquUwW")) != EOF ) { - switch(arg) { - case 1: printf("optarg : %s\n",optarg); - break; -@@ -974,6 +976,10 @@ main (int argc, char *argv[]) - case 't': - r = dump_config(conf); - goto out_free_config; -+ case 'A': -+ if (remember_cmdline_wwid() != 0) -+ exit(1); -+ exit(0); - case 'h': - usage(argv[0]); - exit(0); -diff --git a/multipath/multipath.8 b/multipath/multipath.8 -index 914a8cb..8c6a4c1 100644 ---- a/multipath/multipath.8 -+++ b/multipath/multipath.8 -@@ -25,7 +25,7 @@ multipath \- Device mapper target autoconfig. - .RB [\| \-b\ \c - .IR bindings_file \|] - .RB [\| \-d \|] --.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-u | \-U | \-w | \-W \|] -+.RB [\| \-h | \-l | \-ll | \-f | \-t | \-F | \-B | \-c | \-C | \-q | \-r | \-i | \-a | \-A | \-u | \-U | \-w | \-W \|] - .RB [\| \-p\ \c - .IR failover | multibus | group_by_serial | group_by_prio | group_by_node_name \|] - .RB [\| \-R\ \c -@@ -135,6 +135,9 @@ Add the WWID for the specified device to the WWIDs file. - Check if the device specified in the program environment should be - a path in a multipath device. - . -+.B \-A -+add wwids from any kernel command line mpath.wwid parameters to the wwids file -+. - .TP - .B \-U - Check if the device specified in the program environment is a multipath device -diff --git a/multipathd/multipathd.service b/multipathd/multipathd.service -index 17434ce..0fbcc46 100644 ---- a/multipathd/multipathd.service -+++ b/multipathd/multipathd.service -@@ -15,6 +15,7 @@ Type=notify - NotifyAccess=main - LimitCORE=infinity - ExecStartPre=-/sbin/modprobe -a scsi_dh_alua scsi_dh_emc scsi_dh_rdac dm-multipath -+ExecStartPre=-/sbin/multipath -A - ExecStart=/sbin/multipathd -d -s - ExecReload=/sbin/multipathd reconfigure - TasksMax=infinity -- -2.7.4 +2.17.1 diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch index a23e1673..c59edbbb 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0027-RH-warn-on-invalid-regex-instead-of-failing.patch @@ -1,7 +1,7 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Mon, 6 Nov 2017 21:39:28 -0600 -Subject: [PATCH] RH: warn on invalid regex instead of failing +From 0000000000000000000000000000000000000000 Mon Sep 17 +00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Mon, 6 Nov +2017 21:39:28 -0600 Subject: [PATCH] RH: warn on invalid regex instead of +failing multipath.conf used to allow "*" as a match everything regular expression, instead of requiring ".*". Instead of erroring when the old style @@ -9,48 +9,56 @@ regular expressions are used, it should print a warning and convert them. Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upstream-Status: Pending + +update this patch to 0.8.2 + +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- - libmultipath/dict.c | 27 +++++++++++++++++++++------ + libmultipath/dict.c | 29 ++++++++++++++++++++++------- libmultipath/parser.c | 13 +++++++++++++ libmultipath/parser.h | 1 + - 3 files changed, 35 insertions(+), 6 deletions(-) + 3 files changed, 36 insertions(+), 7 deletions(-) diff --git a/libmultipath/dict.c b/libmultipath/dict.c -index 7ad0f5a..ab808d6 100644 +index c6eba0f..05ed3d8 100644 --- a/libmultipath/dict.c +++ b/libmultipath/dict.c -@@ -55,6 +55,21 @@ set_str(vector strvec, void *ptr) +@@ -59,6 +59,21 @@ set_str(vector strvec, void *ptr) } static int +set_regex(vector strvec, void *ptr) +{ -+ char **str_ptr = (char **)ptr; ++ char **str_ptr = (char **)ptr; + -+ if (*str_ptr) -+ FREE(*str_ptr); -+ *str_ptr = set_regex_value(strvec); ++ if (*str_ptr) ++ FREE(*str_ptr); ++ *str_ptr = set_regex_value(strvec); + -+ if (!*str_ptr) -+ return 1; ++ if (!*str_ptr) ++ return 1; + -+ return 0; ++ return 0; +} + +static int set_yes_no(vector strvec, void *ptr) { char * buff; -@@ -1271,7 +1286,7 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ +@@ -1415,8 +1430,8 @@ ble_ ## option ## _handler (struct config *conf, vector strvec) \ + \ if (!conf->option) \ return 1; \ - \ +- \ - buff = set_value(strvec); \ ++ \ + buff = set_regex_value(strvec); \ if (!buff) \ return 1; \ \ -@@ -1287,7 +1302,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ +@@ -1432,7 +1447,7 @@ ble_ ## option ## _ ## name ## _handler (struct config *conf, vector strvec) \ if (!conf->option) \ return 1; \ \ @@ -59,7 +67,7 @@ index 7ad0f5a..ab808d6 100644 if (!buff) \ return 1; \ \ -@@ -1388,16 +1403,16 @@ device_handler(struct config *conf, vector strvec) +@@ -1535,16 +1550,16 @@ device_handler(struct config *conf, vector strvec) return 0; } @@ -81,24 +89,24 @@ index 7ad0f5a..ab808d6 100644 declare_hw_handler(hwhandler, set_str) diff --git a/libmultipath/parser.c b/libmultipath/parser.c -index b8b7e0d..34b4ad2 100644 +index e00c5ff..6ca5842 100644 --- a/libmultipath/parser.c +++ b/libmultipath/parser.c -@@ -380,6 +380,19 @@ set_value(vector strvec) - return alloc; +@@ -382,6 +382,19 @@ oom: + return NULL; } +void * +set_regex_value(vector strvec) +{ -+ char *buff = set_value(strvec); ++ char *buff = set_value(strvec); + -+ if (buff && strcmp("*", buff) == 0) { -+ condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\""); -+ FREE(buff); -+ return strdup(".*"); -+ } -+ return buff; ++ if (buff && strcmp("*", buff) == 0) { ++ condlog(0, "Invalid regular expression \"*\" in multipath.conf. Using \".*\""); ++ FREE(buff); ++ return strdup(".*"); ++ } ++ return buff; +} + /* non-recursive configuration stream handler */ diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch index 05e68649..ad03b8ac 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0028-RH-reset-default-find_mutipaths-value-to-off.patch @@ -1,18 +1,27 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Benjamin Marzinski <bmarzins@redhat.com> -Date: Thu, 7 Jun 2018 17:43:52 -0500 -Subject: [PATCH] RH: reset default find_mutipaths value to off +From 16900150e02e5b367a8b33621b393975ad011130 Mon Sep 17 00:00:00 2001 +From: Changqing Li <changqing.li@windriver.com> +Date: Mon, 26 Nov 2018 11:12:01 +0800 +Subject: [PATCH] From 0000000000000000000000000000000000000000 Mon Sep 17 + 00:00:00 2001 From: Benjamin Marzinski <bmarzins@redhat.com> Date: Thu, 7 Jun + 2018 17:43:52 -0500 Subject: [PATCH] RH: reset default find_mutipaths value + to off Upstream has changed to default find_multipaths to "strict". For now Redhat will retain the previous default of "off". Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com> + +Upstream-Status: Pending + +Update this patch to new version + +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- libmultipath/defaults.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libmultipath/defaults.h b/libmultipath/defaults.h -index f076b4b..70ba98a 100644 +index 6576939..a2404b2 100644 --- a/libmultipath/defaults.h +++ b/libmultipath/defaults.h @@ -17,7 +17,7 @@ @@ -20,7 +29,7 @@ index f076b4b..70ba98a 100644 #define DEFAULT_VERBOSITY 2 #define DEFAULT_REASSIGN_MAPS 0 -#define DEFAULT_FIND_MULTIPATHS FIND_MULTIPATHS_STRICT -+#define DEFAULT_FIND_MULTIPATHS FIND_MULTIPATHS_OFF ++#define DEFAULT_FIND_MULTIPATHS FIND_MULTIPATHS_OFF #define DEFAULT_FAST_IO_FAIL 5 #define DEFAULT_DEV_LOSS_TMO 600 #define DEFAULT_RETAIN_HWHANDLER RETAIN_HWHANDLER_ON diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch index 45cd32ac..3919f990 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0029-multipath-tools-modify-Makefile.inc-for-cross-compil.patch @@ -1,6 +1,6 @@ -From 8bdd4481d822b6625d8bf719431ca74ed1b5e021 Mon Sep 17 00:00:00 2001 +From c3436ec8a502a40579abf62be0a479fa9d7888ad Mon Sep 17 00:00:00 2001 From: Changqing Li <changqing.li@windriver.com> -Date: Mon, 16 Jul 2018 15:56:37 +0800 +Date: Tue, 4 Jun 2019 11:39:39 +0800 Subject: [PATCH] multipath-tools: modify Makefile.inc for cross-compilation Do not look for systemd info on the host, and allow us to pass in CFLAGS @@ -23,21 +23,29 @@ update for version 0.7.7 remove change about CFLAGS part, since patch 0024 already have similar function. Signed-off-by: Changqing Li <changqing.li@windriver.com> + +update for version 0.8.1 +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- - Makefile.inc | 8 ++------ - 1 file changed, 2 insertions(+), 6 deletions(-) + Makefile.inc | 11 ----------- + 1 file changed, 11 deletions(-) diff --git a/Makefile.inc b/Makefile.inc -index 57a1835..0c403c7 100644 +index 661f141..3f9fd28 100644 --- a/Makefile.inc +++ b/Makefile.inc -@@ -38,12 +38,6 @@ ifndef RUN +@@ -35,17 +35,6 @@ ifndef RUN endif endif -ifndef SYSTEMD -- ifeq ($(shell systemctl --version > /dev/null 2>&1 && echo 1), 1) -- SYSTEMD = $(shell systemctl --version 2> /dev/null | sed -n 's/systemd \([0-9]*\)/\1/p') +- ifeq ($(shell pkg-config --modversion libsystemd >/dev/null 2>&1 && echo 1), 1) +- SYSTEMD = $(shell pkg-config --modversion libsystemd) +- else +- ifeq ($(shell systemctl --version >/dev/null 2>&1 && echo 1), 1) +- SYSTEMD = $(shell systemctl --version 2> /dev/null | \ +- sed -n 's/systemd \([0-9]*\).*/\1/p') +- endif - endif -endif - diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch index 12811804..3e88b410 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0030-Always-use-devmapper.patch @@ -1,7 +1,7 @@ -From d929a1ea5e42ecbe30c990644ed4ada2817c6439 Mon Sep 17 00:00:00 2001 +From e4acb46b10484d1da6f093257e34f269832e6a37 Mon Sep 17 00:00:00 2001 From: Changqing Li <changqing.li@windriver.com> -Date: Mon, 16 Jul 2018 16:00:14 +0800 -Subject: [PATCH] Always use devmapper +Date: Mon, 26 Nov 2018 11:17:41 +0800 +Subject: [PATCH] Subject: [PATCH] Always use devmapper Do not try to compute several _API_ make variables from host information when cross-compiling. @@ -18,12 +18,15 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Rebase to 0.7.7 Signed-off-by: Changqing Li <changqing.li@windriver.com> + +Rebase to 0.7.9 +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- libmultipath/Makefile | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/libmultipath/Makefile b/libmultipath/Makefile -index f51786d..3ad9c48 100644 +index 33f5269..adf6f4a 100644 --- a/libmultipath/Makefile +++ b/libmultipath/Makefile @@ -20,21 +20,10 @@ ifdef SYSTEMD diff --git a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch index 88a758dc..418c0200 100644 --- a/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch +++ b/external/meta-openembedded/meta-oe/recipes-support/multipath-tools/files/0031-Always-use-devmapper-for-kpartx.patch @@ -1,7 +1,7 @@ -From 145f2b829e5362cda975bebafd7fe4d00ff56d1c Mon Sep 17 00:00:00 2001 +From 1fe937835311a2d0afbc85ce4a4dbd3c9e0c912f Mon Sep 17 00:00:00 2001 From: Changqing Li <changqing.li@windriver.com> -Date: Mon, 16 Jul 2018 16:02:07 +0800 -Subject: [PATCH] Always use devmapper for kpartx +Date: Mon, 26 Nov 2018 11:19:45 +0800 +Subject: [PATCH] Subject: [PATCH] Always use devmapper for kpartx Do not try to compute the LIBDM_API_COOKIE make variable from host information when cross-compiling. @@ -16,6 +16,9 @@ Signed-off-by: Hongxu Jia <hongxu.jia@windriver.com> Rebase to 0.7.7 Signed-off-by: Changqing Li <changqing.li@windriver.com> + +Rebase to 0.7.9 +Signed-off-by: Changqing Li <changqing.li@windriver.com> --- kpartx/Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) |