Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.4:Update
drbd.19050
disconnect-invalid-two-primaries.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File disconnect-invalid-two-primaries.patch of Package drbd.19050
diff -Naur drbd-9.0.22~1+git.fe2b5983.orig/drbd/drbd_receiver.c drbd-9.0.22~1+git.fe2b5983/drbd/drbd_receiver.c --- drbd-9.0.22~1+git.fe2b5983.orig/drbd/drbd_receiver.c 2021-04-07 11:02:28.654652864 +0800 +++ drbd-9.0.22~1+git.fe2b5983/drbd/drbd_receiver.c 2021-04-07 11:05:17.984003440 +0800 @@ -4202,10 +4202,11 @@ enum drbd_disk_state disk_state; struct net_conf *nc; enum sync_strategy strategy; - int rule_nr, rr_conflict, always_asbp, peer_node_id = 0, r; + int rule_nr, rr_conflict, always_asbp, peer_node_id = 0, r, pcount; enum drbd_role peer_role = peer_state.role; enum drbd_disk_state peer_disk_state = peer_state.disk; int required_protocol; + bool two_primaries; strategy = drbd_handshake(peer_device, &rule_nr, &peer_node_id, true); @@ -4240,11 +4241,18 @@ nc = rcu_dereference(connection->transport.net_conf); always_asbp = nc->always_asbp; rr_conflict = nc->rr_conflict; + two_primaries = nc ? nc->two_primaries : false; rcu_read_unlock(); + pcount = (device->resource->role[NOW] == R_PRIMARY) + + (peer_role == R_PRIMARY); + + if (strategy == NO_SYNC && pcount == 2 && !two_primaries) { + drbd_alert(device, "Dual primaries detected with unified UUID but not allowed, drop connection!\n"); + return -1; + } + if (strategy == SPLIT_BRAIN_AUTO_RECOVER || (strategy == SPLIT_BRAIN_DISCONNECT && always_asbp)) { - int pcount = (device->resource->role[NOW] == R_PRIMARY) - + (peer_role == R_PRIMARY); int forced = (strategy == SPLIT_BRAIN_DISCONNECT); if (device->resource->res_opts.quorum != QOU_OFF &&
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor