[DRBD-cvs] svn commit by phil - r2295 - in trunk: . drbd - Work of today afternoon...

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Tue Jul 25 15:55:02 CEST 2006


Author: phil
Date: 2006-07-25 15:55:01 +0200 (Tue, 25 Jul 2006)
New Revision: 2295

Modified:
   trunk/ROADMAP
   trunk/drbd/drbd_actlog.c
   trunk/drbd/drbd_req.c
Log:
Work of today afternoon...


Modified: trunk/ROADMAP
===================================================================
--- trunk/ROADMAP	2006-07-25 10:32:38 UTC (rev 2294)
+++ trunk/ROADMAP	2006-07-25 13:55:01 UTC (rev 2295)
@@ -844,3 +844,34 @@
 
 
 
+
+Currently known bug(s):
+-----------------------
+The client (kjournald) hangs in drbd_al_begin_io(). It waits for
+the completion of w_al_write_transaction(). That will not happen
+since the worker exited alrady.
+
+The receiver hangs in drbd_disconnect(), actuall at this line:
+wait_event( mdev->cstate_wait, atomic_read(&mdev->ap_pending_cnt)==0 );
+
+BTW, mdev->ap_pending_cnt is -1. 
+
+The counter could got below zero, since the requests gets onto the
+TL first, and then it gets queued on the worker's queue.
+
+The the disconnect code comes in, and decreases mdev->ap_pending_cnt
+for each entry in the TL.
+
+The entry on the worker's queue is still there and would increase 
+the counter again, but the worker is dead by now.
+
+Solution:
+
+ * Mark requests as they are moved from the queue to the socket.
+   The tl_clear() function should only decrease mdev->ap_pending_cnt
+   for requests that where already on the socket...
+ * The worker should not exit upon loss of connection.
+
+
+
+

Modified: trunk/drbd/drbd_actlog.c
===================================================================
--- trunk/drbd/drbd_actlog.c	2006-07-25 10:32:38 UTC (rev 2294)
+++ trunk/drbd/drbd_actlog.c	2006-07-25 13:55:01 UTC (rev 2295)
@@ -949,6 +949,7 @@
 			clear_bit(BME_NO_WRITES,&bm_ext->flags);
 			lc_del(mdev->resync,&bm_ext->lce);
 		}
+		mdev->resync->used=0;
 		dec_local(mdev);
 	}
 	atomic_set(&mdev->resync_locked,0);

Modified: trunk/drbd/drbd_req.c
===================================================================
--- trunk/drbd/drbd_req.c	2006-07-25 10:32:38 UTC (rev 2294)
+++ trunk/drbd/drbd_req.c	2006-07-25 13:55:01 UTC (rev 2295)
@@ -355,7 +355,7 @@
 			}
 
 			if (mdev->net_conf->two_primaries) {
-				if(ee_have_write(mdev,req)) {
+				if(ee_have_write(mdev,req)) { // tl_add() here
 					WARN("Concurrent write! [DISCARD L] sec=%lu\n",
 					     (unsigned long)sector);
 					dec_local(mdev);



More information about the drbd-cvs mailing list