Hello community, here is the log from the commit of package drbd-utils for openSUSE:Factory checked in at 2016-07-01 09:59:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/drbd-utils (Old) and /work/SRC/openSUSE:Factory/.drbd-utils.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "drbd-utils" Changes: -------- --- /work/SRC/openSUSE:Factory/drbd-utils/drbd-utils.changes 2016-04-12 19:36:22.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.drbd-utils.new/drbd-utils.changes 2016-07-01 10:00:01.000000000 +0200 @@ -1,0 +2,11 @@ +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. + +------------------------------------------------------------------- New: ---- fix-segfault-up-stacked-resource.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ drbd-utils.spec ++++++ --- /var/tmp/diff_new_pack.pJ2Gum/_old 2016-07-01 10:00:02.000000000 +0200 +++ /var/tmp/diff_new_pack.pJ2Gum/_new 2016-07-01 10:00:02.000000000 +0200 @@ -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 @@ 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 @@ %patch4 -p1 %patch5 -p1 %patch6 -p1 +%patch7 -p1 %build ./autogen.sh ++++++ fix-segfault-up-stacked-resource.patch ++++++ 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;