[DRBD-cvs] svn commit by phil - r2604 - in trunk: . drbd - Made the
sub-second takeover code less verbose. (Untest
drbd-cvs at lists.linbit.com
drbd-cvs at lists.linbit.com
Tue Nov 21 18:29:50 CET 2006
Author: phil
Date: 2006-11-21 18:29:49 +0100 (Tue, 21 Nov 2006)
New Revision: 2604
Modified:
trunk/ROADMAP
trunk/drbd/drbd_nl.c
Log:
Made the sub-second takeover code less verbose.
(Untested, will test later.)
Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP 2006-11-20 21:16:22 UTC (rev 2603)
+++ trunk/ROADMAP 2006-11-21 17:29:49 UTC (rev 2604)
@@ -898,6 +898,8 @@
42 Forward port the abilitiy to resume the TL after IO was frozen,
in case the connection is reestablished again.
+43 Fix indexed meta-data.
+
Maybe:
* Switch to protocol C in case we are running without a local
Modified: trunk/drbd/drbd_nl.c
===================================================================
--- trunk/drbd/drbd_nl.c 2006-11-20 21:16:22 UTC (rev 2603)
+++ trunk/drbd/drbd_nl.c 2006-11-21 17:29:49 UTC (rev 2604)
@@ -243,7 +243,7 @@
mdev->this_bdev->bd_contains = mdev->this_bdev;
}
- if ( new_role & Secondary ) {
+ if ( new_role == Secondary ) {
/* If I got here, I am Primary. I claim me for myself. If that
* does not succeed, someone other has claimed me, so I cannot
* become Secondary. */
@@ -253,8 +253,12 @@
bd_release(mdev->this_bdev);
}
+ if ( new_role == Primary ) {
+ request_ping(mdev); // Detect a dead peer ASAP
+ }
+
mask.i = 0; mask.role = role_mask;
- val.i = 0; val.role = new_role & role_mask;
+ val.i = 0; val.role = new_role;
while (try++ < 3) {
r = _drbd_request_state(mdev,mask,val,0);
@@ -280,7 +284,13 @@
continue;
}
-
+ if( r == SS_TwoPrimaries ) {
+ // Maybe the peer is detected as dead very soon...
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout((mdev->net_conf->ping_timeo+1)*HZ/10);
+ if(try == 1) try++; // only a single retry in this case.
+ continue;
+ }
if ( r < SS_Success ) {
r = drbd_request_state(mdev,mask,val); // Be verbose.
if( r < SS_Success ) goto fail;
@@ -305,7 +315,7 @@
* but that means someone is misusing DRBD...
* */
- if (new_role & Secondary) {
+ if (new_role == Secondary) {
set_disk_ro(mdev->vdisk, TRUE );
} else {
if(inc_net(mdev)) {
@@ -324,7 +334,7 @@
}
}
- if((new_role & Secondary) && inc_local(mdev) ) {
+ if((new_role == Secondary) && inc_local(mdev) ) {
drbd_al_to_on_disk_bm(mdev);
dec_local(mdev);
}
@@ -340,7 +350,7 @@
return r;
fail:
- if ( new_role & Secondary ) {
+ if ( new_role == Secondary ) {
D_ASSERT(mdev->this_bdev->bd_holder == drbd_sec_holder);
bd_release(mdev->this_bdev);
}
@@ -353,7 +363,6 @@
struct drbd_nl_cfg_reply *reply)
{
struct primary primary_args;
- int rv;
memset(&primary_args, 0, sizeof(struct primary));
if(!primary_from_tags(mdev,nlp->tag_list,&primary_args)) {
@@ -361,15 +370,8 @@
return 0;
}
- request_ping(mdev); // Detect a dead peer ASAP
- rv = drbd_set_role(mdev, Primary, primary_args.overwrite_peer);
- if( rv == SS_TwoPrimaries ) {
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout((mdev->net_conf->ping_timeo+1)*HZ/10);
- rv = drbd_set_role(mdev, Primary, primary_args.overwrite_peer);
- }
-
- reply->ret_code = rv;
+ reply->ret_code = drbd_set_role(mdev, Primary, primary_args.overwrite_peer);
+
return 0;
}
More information about the drbd-cvs
mailing list