[DRBD-cvs] DRBD CVS: drbd by phil from

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Fri, 16 Jan 2004 11:09:19 +0100 (CET)


DRBD CVS committal

Author  : phil
Host    : 
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_dsender.c drbd_int.h drbd_receiver.c 


Log Message:
* Finally fixed drbd_free_ee() again.
* Lars' fix to asender's main loop.

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.49
retrieving revision 1.1.2.50
diff -u -3 -r1.1.2.49 -r1.1.2.50
--- drbd_dsender.c	15 Jan 2004 21:38:43 -0000	1.1.2.49
+++ drbd_dsender.c	16 Jan 2004 10:09:19 -0000	1.1.2.50
@@ -240,7 +240,7 @@
 	drbd_put_ee(mdev,e);
 	spin_unlock_irq(&mdev->ee_lock);
 
-	if(!ok) ERR("drbd_send_block() failed\n");
+	if(unlikely(!ok)) ERR("drbd_send_block() failed\n");
 	return ok;
 }
 
@@ -249,7 +249,7 @@
 	struct Tl_epoch_entry *e = (struct Tl_epoch_entry*)w;
 	int ok;
 
-	drbd_rs_complete_io(mdev,e->pbh.b_blocknr);
+	drbd_rs_complete_io(mdev,DRBD_BH_SECTOR(&e->pbh));
 	inc_pending(mdev);
 	ok=drbd_send_block(mdev, DataReply, e);
 	dec_unacked(mdev,HERE); // THINK unconditional?
@@ -258,7 +258,7 @@
 	drbd_put_ee(mdev,e);
 	spin_unlock_irq(&mdev->ee_lock);
 
-	if(!ok) ERR("drbd_send_block() failed\n");
+	if(unlikely(!ok)) ERR("drbd_send_block() failed\n");
 	return ok;
 }
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.92
retrieving revision 1.58.2.93
diff -u -3 -r1.58.2.92 -r1.58.2.93
--- drbd_int.h	15 Jan 2004 21:38:43 -0000	1.58.2.92
+++ drbd_int.h	16 Jan 2004 10:09:19 -0000	1.58.2.93
@@ -76,6 +76,9 @@
 			// pointer at adress 0x00000001, it is most
 			// probably one of these :(
 
+struct Drbd_Conf;
+typedef struct Drbd_Conf drbd_dev;
+
 #ifdef DBG_ALL_SYMBOLS
 # define STATIC
 #else
@@ -209,9 +212,6 @@
 /*
  * our structs
  *************************/
-
-struct Drbd_Conf;
-typedef struct Drbd_Conf drbd_dev;
 
 #ifndef typecheck
 /*
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.84
retrieving revision 1.97.2.85
diff -u -3 -r1.97.2.84 -r1.97.2.85
--- drbd_receiver.c	15 Jan 2004 21:38:43 -0000	1.97.2.84
+++ drbd_receiver.c	16 Jan 2004 10:09:19 -0000	1.97.2.85
@@ -241,16 +241,20 @@
 
 STATIC struct page* drbd_free_ee(drbd_dev *mdev, struct list_head *list)
 {
+	struct list_head *le;
 	struct Tl_epoch_entry* e;
 	struct page* page;
 
 	MUST_HOLD(&mdev->ee_lock);
 
-	e = list_entry(list->next, struct Tl_epoch_entry, w.list);
-	list_del(list->next);
+	D_ASSERT(!list_empty(list));
+	le = list->next;
+	e = list_entry(le, struct Tl_epoch_entry, w.list);
+	list_del(le);
 
 	page = e->pbh.b_page;
 	kmem_cache_free(drbd_ee_cache, e);
+	mdev->ee_vacant--;
 	
 	return page;
 }	
@@ -1753,31 +1757,30 @@
 		 * rv <  expected: "woken" by signal during receive
 		 * rv == 0       : "connection shut down by peer"
 		 */
-		if (rv == -EAGAIN) {
+		if (likely(rv > 0)) {
+			received += rv;
+			expect   -= rv;
+			buf      += rv;
+		} else if (rv == 0) {
+			ERR("meta connection shut down by peer.\n");
+			goto err;
+		} else if (rv == -EAGAIN) {
 			set_bit(SEND_PING,&mdev->flags);
 			continue;
-		} else if (rv < 0) {
+		} else if (rv != -EINTR) {
 			// if (rv != -ECONNRESET)
 			ERR("sock_recvmsg returned %d\n", rv);
 			goto err;
-		} else if (rv == 0) {
-			ERR("meta connection shut down by peer.\n");
-			goto err;
-		} else if (rv == -EINTR || rv < expect) {
+		}
+
+		if (expect) {
+			// rv == -EINTR || rv < expect
 			LOCK_SIGMASK(current,flags);
 			sigemptyset(&current->pending.signal);
 			RECALC_SIGPENDING(current);
 			UNLOCK_SIGMASK(current,flags);
-			if (rv == -EINTR) rv=0;
-		} /* else if (rv > expect) {
-			BUG();
-		} */
-		received += rv;
-		expect   -= rv;
-		buf      += rv;
-
-		if (expect)
 			continue;
+		}
 
 		// MAYBE use jump table