[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(¤t->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