From 74fda436b1841bb9e9458fafd8ae101ee779fa613cceb714c086a95ff2bb6817 Mon Sep 17 00:00:00 2001 From: nick wang Date: Wed, 29 Jun 2016 02:13:35 +0000 Subject: [PATCH] Accepting request 405382 from home:wanghaisu:branches:network:ha-clustering:Factory Fix bsc#986215 and bsc#986784. OBS-URL: https://build.opensuse.org/request/show/405382 OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/drbd-utils?expand=0&rev=25 --- drbd-utils.changes | 11 ++++++ drbd-utils.spec | 4 ++- fix-segfault-up-stacked-resource.patch | 49 ++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 fix-segfault-up-stacked-resource.patch diff --git a/drbd-utils.changes b/drbd-utils.changes index b6bdfd2..8464fe0 100644 --- a/drbd-utils.changes +++ b/drbd-utils.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Wed Jun 29 01:54:54 UTC 2016 - nwang@suse.com + +- bsc#986215, fix segfault of up a DRBD9 stacked resource. +- Add patch fix-segfault-up-stacked-resource.patch + +------------------------------------------------------------------- +Wed Jun 29 01:53:49 UTC 2016 - nwang@suse.com + +- bsc#986784, fix DRBD9 stacked resource could not started by RA. + ------------------------------------------------------------------- Fri Apr 8 13:04:00 UTC 2016 - lchiquitto@suse.de diff --git a/drbd-utils.spec b/drbd-utils.spec index c29cf36..c900dcf 100644 --- a/drbd-utils.spec +++ b/drbd-utils.spec @@ -1,7 +1,7 @@ # # spec file for package drbd-utils # -# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -32,6 +32,7 @@ Patch3: zeroout-discard-devices.patch Patch4: service-mod.patch Patch5: fence-after-pacemaker-down.patch Patch6: support-drbd9-ra.patch +Patch7: fix-segfault-up-stacked-resource.patch Provides: drbd-bash-completion = %{version} Provides: drbd-pacemaker = %{version} @@ -80,6 +81,7 @@ raid 1. It is a building block for setting up clusters. %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %build ./autogen.sh diff --git a/fix-segfault-up-stacked-resource.patch b/fix-segfault-up-stacked-resource.patch new file mode 100644 index 0000000..5878c58 --- /dev/null +++ b/fix-segfault-up-stacked-resource.patch @@ -0,0 +1,49 @@ +diff -Naur drbd-utils-8.9.6.orig/user/v9/drbdadm.h drbd-utils-8.9.6/user/v9/drbdadm.h +--- drbd-utils-8.9.6.orig/user/v9/drbdadm.h 2016-06-23 18:20:40.608796513 +0800 ++++ drbd-utils-8.9.6/user/v9/drbdadm.h 2016-06-23 18:21:18.828684887 +0800 +@@ -388,6 +388,7 @@ + extern void global_validate_maybe_expand_die_if_invalid(int expand, enum pp_flags flags); + extern struct d_option *new_opt(char *name, char *value); + extern int hostname_in_list(const char *name, struct names *names); ++extern bool hostnames_equal(const char *a, const char *b); + extern char *_names_to_str(char* buffer, struct names *names); + extern char *_names_to_str_c(char* buffer, struct names *names, char c); + #define NAMES_STR_SIZE 255 +diff -Naur drbd-utils-8.9.6.orig/user/v9/drbdadm_postparse.c drbd-utils-8.9.6/user/v9/drbdadm_postparse.c +--- drbd-utils-8.9.6.orig/user/v9/drbdadm_postparse.c 2016-06-23 18:20:40.608796513 +0800 ++++ drbd-utils-8.9.6/user/v9/drbdadm_postparse.c 2016-06-23 18:21:13.644700061 +0800 +@@ -98,6 +98,21 @@ + } + } + ++struct d_host_info *find_host_info_by_fakename(struct d_resource* res, char *name) ++{ ++ struct d_host_info *host; ++ char *concat_name; ++ ++ for_each_host(host, &res->all_hosts) { ++ concat_name = strdup(names_to_str_c(&host->on_hosts, '_')); ++ if (hostnames_equal(name, concat_name)) ++ return host; ++ } ++ ++ return NULL; ++} ++ ++ + struct d_host_info *find_host_info_by_name(struct d_resource* res, char *name) + { + struct d_host_info *host; +@@ -403,7 +418,11 @@ + if (conn->peer) { + host_info = conn->peer; + } else { +- host_info = find_host_info_by_name(res, candidate->name); ++ if (candidate->faked_hostname) { ++ host_info = find_host_info_by_fakename(res, candidate->name); ++ } else { ++ host_info = find_host_info_by_name(res, candidate->name); ++ } + conn->peer = host_info; + } + path->peer_address = candidate->address.addr ? &candidate->address : &host_info->address;