[DRBD-cvs] svn commit by lars - r1955 - in plus-branches/07-01-csums: . debian documentation drbd drbd/linux - svnp run. Investigated 1924 to 1954 r1937 by phil on 20

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Mon Sep 12 10:30:27 CEST 2005


Author: lars
Date: 2005-09-12 10:30:25 +0200 (Mon, 12 Sep 2005)
New Revision: 1955

Added:
   plus-branches/07-01-csums/documentation/drbddisk.sgml
Modified:
   plus-branches/07-01-csums/
   plus-branches/07-01-csums/ChangeLog
   plus-branches/07-01-csums/debian/changelog
   plus-branches/07-01-csums/documentation/Makefile
   plus-branches/07-01-csums/documentation/drbd.conf.sgml
   plus-branches/07-01-csums/documentation/drbd.sgml
   plus-branches/07-01-csums/documentation/drbdadm.sgml
   plus-branches/07-01-csums/documentation/drbdsetup.sgml
   plus-branches/07-01-csums/drbd.spec.in
   plus-branches/07-01-csums/drbd/Makefile
   plus-branches/07-01-csums/drbd/drbd_actlog.c
   plus-branches/07-01-csums/drbd/drbd_fs.c
   plus-branches/07-01-csums/drbd/drbd_proc.c
   plus-branches/07-01-csums/drbd/drbd_receiver.c
   plus-branches/07-01-csums/drbd/linux/drbd_config.h
Log:
svnp run. Investigated 1924 to 1954

r1937 by phil on 2005-08-31 19:04:25 +0200 (Wed, 31 Aug 2005) 
  Changed paths:
     M /branches/drbd-0.7/drbd/drbd_receiver.c
  
  This was really hard. 
  
  In the kernel's API there are two variants of all bitops. The atomic
  ones set_bit(), clear_bit(), test_bit() etc...  and the non atomic
  ones __set_bit(), __clear_bit() ...
  
  The race condition:
   CPU1 was in an IO completion handler and used the __set_bit(SYNC_STARTED,..)
   there. Non atomic means: First, it fetched the word from memory....
    ... CPU2 was exiting the _drbd_process_ee() function and did the clear bit 
   clear_bit(PROCESS_EE_RUNNING) atomic = fetch, modify and write...
    ... back on CPU1 we now do the modify and write...
    
  So CPU2 sets the PROCESS_EE_RUNNING bit again, because it fetched
  the word before CPU1 did it's atomic update.

r1938 by lars on 2005-08-31 20:07:05 +0200 (Wed, 31 Aug 2005) 
  Changed paths:
     M /branches/drbd-0.7/drbd/drbd_proc.c
  
  if syncer is stalled, show that in /proc/drbd
  
