[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);