[DRBD-cvs] svn commit by phil - r2046 - trunk/drbd - Worked on the
following scenario: Secondary / Secondary
drbd-cvs at lists.linbit.com
drbd-cvs at lists.linbit.com
Mon Jan 9 23:06:31 CET 2006
Author: phil
Date: 2006-01-09 23:06:29 +0100 (Mon, 09 Jan 2006)
New Revision: 2046
Modified:
trunk/drbd/drbd_fs.c
trunk/drbd/drbd_main.c
trunk/drbd/drbd_receiver.c
Log:
Worked on the following scenario:
Secondary / Secondary
1 The disk of the right node gets removed by 'drbdadm detach'
2 The left node gets promoted to primary and devoted to secondary again.
(=new UUID)
3 The right node gets it disk again with 'drbdadm attach'
Now, this causes a resync, just as expected.
Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c 2006-01-09 20:29:28 UTC (rev 2045)
+++ trunk/drbd/drbd_fs.c 2006-01-09 22:06:29 UTC (rev 2046)
@@ -880,8 +880,9 @@
bd_release(mdev->this_bdev);
mdev->this_bdev->bd_disk = mdev->vdisk;
- if ( (mdev->state.conn < WFReportParams &&
- mdev->bc->md.uuid[Bitmap] == 0) || forced ) {
+ if ( ( ( mdev->state.conn < Connected ||
+ mdev->state.pdsk <= Attaching ) &&
+ mdev->bc->md.uuid[Bitmap] == 0) || forced ) {
drbd_uuid_new_current(mdev);
}
}
Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c 2006-01-09 20:29:28 UTC (rev 2045)
+++ trunk/drbd/drbd_main.c 2006-01-09 22:06:29 UTC (rev 2046)
@@ -764,10 +764,13 @@
}
/* Lost contact to peer's copy of the data */
- if (ns.role == Primary &&
- os.pdsk > DUnknown && ns.pdsk <= DUnknown ) {
- /* Only do it if we have not yet done it... */
- if ( mdev->bc->md.uuid[Bitmap] == 0 ) {
+ if ( os.pdsk > DUnknown && ns.pdsk <= DUnknown ) {
+ if ( mdev->p_uuid ) {
+ kfree(mdev->p_uuid);
+ mdev->p_uuid = NULL;
+ }
+ if (ns.role == Primary && mdev->bc->md.uuid[Bitmap] == 0 ) {
+ /* Only do it if we have not yet done it... */
INFO("Creating new current UUID\n");
drbd_uuid_new_current(mdev);
}
Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c 2006-01-09 20:29:28 UTC (rev 2045)
+++ trunk/drbd/drbd_receiver.c 2006-01-09 22:06:29 UTC (rev 2046)
@@ -1870,8 +1870,9 @@
drbd_determin_dev_size(mdev);
drbd_bm_unlock(mdev); // }
- if (mdev->p_uuid && mdev->state.conn <= Connected ) {
+ if (mdev->p_uuid && mdev->state.conn <= Connected && inc_local(mdev)) {
nconn=drbd_sync_handshake(mdev,mdev->state.peer);
+ dec_local(mdev);
if(nconn == conn_mask) return FALSE;
@@ -1940,8 +1941,10 @@
peer_state.i = be32_to_cpu(p->state);
- if (mdev->p_uuid && mdev->state.conn <= Connected ) {
+ if (mdev->p_uuid && mdev->state.conn <= Connected &&
+ inc_md_only(mdev,Attaching) ) {
nconn=drbd_sync_handshake(mdev,peer_state.role);
+ dec_local(mdev);
if(nconn == conn_mask) return FALSE;
}
@@ -1954,7 +1957,7 @@
}
}
- if ( peer_state.disk == Attaching ) {
+ if ( peer_state.disk == Attaching && nconn == Connected ) {
// Peer should promote from Attaching to UpToDate.
drbd_send_state(mdev);
peer_state.disk = UpToDate;
More information about the drbd-cvs
mailing list