From 9ca7a8f2b7ca5113e9ca38df0821089de6c0a493 Mon Sep 17 00:00:00 2001 From: jmckenna Date: Fri, 6 Jul 2018 08:38:34 -0400 Subject: [PATCH] Update kernel drivers to compile with newer kernel Kernel update to CentOS 7.5 versions are to be paired with updated out-of-tree kernel modules, mostly for compilation purposes. Depends-On: https://review.openstack.org/580689 Change-Id: Ie947ad4b2b4bc88d06f454a36eef0a787d23f289 Signed-off-by: Jason McKenna Story: 2002761 Task: 22841 Signed-off-by: Scott Little --- .../drbd/centos/build_srpm.data | 2 +- .../drbd/centos/drbd-kernel.spec | 2 + ...ompat-Statically-initialize-families.patch | 171 ++++++++++++++++++ 3 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 kernel/kernel-modules/drbd/centos/patches/compat-Statically-initialize-families.patch diff --git a/kernel/kernel-modules/drbd/centos/build_srpm.data b/kernel/kernel-modules/drbd/centos/build_srpm.data index 0e3d42eb2..71dcefb15 100644 --- a/kernel/kernel-modules/drbd/centos/build_srpm.data +++ b/kernel/kernel-modules/drbd/centos/build_srpm.data @@ -1,4 +1,4 @@ COPY_LIST="$FILES_BASE/* \ $DISTRO/patches/* \ $CGCS_BASE/downloads/drbd-8.4.7-1.tar.gz" -TIS_PATCH_VER=3 +TIS_PATCH_VER=4 diff --git a/kernel/kernel-modules/drbd/centos/drbd-kernel.spec b/kernel/kernel-modules/drbd/centos/drbd-kernel.spec index dd88cfc8c..23e8fe898 100644 --- a/kernel/kernel-modules/drbd/centos/drbd-kernel.spec +++ b/kernel/kernel-modules/drbd/centos/drbd-kernel.spec @@ -25,6 +25,7 @@ Source0: http://oss.linbit.com/drbd/drbd-%{tarball_version}.tar.gz # WRS Patch0001: 0001-remove_bind_before_connect_error.patch +Patch0002: compat-Statically-initialize-families.patch %define kversion %(rpm -q kernel%{?bt_ext}-devel | sort --version-sort | tail -1 | sed 's/kernel%{?bt_ext}-devel-//') @@ -85,6 +86,7 @@ echo "Done." %prep %setup -q -n drbd-%{tarball_version} %patch0001 -p1 +%patch0002 -p1 %build rm -rf obj diff --git a/kernel/kernel-modules/drbd/centos/patches/compat-Statically-initialize-families.patch b/kernel/kernel-modules/drbd/centos/patches/compat-Statically-initialize-families.patch new file mode 100644 index 000000000..a64d1765f --- /dev/null +++ b/kernel/kernel-modules/drbd/centos/patches/compat-Statically-initialize-families.patch @@ -0,0 +1,171 @@ +From 7510d78909774e33b64ada4055bea65881350763 Mon Sep 17 00:00:00 2001 +Message-Id: <7510d78909774e33b64ada4055bea65881350763.1528136610.git.Jim.Somerville@windriver.com> +From: Nick Wang +Date: Mon, 13 Mar 2017 15:23:29 +0800 +Subject: [PATCH 1/1] compat: Statically initialize families + +In a07ea4d9, genetlink no longer use static family id. +GENL_ID_GENERATE is removed. +In 489111e5, statically initialize the families and remove +the inline functions. + +Thanks to Nick Wang for preparing a first draft. +Unfortunately this version actually broke netlink on v4.10. Probably +only compile-tested, but never "drbdadm up" tested. + +Signed-off-by: Nick Wang +[add missing pieces introduced in 489111e5] +Signed-off-by: Roland Kammerer +[Simplified :-) and backported to drbd 8.4] +Signed-off-by: Lars Ellenberg + +Signed-off-by: Jim Somerville +--- + .../tests/have_genl_family_in_genlmsg_multicast.c | 9 ++++++ + drbd/compat/tests/have_genl_id_generate.c | 6 ++++ + .../tests/have_genl_register_family_with_ops.c | 9 ++++++ + .../tests/have_genl_register_family_with_ops3.c | 9 ++++++ + ...gic_func-genl_register_family_with_ops_groups.h | 4 +++ + drbd/linux/genl_magic_func.h | 34 +++++++++++++++------- + 6 files changed, 61 insertions(+), 10 deletions(-) + create mode 100644 drbd/compat/tests/have_genl_family_in_genlmsg_multicast.c + create mode 100644 drbd/compat/tests/have_genl_id_generate.c + create mode 100644 drbd/compat/tests/have_genl_register_family_with_ops.c + create mode 100644 drbd/compat/tests/have_genl_register_family_with_ops3.c + +diff --git a/drbd/compat/tests/have_genl_family_in_genlmsg_multicast.c b/drbd/compat/tests/have_genl_family_in_genlmsg_multicast.c +new file mode 100644 +index 0000000..6d44faa +--- /dev/null ++++ b/drbd/compat/tests/have_genl_family_in_genlmsg_multicast.c +@@ -0,0 +1,9 @@ ++#include ++ ++void test(void) ++{ ++ struct genl_family family = { }; ++ struct sk_buff *skb = NULL; ++ ++ genlmsg_multicast(&family, skb, 0, 0, GFP_KERNEL); ++} +diff --git a/drbd/compat/tests/have_genl_id_generate.c b/drbd/compat/tests/have_genl_id_generate.c +new file mode 100644 +index 0000000..4ef0e8e +--- /dev/null ++++ b/drbd/compat/tests/have_genl_id_generate.c +@@ -0,0 +1,6 @@ ++#include ++ ++void test(void) ++{ ++ int i = GENL_ID_GENERATE; ++} +diff --git a/drbd/compat/tests/have_genl_register_family_with_ops.c b/drbd/compat/tests/have_genl_register_family_with_ops.c +new file mode 100644 +index 0000000..27123db +--- /dev/null ++++ b/drbd/compat/tests/have_genl_register_family_with_ops.c +@@ -0,0 +1,9 @@ ++#include ++ ++void test(void) ++{ ++ struct genl_family family = { }; ++ struct genl_ops ops[23]; ++ ++ genl_register_family_with_ops(&family, ops); ++} +diff --git a/drbd/compat/tests/have_genl_register_family_with_ops3.c b/drbd/compat/tests/have_genl_register_family_with_ops3.c +new file mode 100644 +index 0000000..11b6d73 +--- /dev/null ++++ b/drbd/compat/tests/have_genl_register_family_with_ops3.c +@@ -0,0 +1,9 @@ ++#include ++ ++void test(void) ++{ ++ struct genl_family family = { }; ++ struct genl_ops ops[23]; ++ ++ genl_register_family_with_ops(&family, ops, 23); ++} +diff --git a/drbd/linux/genl_magic_func-genl_register_family_with_ops_groups.h b/drbd/linux/genl_magic_func-genl_register_family_with_ops_groups.h +index 27d8f73..403e8e2 100644 +--- a/drbd/linux/genl_magic_func-genl_register_family_with_ops_groups.h ++++ b/drbd/linux/genl_magic_func-genl_register_family_with_ops_groups.h +@@ -29,9 +29,13 @@ static int CONCAT_(GENL_MAGIC_FAMILY, _genl_multicast_ ## group)( \ + + int CONCAT_(GENL_MAGIC_FAMILY, _genl_register)(void) + { ++#if defined(COMPAT_HAVE_GENL_REGISTER_FAMILY_WITH_OPS) || defined(COMPAT_HAVE_GENL_REGISTER_FAMILY_WITH_OPS3) + return genl_register_family_with_ops_groups(&ZZZ_genl_family, \ + ZZZ_genl_ops, \ + ZZZ_genl_mcgrps); ++#else ++ return genl_register_family(&ZZZ_genl_family); ++#endif + } + + void CONCAT_(GENL_MAGIC_FAMILY, _genl_unregister)(void) +diff --git a/drbd/linux/genl_magic_func.h b/drbd/linux/genl_magic_func.h +index 29f44a8..504719a 100644 +--- a/drbd/linux/genl_magic_func.h ++++ b/drbd/linux/genl_magic_func.h +@@ -261,15 +261,7 @@ static struct genl_ops ZZZ_genl_ops[] __read_mostly = { + * {{{2 + */ + #define ZZZ_genl_family CONCAT_(GENL_MAGIC_FAMILY, _genl_family) +-static struct genl_family ZZZ_genl_family __read_mostly = { +- .id = GENL_ID_GENERATE, +- .name = __stringify(GENL_MAGIC_FAMILY), +- .version = GENL_MAGIC_VERSION, +-#ifdef GENL_MAGIC_FAMILY_HDRSZ +- .hdrsize = NLA_ALIGN(GENL_MAGIC_FAMILY_HDRSZ), +-#endif +- .maxattr = ARRAY_SIZE(drbd_tla_nl_policy)-1, +-}; ++static struct genl_family ZZZ_genl_family; + + /* + * Magic: define multicast groups +@@ -282,13 +274,35 @@ static struct genl_family ZZZ_genl_family __read_mostly = { + * genetlink: pass family to functions using groups + * genetlink: only pass array to genl_register_family_with_ops() + * which are commits c53ed742..2a94fe48 ++ * ++ * v4.10, 489111e5 genetlink: statically initialize families ++ * and previous commit drop GENL_ID_GENERATE and register helper functions. + */ +-#ifdef genl_register_family_with_ops_groups ++#if defined(genl_register_family_with_ops_groups) || !defined(GENL_ID_GENERATE) + #include + #else + #include + #endif + ++static struct genl_family ZZZ_genl_family __read_mostly = { ++ /* .id = GENL_ID_GENERATE, which exists no longer, and was 0 anyways */ ++ .name = __stringify(GENL_MAGIC_FAMILY), ++ .version = GENL_MAGIC_VERSION, ++#ifdef GENL_MAGIC_FAMILY_HDRSZ ++ .hdrsize = NLA_ALIGN(GENL_MAGIC_FAMILY_HDRSZ), ++#endif ++ .maxattr = ARRAY_SIZE(CONCAT_(GENL_MAGIC_FAMILY, _tla_nl_policy))-1, ++ ++#ifndef GENL_ID_GENERATE ++ .ops = ZZZ_genl_ops, ++ .n_ops = ARRAY_SIZE(ZZZ_genl_ops), ++ .mcgrps = ZZZ_genl_mcgrps, ++ .n_mcgrps = ARRAY_SIZE(ZZZ_genl_mcgrps), ++ .module = THIS_MODULE, ++#endif ++}; ++ ++ + /* + * Magic: provide conversion functions {{{1 + * populate skb from struct. +-- +1.8.3.1 +