[DRBD-cvs] drbd by phil; Added all missing dec_ap_pending()s to t...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Fri, 7 May 2004 11:32:50 +0200 (CEST)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
Added all missing dec_ap_pending()s to tl_clear(). Now the ap_pending
count returns to 0 upon loss of connection. Nice.

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.164
retrieving revision 1.73.2.165
diff -u -3 -r1.73.2.164 -r1.73.2.165
--- drbd_main.c	6 May 2004 13:59:13 -0000	1.73.2.164
+++ drbd_main.c	7 May 2004 09:32:44 -0000	1.73.2.165
@@ -288,10 +288,19 @@
 	spin_lock_irq(&mdev->tl_lock);
 
 	b=mdev->oldest_barrier;
+	mdev->oldest_barrier = new_first;
+	mdev->newest_barrier = new_first;
+
+	spin_unlock_irq(&mdev->tl_lock);
+
+	inc_ap_pending(mdev); // Since we count the old first as well...
+
 	while ( b ) {
 		list_for_each_safe(le, tle, &b->requests) {
 			r = list_entry(le, struct drbd_request,w.list);
 			if( (r->rq_status&0xfffe) != RQ_DRBD_SENT ) {
+				if(mdev->conf.wire_protocol != DRBD_PROT_A )
+					dec_ap_pending(mdev,HERE);
 				drbd_end_req(r,RQ_DRBD_SENT,ERF_NOTLD|1,
 					     drbd_req_get_sector(r));
 				goto mark;
@@ -307,12 +316,8 @@
 		b=b->next;
 		list_del(&f->requests);
 		kfree(f);
+		dec_ap_pending(mdev,HERE);
 	}
-
-	mdev->oldest_barrier = new_first;
-	mdev->newest_barrier = new_first;
-
-	spin_unlock_irq(&mdev->tl_lock);
 }
 
 /**
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.148
retrieving revision 1.97.2.149
diff -u -3 -r1.97.2.148 -r1.97.2.149
--- drbd_receiver.c	6 May 2004 15:59:55 -0000	1.97.2.148
+++ drbd_receiver.c	7 May 2004 09:32:44 -0000	1.97.2.149
@@ -1520,8 +1520,10 @@
 	   on the fly. */
 	atomic_set(&mdev->rs_pending_cnt,0);
 
-	ERR_IF(atomic_read(&mdev->ap_pending_cnt))
+	if(atomic_read(&mdev->ap_pending_cnt)) {
+		ERR("ap_pending_cnt = %d\n",atomic_read(&mdev->ap_pending_cnt));
 		atomic_set(&mdev->ap_pending_cnt,0);
+	}
 
 	wake_up_interruptible(&mdev->cstate_wait);