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

drbd-cvs@linbit.com drbd-cvs@linbit.com
Sat, 10 Jan 2004 20:24:00 +0100 (CET)


DRBD CVS committal

Author  : phil
Host    : 
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
*) mempools were destoryed before their objects were freed. FIXED.
*) Finishing functionality of drbd_rs_begin_io()

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.42
retrieving revision 1.1.2.43
diff -u -3 -r1.1.2.42 -r1.1.2.43
--- drbd_actlog.c	9 Jan 2004 08:47:31 -0000	1.1.2.42
+++ drbd_actlog.c	10 Jan 2004 19:24:00 -0000	1.1.2.43
@@ -525,6 +525,7 @@
 			ext->rs_left -= cleared;
 			D_ASSERT((long)ext->rs_left >= 0);
 		} else {
+			WARN("Recounting sectors (resync LRU too small?)\n");
 			ext->lce.lc_number = enr;
 			ext->rs_left = bm_count_sectors(mdev->mbds_id,enr);
 		}
@@ -598,12 +599,18 @@
 
 	spin_lock_irq(&mdev->al_lock);
 	bm_ext = (struct bm_extent*) lc_get(mdev->resync,enr);
-	if(bm_ext) set_bit(BME_NO_WRITES,&bm_ext->flags); // within the lock
+	if(bm_ext) {
+		if(bm_ext->lce.lc_number != enr) {
+			bm_ext->lce.lc_number = enr;
+			bm_ext->rs_left = bm_count_sectors(mdev->mbds_id,enr);
+		}
+		set_bit(BME_NO_WRITES,&bm_ext->flags); // within the lock
+	}
 	if(bm_ext == 0)	rs_flags=mdev->resync->flags;
 	spin_unlock_irq(&mdev->al_lock);
 
 	if(rs_flags & LC_STARVING) {
-		WARN("Have to wait for element (resync too small?)\n");
+		WARN("Have to wait for element (resync LRU too small?)\n");
 	}
 	if(rs_flags & LC_DIRTY) {
 		BUG(); // WARN("Ongoing RS update (???)\n");
@@ -660,7 +667,7 @@
 	bm_ext = (struct bm_extent*) lc_find(mdev->resync,enr);
 	if(!bm_ext) {
 		spin_unlock_irq(&mdev->al_lock);
-		ERR("bme_put() called, but extent not found");
+		ERR("drbd_rs_complete_io() called, but extent not found");
 		return;
 	}
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.87
retrieving revision 1.73.2.88
diff -u -3 -r1.73.2.87 -r1.73.2.88
--- drbd_main.c	10 Jan 2004 14:46:11 -0000	1.73.2.87
+++ drbd_main.c	10 Jan 2004 19:24:00 -0000	1.73.2.88
@@ -1102,7 +1102,6 @@
 	if (drbd_conf) {
 		if (drbd_proc)
 			remove_proc_entry("drbd",&proc_root);
-		drbd_destroy_mempools();
 		i=minor_count;
 		while (i--) {
 			drbd_dev        *mdev  = &drbd_conf[i];
@@ -1140,6 +1139,7 @@
 
 			if (mdev->act_log) lc_free(mdev->act_log);
 		}
+		drbd_destroy_mempools();
 	}
 
 	// kfree(NULL) is noop