r1939 by phil on 2005-09-01 09:20:28 +0200 (Thu, 01 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/documentation/Makefile
     M /branches/drbd-0.7/documentation/drbd.conf.sgml
     M /branches/drbd-0.7/documentation/drbd.sgml
     M /branches/drbd-0.7/documentation/drbdadm.sgml
     M /branches/drbd-0.7/documentation/drbdsetup.sgml
  
  Doc updates by Helmut Wollmersdorfer

r1940 by phil on 2005-09-01 09:45:50 +0200 (Thu, 01 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/drbd/drbd_actlog.c
     M /branches/drbd-0.7/drbd/drbd_proc.c
  
  Argl! Lars, now you owe me a beer! 
     That change about displaying "stalled" when the syncer no 
     longer makes progess hat _two_ bugs!

r1941 by phil on 2005-09-01 10:01:07 +0200 (Thu, 01 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/ChangeLog
     M /branches/drbd-0.7/debian/changelog
     M /branches/drbd-0.7/drbd/linux/drbd_config.h
     M /branches/drbd-0.7/drbd.spec.in
  
  Preparing 0.7.13 release

r1942 by phil on 2005-09-01 10:33:38 +0200 (Thu, 01 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/documentation/Makefile
  
  drbddisk.sgml not there. Will arrive with next release probably.

r1944 by phil on 2005-09-01 11:36:33 +0200 (Thu, 01 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/documentation/Makefile
     A /branches/drbd-0.7/documentation/drbddisk.sgml
  
  A manpage for drbddisk! Thanks Helmut!

r1945 by lars on 2005-09-06 10:41:13 +0200 (Tue, 06 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/drbd/Makefile
  
  reduce side effects when installing into some $PREFIX (e.g. when building packages)

r1946 by lars on 2005-09-06 15:12:34 +0200 (Tue, 06 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/drbd/Makefile
  
  last Makefile change (test wether PREFIX is empty) effectively disabled depmod
  altogether, since we set the default of PREFIX to '/', which is obviously non-empty.
  fixed.

r1947 by lars on 2005-09-07 19:05:16 +0200 (Wed, 07 Sep 2005) 
  Changed paths:
     M /branches/drbd-0.7/drbd/drbd_fs.c
  
  only use "degraded wait for connection timeout" (degr-wfc-timeout) when
    * we are currently not primary
    * meta data flags indicate we have been primary before
      (so we know we are just recovering from a crash)
    * and meta data flags indicate we did not have a peer before the crash,
      so it is likely that we won't see it now, either.
  
  which translates to: only if we are recovering from a crash of an active
  degraded cluster, which was the original intention for this, anyways.




Property changes on: plus-branches/07-01-csums
___________________________________________________________________
Name: propagate:at:1
   - 1924
   + 1954

Modified: plus-branches/07-01-csums/ChangeLog
===================================================================
--- plus-branches/07-01-csums/ChangeLog	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/ChangeLog	2005-09-12 08:30:25 UTC (rev 1955)
@@ -4,6 +4,14 @@
  Cumulative changes since last tarball.
  For even more detail, use "svn log" and "svn diff".
 
+0.7.13 (api:77/proto:74)
+-----
+ * Fixed a SMP race condition that caused the resync process to stall
+   after a few seconds to minutes.
+ * The sync speed display is replaced by the word "stalled" in case the 
+   syncer makes no progress within 20 seconds.
+ * Some improvements to the documentation.
+
 0.7.12 (api:77/proto:74)
 -----
  * The /proc/drbd code used a fixed single page buffer. This breaks 

Modified: plus-branches/07-01-csums/debian/changelog
===================================================================
--- plus-branches/07-01-csums/debian/changelog	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/debian/changelog	2005-09-12 08:30:25 UTC (rev 1955)
@@ -1,3 +1,9 @@
+drbd (0.7.13-0) unstable; urgency=low
+
+  * New upstream release
+
+ -- Philipp Reisner <phil at linbit.com>  Thu, 1 Sep 2005 10:00:00 +0200
+
 drbd (0.7.12-0) unstable; urgency=low
 
   * New upstream release

Modified: plus-branches/07-01-csums/documentation/Makefile
===================================================================
--- plus-branches/07-01-csums/documentation/Makefile	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/documentation/Makefile	2005-09-12 08:30:25 UTC (rev 1955)
@@ -28,7 +28,7 @@
 
 MAKEFILES_LANG := $(foreach dir,$(LANGS),$(dir)/Makefile)
 
-MANPAGES       := drbdsetup.8 drbd.conf.5 drbd.8 drbdadm.8
+MANPAGES       := drbdsetup.8 drbd.conf.5 drbd.8 drbdadm.8 drbddisk.8
 
 #
 # Docbook Magic for SuSE, Worksforme...

Modified: plus-branches/07-01-csums/documentation/drbd.conf.sgml
===================================================================
--- plus-branches/07-01-csums/documentation/drbd.conf.sgml	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/documentation/drbd.conf.sgml	2005-09-12 08:30:25 UTC (rev 1955)
@@ -79,7 +79,7 @@
   is considered
   as part of the parameters value. A special case are Boolean
   parameters which only consist of the identifier.
-  Parameters are terminated by a semikolon (<quote>;</quote>).
+  Parameters are terminated by a semicolon (<quote>;</quote>).
   </para>
   <para>Some parameter values have default units which might be overruled
   by K, M or G. These units are defined in the usual way (K = 2^10 = 1024,
@@ -219,7 +219,7 @@
   <para>Use <replaceable>minor-count</replaceable>
    if you want to define more resources later without reloading the DRBD kernel
    module. Per default the module loads with exactly as many devices as
-   configured in this file. Builtin default for module is 2, and 8 for
+   configured in this file. Built-in default for module is 2, and 8 for
    monolithic kernel. For monolithic kernel
    <replaceable>minor-count</replaceable> is ignored, and you have to pass a
    kernel boot parameter <replaceable>drbd.minor_count=count</replaceable> to
@@ -243,7 +243,7 @@
   <listitem>
   <para>Use <replaceable>disable-ip-verification</replaceable>
    if, for some obscure reasons, drbdadm can/might not use ip or ifconfig
-   to do a santiy check for the IP address, you can disable it with this
+   to do a sanity check for the IP address, you can disable it with this
    this option.
    </para>
    </listitem>
@@ -255,7 +255,7 @@
   <para>On the TCP/IP link the specified <replaceable>protocol</replaceable>
   is used. Valid protocol specifiers are A, B, and C.</para>
   <para>Protocol A: write IO is reported as completed, if it has
-  reached local disk and local tcp send buffer.</para>
+  reached local disk and local TCP send buffer.</para>
   <para>Protocol B: write IO is reported as completed, if it has reached
   local disk and remote buffer cache.</para>
   <para>Protocol C: write IO is reported as completed, if it has
@@ -266,7 +266,7 @@
 <varlistentry>
   <term><option>incon-degr-cmd <replaceable>command</replaceable></option></term>
   <listitem><para>
-    In case a node starts up in degraded mode (inittimeout is set) and
+    In case a node starts up in degraded mode (degr-wfc-timeout is set) and
     its local replica of the data is inconsistent it executes the
     <replaceable>command</replaceable>. If the command exits without
     error, drbddisk expects the DRBD device to be in primary state.
@@ -409,7 +409,7 @@
   Maximal number of requests to be allocated by DRBD. Unit is PAGE_SIZE,
   which is 4 KB on most systems.
   The minimum is hardcoded to 32 (=128 KB).
-  For hight performance installations it might help, if you
+  For high performance installations it might help, if you
   increase that number. These buffers are used to hold
   datablocks while they are written to disk.
   </para></listitem>
@@ -527,7 +527,7 @@
 </refsect1>
 <refsect1>
 <title>Version</title>
-<simpara>This document is correct for version 0.7.5 of the DRBD distribution.
+<simpara>This document is correct for version 0.7.13 of the DRBD distribution.
 </simpara>
 </refsect1>
 <refsect1>
@@ -544,7 +544,7 @@
 <refsect1>
 <title>Copyright</title>
 <simpara>
-Copyright (c) 2001 Philipp Reisner. This  is  free software; 
+Copyright (c) 2001-2005 Philipp Reisner. This  is  free software; 
 see the source for copying conditions.  There is NO warranty; 
 not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 </simpara>

Modified: plus-branches/07-01-csums/documentation/drbd.sgml
===================================================================
--- plus-branches/07-01-csums/documentation/drbd.sgml	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/documentation/drbd.sgml	2005-09-12 08:30:25 UTC (rev 1955)
@@ -20,6 +20,9 @@
       <arg choice=req>start</arg>
       <arg choice=req>stop</arg>
       <arg choice=req>status</arg>
+      <arg choice=req>reload</arg>
+      <arg choice=req>restart</arg>
+      <arg choice=req>force-reload</arg>
     </group>
     </arg>
  </cmdsynopsis>
@@ -49,6 +52,12 @@
 </refsect1>
 
 <refsect1>
+  <title>Version</title>
+  <simpara>This document is correct for version 0.7.13 of the DRBD distribution.
+  </simpara>
+</refsect1>
+
+<refsect1>
   <title>Author</title>
   <simpara>
     Written by Philipp Reisner <email>philipp.reisner at linbit.com</email>.
@@ -65,9 +74,9 @@
 <refsect1>
   <title>Copyright</title>
   <simpara>
-    Copyright (c) 2001 Philipp Reisner. This  is  free software; 
+    Copyright (c) 2001-2005 Philipp Reisner. This  is  free software; 
     see the source for copying conditions.  There is NO warranty; 
-    not even for MERCHANTABILIT  or FITNESS FOR A PARTICULAR PURPOSE.
+    not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
   </simpara>
 </refsect1>
 
@@ -76,10 +85,12 @@
   <para>
     <citerefentry><refentrytitle>drbd.conf</refentrytitle>
     <manvolnum>5</manvolnum></citerefentry>,
-    <citerefentry><refentrytitle>datadisk</refentrytitle>
+    <citerefentry><refentrytitle>drbddisk</refentrytitle>
     <manvolnum>8</manvolnum></citerefentry>,
     <citerefentry><refentrytitle>drbdsetup</refentrytitle>
     <manvolnum>8</manvolnum></citerefentry>
+    <citerefentry><refentrytitle>drbdadm</refentrytitle>
+    <manvolnum>8</manvolnum></citerefentry>
   </para>
 </refsect1>
 

Modified: plus-branches/07-01-csums/documentation/drbdadm.sgml
===================================================================
--- plus-branches/07-01-csums/documentation/drbdadm.sgml	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/documentation/drbdadm.sgml	2005-09-12 08:30:25 UTC (rev 1955)
@@ -49,8 +49,8 @@
           <replaceable>file</replaceable></term>
         <listitem><para>
           Specifies the configuration file drbdadm will use. If this parameter
-	  is not specified, drbdadm will look for /etc/drbd-07.conf and
-          /etc/drbd.conf.
+	  is not specified, drbdadm will look for <option>/etc/drbd-07.conf</option> and
+          <option>/etc/drbd.conf</option>.
 	</para></listitem>
       </varlistentry>
       <varlistentry>
@@ -58,7 +58,7 @@
           <replaceable>file</replaceable></term>
         <listitem><para>
           Specifies the full path to the drbdsetup program. If this option is
-	  omitted, drbdadm will look for /sbin/drbdsetup and ./drbdsetup.
+	  omitted, drbdadm will look for <option>/sbin/drbdsetup</option> and <option>./drbdsetup</option>.
 	</para></listitem>
       </varlistentry>
     </variablelist>
@@ -96,7 +96,7 @@
       <varlistentry>
         <term>syncer</term>
         <listitem><para>
-          Loads the resynchronisation parameters into the device.
+          Loads the resynchronization parameters into the device.
         </para></listitem>
       </varlistentry>
       <varlistentry>
@@ -138,7 +138,7 @@
       <varlistentry>
         <term>invalidate_remote</term>
         <listitem><para>
-          This command is simmilar to the invalidate command, but the
+          This command is similar to the invalidate command, but the
 	  backing storage of the peer is invalidated and hence rewritten
 	  with the data of the local node.
         </para></listitem>
@@ -146,7 +146,7 @@
       <varlistentry>
         <term>resize</term>
         <listitem><para>
-          DRBD will reexamine all sizing constraints, and resize the
+          DRBD will reexamine all sizing constraints, and re-size the
 	  resource's device accordingly. E.g. in case you increased the
 	  size of your backing storage devices (on both nodes of course),
 	  then DRBD will adopt to the new size after you called 
@@ -192,7 +192,7 @@
   <refsect1>
     <title>Version</title>
     <simpara>
-      This document is correct for version 0.7 of the DRBD distribution.
+      This document is correct for version 0.7.13 of the DRBD distribution.
     </simpara>
   </refsect1>
 
@@ -209,7 +209,7 @@
   <refsect1>
     <title>Copyright</title>
     <simpara>
-      Copyright (c) 2004 Philipp Reisner. This  is  free software; 
+      Copyright (c) 2004-2005 Philipp Reisner. This  is  free software; 
       see the source for copying conditions.  There is NO warranty; 
       not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     </simpara>
@@ -223,6 +223,8 @@
       <manvolnum>8</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>drbddisk</refentrytitle>
       <manvolnum>8</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>drbdsetup</refentrytitle>
+      <manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 </refentry>

Copied: plus-branches/07-01-csums/documentation/drbddisk.sgml (from rev 1944, branches/drbd-0.7/documentation/drbddisk.sgml)

Modified: plus-branches/07-01-csums/documentation/drbdsetup.sgml
===================================================================
--- plus-branches/07-01-csums/documentation/drbdsetup.sgml	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/documentation/drbdsetup.sgml	2005-09-12 08:30:25 UTC (rev 1955)
@@ -659,7 +659,7 @@
 
   <refsect1>
     <title>Version</title>
-    <simpara>This document is intended to be correct for version 0.7.x of the DRBD distribution.
+    <simpara>This document is correct for version 0.7.13 of the DRBD distribution.
     </simpara>
   </refsect1>
 
@@ -676,7 +676,7 @@
   <refsect1>
     <title>Copyright</title>
     <simpara>
-      Copyright (c) 2001 Philipp Reisner. This  is  free software; 
+      Copyright (c) 2001-2005 Philipp Reisner. This  is  free software; 
       see the source for copying conditions.  There is NO warranty; 
       not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     </simpara>
@@ -688,8 +688,10 @@
       <manvolnum>5</manvolnum></citerefentry>,
       <citerefentry><refentrytitle>drbd</refentrytitle>
       <manvolnum>8</manvolnum></citerefentry>,
-      <citerefentry><refentrytitle>datadisk</refentrytitle>
+      <citerefentry><refentrytitle>drbddisk</refentrytitle>
       <manvolnum>8</manvolnum></citerefentry>
+      <citerefentry><refentrytitle>drbdadm</refentrytitle>
+      <manvolnum>8</manvolnum></citerefentry>
     </para>
   </refsect1>
 </refentry>

Modified: plus-branches/07-01-csums/drbd/Makefile
===================================================================
--- plus-branches/07-01-csums/drbd/Makefile	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd/Makefile	2005-09-12 08:30:25 UTC (rev 1955)
@@ -162,11 +162,13 @@
 # install -d $(PREFIX)/var/lib/drbd
 	install -d $(PREFIX)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
 	install -m 644 $(MODOBJ) $(PREFIX)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
-    ifeq ($(shell uname -r),$(KERNELRELEASE))
+    ifeq ($(PREFIX),/)
+      ifeq ($(shell uname -r),$(KERNELRELEASE))
 	/sbin/depmod -a || /sbin/depmod -e $(MODOBJ) 2>&1 >/dev/null || true
-    else
+      else
 	[ -e $(LINUX)/System.map ] && \
 	   /sbin/depmod -F $(LINUX)/System.map -e ./$(MODOBJ) 2>&1 >/dev/null || true
+      endif
     endif
   else
     install:

Modified: plus-branches/07-01-csums/drbd/drbd_actlog.c
===================================================================
--- plus-branches/07-01-csums/drbd/drbd_actlog.c	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd/drbd_actlog.c	2005-09-12 08:30:25 UTC (rev 1955)
@@ -726,8 +726,10 @@
 		// we need the lock for drbd_try_clear_on_disk_bm
 		if(jiffies - mdev->rs_mark_time > HZ*10) {
 			/* should be roling marks, but we estimate only anyways. */
-			mdev->rs_mark_time = jiffies;
-			mdev->rs_mark_left = drbd_bm_total_weight(mdev);
+			if( mdev->rs_mark_left != drbd_bm_total_weight(mdev)) {
+				mdev->rs_mark_time =jiffies;
+				mdev->rs_mark_left =drbd_bm_total_weight(mdev);
+			}
 		}
 		drbd_try_clear_on_disk_bm(mdev,sector,count);
 		/* just wake_up unconditional now,

Modified: plus-branches/07-01-csums/drbd/drbd_fs.c
===================================================================
--- plus-branches/07-01-csums/drbd/drbd_fs.c	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd/drbd_fs.c	2005-09-12 08:30:25 UTC (rev 1955)
@@ -893,13 +893,27 @@
 	if(copy_from_user(&p,arg,sizeof(p))) {
 		return -EFAULT;
 	}
-
-	if( drbd_md_test_flag(mdev,MDF_ConnectedInd) ) {
+	/* If I am currently not Primary,
+	 * but meta data primary indicator is set,
+	 * I just now recover from a hard crash,
+	 * and have been Primary before that crash.
+	 *
+	 * Now, if I had no connection before that crash
+	 * (have been degraded Primary), chances are that
+	 * I won't find my peer now either.
+	 *
+	 * In that case, and _only_ in that case,
+	 * we use the degr-wfc-timeout instead of the default,
+	 * so we can automatically recover from a crash of a
+	 * degraded but active "cluster" after a certain timeout.
+	 */
+	if ( mdev->state != Primary &&
+	     drbd_md_test_flag(mdev,MDF_PrimaryInd) &&
+	    !drbd_md_test_flag(mdev,MDF_ConnectedInd) ) {
+		time=p.degr_wfc_timeout;
+		if (time) WARN("using degr_wfc_timeout=%ld seconds\n", time);
+	} else {
 		time=p.wfc_timeout;
-		//ERR("using wfc_timeout.\n");
-	} else {
-		time=p.degr_wfc_timeout;
-		//ERR("using degr_wfc_timeout.\n");
 	}
 
 	time=time*HZ;
@@ -1146,10 +1160,26 @@
 		} else {
 			clear_bit(ON_PRI_INC_HUMAN,&mdev->flags);
 			clear_bit(ON_PRI_INC_TIMEOUTEX,&mdev->flags);
+			if (arg == 0) break;
 
-			if (arg & Human ) 
+			// XXX reduce race: don't set it,
+			// if we have a connection.
+			// this does not avoid the race completely, though.
+			if (mdev->cstate > WFConnection) {
+				WARN("race avoidance: did not set "
+				     "the state flags (%s), cstate=%s\n",
+				        arg == (Human|TimeoutExpired)
+				     ?  "Human|TimeoutExpired"
+				     : arg == Human
+				     ? "Human"
+				     : "TimeoutExpired",
+				     cstate_to_name(mdev->cstate));
+				break;
+			}
+
+			if (arg & Human)
 				set_bit(ON_PRI_INC_HUMAN,&mdev->flags);
-			if (arg & TimeoutExpired )
+			if (arg & TimeoutExpired)
 				set_bit(ON_PRI_INC_TIMEOUTEX,&mdev->flags);
 		}
 		break;

Modified: plus-branches/07-01-csums/drbd/drbd_proc.c
===================================================================
--- plus-branches/07-01-csums/drbd/drbd_proc.c	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd/drbd_proc.c	2005-09-12 08:30:25 UTC (rev 1955)
@@ -146,6 +146,14 @@
 	 * rt: remaining time
 	 */
 	dt = (jiffies - mdev->rs_mark_time) / HZ;
+
+	if (dt > 20) {
+		/* if we made no update to rs_mark_time for too long,
+		 * we are stalled. show that. */
+		seq_printf(seq, "stalled\n");
+		return;
+	}
+
 	if (!dt) dt++;
 	db = mdev->rs_mark_left - rs_left;
 	rt = (dt * (rs_left / (db/100+1)))/100; /* seconds */

Modified: plus-branches/07-01-csums/drbd/drbd_receiver.c
===================================================================
--- plus-branches/07-01-csums/drbd/drbd_receiver.c	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd/drbd_receiver.c	2005-09-12 08:30:25 UTC (rev 1955)
@@ -977,7 +977,7 @@
 			 */
 		}
 		ok = drbd_send_ack(mdev,WriteAck,e);
-		__set_bit(SYNC_STARTED,&mdev->flags);
+		set_bit(SYNC_STARTED,&mdev->flags);
 	} else {
 		ok = drbd_send_ack(mdev,NegAck,e);
 		ok&= drbd_io_error(mdev);
@@ -2186,7 +2186,7 @@
 
 		if( is_syncer_blk(mdev,p->block_id)) {
 			drbd_set_in_sync(mdev,sector,blksize);
-			__set_bit(SYNC_STARTED,&mdev->flags);
+			set_bit(SYNC_STARTED,&mdev->flags);
 		} else {
 			req=(drbd_request_t*)(long)p->block_id;
 

Modified: plus-branches/07-01-csums/drbd/linux/drbd_config.h
===================================================================
--- plus-branches/07-01-csums/drbd/linux/drbd_config.h	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd/linux/drbd_config.h	2005-09-12 08:30:25 UTC (rev 1955)
@@ -22,7 +22,7 @@
 
 extern const char * drbd_buildtag(void);
 
-#define REL_VERSION "0.7.12"
+#define REL_VERSION "0.7.13"
 #define API_VERSION 77
 #define PRO_VERSION 74
 

Modified: plus-branches/07-01-csums/drbd.spec.in
===================================================================
--- plus-branches/07-01-csums/drbd.spec.in	2005-09-07 18:39:12 UTC (rev 1954)
+++ plus-branches/07-01-csums/drbd.spec.in	2005-09-12 08:30:25 UTC (rev 1955)
@@ -190,6 +190,14 @@
 /sbin/depmod -a -F /boot/System.map-%{kernelversion} %{kernelversion} >/dev/null 2>&1 || true
 
 %changelog
+* Thu Sep  1 2005 10:00:00 +0200 Philipp Reisner <phil at linbit.com>
+- drbd (0.7.13-1)
+ * Fixed a SMP race condition that caused the resync process to stall
+   after a few seconds to minutes.
+ * The sync speed display is replaced by the word "stalled" in case the 
+   syncer makes no progress within 20 seconds.
+ * Some improvements to the documentation.
+
 * Wed Aug 24 2005 15:01:10 +0200 Philipp Reisner <phil at linbit.com>
 - drbd (0.7.12-1)
  * The /proc/drbd code used a fixed single page buffer. This breaks 



More information about the drbd-cvs mailing list