[DRBD-cvs] svn commit by phil - r2304 - trunk/drbd - Fixed some bugs, related to "drbdad down [res]"

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Fri Jul 28 09:38:45 CEST 2006


Author: phil
Date: 2006-07-28 09:38:43 +0200 (Fri, 28 Jul 2006)
New Revision: 2304

Modified:
   trunk/drbd/drbd_fs.c
   trunk/drbd/drbd_main.c
Log:
Fixed some bugs, related to "drbdad down [res]"


Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c	2006-07-27 14:06:49 UTC (rev 2303)
+++ trunk/drbd/drbd_fs.c	2006-07-28 07:38:43 UTC (rev 2304)
@@ -1157,6 +1157,8 @@
 		mdev->cram_hmac_tfm = NULL;
 	}
 
+	drbd_md_sync(mdev);
+
 	return 0;
 }
 

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2006-07-27 14:06:49 UTC (rev 2303)
+++ trunk/drbd/drbd_main.c	2006-07-28 07:38:43 UTC (rev 2304)
@@ -550,7 +550,7 @@
 	rv = _drbd_set_state(mdev, ns, f);
 	ns = mdev->state;
 	spin_unlock_irqrestore(&mdev->req_lock,flags);
-	if (rv == SS_Success) after_state_ch(mdev,os,ns,f);
+	if (rv==SS_Success && !(f&ScheduleAfter)) after_state_ch(mdev,os,ns,f);
 
 	return rv;
 }
@@ -639,7 +639,7 @@
 	ns = mdev->state;
 	spin_unlock_irqrestore(&mdev->req_lock,flags);
 
-	if (rv == SS_Success) after_state_ch(mdev,os,ns,f);
+	if (rv==SS_Success && !(f&ScheduleAfter)) after_state_ch(mdev,os,ns,f);
 
 	return rv;
 }
@@ -750,6 +750,12 @@
 		ns.pdsk = os.pdsk;
 	}
 
+	/* Dissalow Network errors to configure a device's network part */
+	if( (ns.conn >= BrokenPipe && ns.conn <= NetworkFailure ) && 
+	    os.conn == StandAlone ) {
+		ns.conn = os.conn;
+	}
+
 	if( ns.i == os.i ) return SS_NothingToDo;
 
 	fp = DontCare;
@@ -1077,6 +1083,10 @@
 		lc_free(mdev->act_log); mdev->act_log = NULL;
 	}
 
+	if ( os.conn != StandAlone && ns.conn == StandAlone ) {
+		drbd_thread_stop(&mdev->receiver);
+	}
+
 	if ( os.conn != Unconnected && ns.conn == Unconnected ) {
 		drbd_thread_stop(&mdev->receiver);
 		drbd_thread_start(&mdev->receiver);
@@ -2606,12 +2616,13 @@
 
 	if (!test_and_clear_bit(MD_DIRTY,&mdev->flags)) return;
 	del_timer(&mdev->md_sync_timer);
-	INFO("Writing meta data super block now.\n");
 
 	// We use here Failed and not Attaching because we try to write
 	// metadata even if we detach due to a disk failure!
-	ERR_IF(!inc_md_only(mdev,Failed)) return;
+	if(!inc_md_only(mdev,Failed)) return;
 
+	INFO("Writing meta data super block now.\n");
+
 	down(&mdev->md_io_mutex);
 	buffer = (struct meta_data_on_disk *)page_address(mdev->md_io_page);
 	memset(buffer,0,512);



More information about the drbd-cvs mailing list