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

drbd-cvs@linbit.com drbd-cvs@linbit.com
Tue, 13 Jan 2004 20:42:17 +0100 (CET)


DRBD CVS committal

Author  : phil
Host    : 
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_actlog.c 


Log Message:
Next round in the drbd_rs_begin_io() saga. (I think this time it is correct)

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.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_actlog.c	13 Jan 2004 11:06:29 -0000	1.1.2.49
+++ drbd_actlog.c	13 Jan 2004 19:42:16 -0000	1.1.2.50
@@ -618,18 +618,22 @@
 	return bm_ext;
 }
 
-static inline int _al_not_in_use(drbd_dev* mdev, unsigned int enr)
+static inline int _is_in_al(drbd_dev* mdev, unsigned int enr)
 {
 	struct lc_element* al_ext;
 	int rv=0;
 	
 	spin_lock_irq(&mdev->al_lock);
-	al_ext = lc_find(mdev->act_log,enr);
-	if(al_ext == 0 ) rv = 1;
-	else if(al_ext->refcnt == 0) rv = 1;
+	if(unlikely(enr == mdev->act_log->new_number)) rv=1;
+	else {
+		al_ext = lc_find(mdev->act_log,enr);
+		if(al_ext) {
+			if (al_ext->refcnt) rv=1;
+		}
+	}
 	spin_unlock_irq(&mdev->al_lock);
 
-	if(!rv) WARN("Delaying sync read until app's write is done\n");
+	if(rv) WARN("Delaying sync read until app's write is done\n");
 
 	return rv;
 }
@@ -651,7 +655,7 @@
 	if(test_bit(BME_LOCKED,&bm_ext->flags)) return;
 
 	for(i=0;i<SM;i++) {
-		wait_event(mdev->al_wait, _al_not_in_use(mdev,enr*SM+i) );
+		wait_event(mdev->al_wait, !_is_in_al(mdev,enr*SM+i) );
 	}
 
 	set_bit(BME_LOCKED,&bm_ext->flags);