94234e2412
bsc#1151579, fix coccinelle default path and obs service issue. OBS-URL: https://build.opensuse.org/request/show/732557 OBS-URL: https://build.opensuse.org/package/show/network:ha-clustering:Factory/drbd?expand=0&rev=94
46 lines
1.9 KiB
Diff
46 lines
1.9 KiB
Diff
diff -Naur drbd-9.0.11+git.1e2bccdc.orig/drbd/drbd_state.c drbd-9.0.11+git.1e2bccdc/drbd/drbd_state.c
|
|
--- drbd-9.0.11+git.1e2bccdc.orig/drbd/drbd_state.c 2019-08-27 13:34:08.462567903 +0800
|
|
+++ drbd-9.0.11+git.1e2bccdc/drbd/drbd_state.c 2019-08-30 12:56:37.664186710 +0800
|
|
@@ -1398,8 +1398,13 @@
|
|
nc = rcu_dereference(connection->transport.net_conf);
|
|
two_primaries = nc ? nc->two_primaries : false;
|
|
if (peer_role[NEW] == R_PRIMARY && peer_role[OLD] != R_PRIMARY && !two_primaries) {
|
|
- if (role[NOW] == R_PRIMARY)
|
|
- return SS_TWO_PRIMARIES;
|
|
+ if (role[NOW] == R_PRIMARY) {
|
|
+ if (role[OLD] == R_PRIMARY && connection->cstate[OLD] < C_CONNECTED) {
|
|
+ drbd_info(connection, "Two primaries but not allowed. Rely on split brain handler or to disconnect.\n");
|
|
+ } else {
|
|
+ return SS_TWO_PRIMARIES;
|
|
+ }
|
|
+ }
|
|
idr_for_each_entry(&resource->devices, device, vnr) {
|
|
if (device->open_ro_cnt)
|
|
return SS_PRIMARY_READER;
|
|
@@ -3665,7 +3670,11 @@
|
|
mask = NODE_MASK(connection->peer_node_id);
|
|
if ((resource->twopc_reply.primary_nodes & mask) &&
|
|
!(connection->transport.net_conf->two_primaries)) {
|
|
- rv = SS_TWO_PRIMARIES;
|
|
+ if (connection->cstate[OLD] < C_CONNECTED && connection->cstate[NEW] == C_CONNECTED) {
|
|
+ drbd_info(connection, "Two primaries but not allowed after reconnected. Rely on split brain handler or to disconnect.\n");
|
|
+ } else {
|
|
+ rv = SS_TWO_PRIMARIES;
|
|
+ }
|
|
break;
|
|
}
|
|
}
|
|
@@ -3739,7 +3748,11 @@
|
|
nc = rcu_dereference(connection->transport.net_conf);
|
|
if (!nc->two_primaries &&
|
|
NODE_MASK(connection->peer_node_id) & reply->primary_nodes) {
|
|
- rv = SS_PRIMARY_READER;
|
|
+ if (connection->cstate[OLD] < C_CONNECTED && connection->cstate[NEW] == C_CONNECTED) {
|
|
+ drbd_info(connection, "Two primaries and device is opened as read only. Rely on split brain handler or to disconnect.\n");
|
|
+ } else {
|
|
+ rv = SS_PRIMARY_READER;
|
|
+ }
|
|
break;
|
|
}
|
|
}
|