[DRBD-cvs] drbd by lars; fixed: cannot tell a T from an S :-/ ver...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Tue, 18 May 2004 11:00:25 +0200 (CEST)


DRBD CVS committal

Author  : lars
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_dsender.c drbd_main.c drbd_proc.c 


Log Message:
fixed:
cannot tell a T from an S :-/
very unlikely race with _drbd_rs_pause
make _set_cstate noisy at compile time upon request

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.108
retrieving revision 1.1.2.109
diff -u -3 -r1.1.2.108 -r1.1.2.109
--- drbd_dsender.c	17 May 2004 12:55:32 -0000	1.1.2.108
+++ drbd_dsender.c	18 May 2004 09:00:20 -0000	1.1.2.109
@@ -831,10 +831,17 @@
 	drbd_md_write(mdev);
 
 	drbd_global_lock();
-	_drbd_pause_higher_sg(mdev);
-	if(_drbd_lower_sg_running(mdev)) {
-		_drbd_rs_pause(mdev);
-	}
+	if (mdev->cstate == SyncTarget || mdev->cstate == SyncSource) {
+		_drbd_pause_higher_sg(mdev);
+		if(_drbd_lower_sg_running(mdev)) {
+			_drbd_rs_pause(mdev);
+		}
+	} /* else:
+	   * thread of other mdev already paused us,
+	   * or something very strange happend to our cstate!
+	   * I really hate it that we can't have a consistent view of cstate.
+	   * maybe we even need yet an other smp_mb() ?
+	   */
 	drbd_global_unlock();
 }
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.174
retrieving revision 1.73.2.175
diff -u -3 -r1.73.2.174 -r1.73.2.175
--- drbd_main.c	17 May 2004 12:55:32 -0000	1.73.2.174
+++ drbd_main.c	18 May 2004 09:00:20 -0000	1.73.2.175
@@ -413,8 +413,10 @@
 
 	os = mdev->cstate;
 
-	/* INFO("%s [%d]: cstate %s --> %s\n", current->comm, current->pid,
-	   cstate_to_name(os), cstate_to_name(ns) );*/
+#if DUMP_MD > 1
+	INFO("%s [%d]: cstate %s(%d) --> %s(%d)\n", current->comm, current->pid,
+	   cstate_to_name(os),os, cstate_to_name(ns),ns );
+#endif
 
 	mdev->cstate = ns;
 	smp_mb();
@@ -2229,7 +2231,7 @@
 	return 0;
 }
 
-#ifdef DUMP_MD
+#if DUMP_MD
 #define MeGC(x) mdev->gen_cnt[x]
 #define PeGC(x) be32_to_cpu(peer->gen_cnt[x])
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_proc.c,v
retrieving revision 1.8.2.24
retrieving revision 1.8.2.25
diff -u -3 -r1.8.2.24 -r1.8.2.25
--- drbd_proc.c	5 May 2004 17:07:02 -0000	1.8.2.24
+++ drbd_proc.c	18 May 2004 09:00:20 -0000	1.8.2.25
@@ -146,7 +146,7 @@
 	};
 
 	return s < Unconfigured ? "TO_SMALL" :
-	       s > PausedSyncS  ? "TO_LARGE"
+	       s > PausedSyncT  ? "TO_LARGE"
 		                : cstate_names[s];
 }