[DRBD-cvs] drbd by lars; someone wants to wear a paper bag

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Fri, 23 Apr 2004 10:56:54 +0200 (CEST)


DRBD CVS committal

Author  : lars
Module  : drbd

Dir     : drbd/drbd


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


Log Message:
someone wants to wear a paper bag
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.87
retrieving revision 1.1.2.88
diff -u -3 -r1.1.2.87 -r1.1.2.88
--- drbd_actlog.c	22 Apr 2004 09:18:18 -0000	1.1.2.87
+++ drbd_actlog.c	23 Apr 2004 08:56:49 -0000	1.1.2.88
@@ -444,7 +444,7 @@
 			BM_EXTENT_SIZE >> 9 );
 
 	for(i=0;i<exts;i++) {
-		drbd_update_on_disk_bm(mdev,i);
+		drbd_update_on_disk_bm(mdev,i*EXTENTS_PER_SECTOR);
 	}
 	dec_local(mdev);
 }
@@ -529,9 +529,6 @@
 	     (unsigned long) mdev->rs_total>>1);
 }
 
-#define BM_WORDS_PER_EXTENT ( (AL_EXTENT_SIZE/BM_BLOCK_SIZE) / BITS_PER_LONG )
-#define BM_BYTES_PER_EXTENT ( (AL_EXTENT_SIZE/BM_BLOCK_SIZE) / 8 )
-#define EXTENTS_PER_SECTOR  ( 512 / BM_BYTES_PER_EXTENT )
 /**
  * drbd_update_on_disk_bm: Writes a piece of the bitmap to its
  * on disk location.
@@ -550,6 +547,16 @@
 	bm = mdev->mbds_id->bm;
 	bm_words = mdev->mbds_id->size/sizeof(unsigned long);
 	bm_i = enr * BM_WORDS_PER_EXTENT ;
+
+	/* FIXME yes, this triggers
+	 * not exactly reproduceable, though :(
+	 * some error in param exchange,
+	 * bitmap not properly resized ...
+	 */
+	ERR_IF(bm_i >= bm_words) {
+		DUMPI(bm_i);
+		DUMPI(bm_words);
+	}
 	want=min_t(int,512/sizeof(long),bm_words-bm_i);
 
 	down(&mdev->md_io_mutex); // protects md_io_buffer
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.144
retrieving revision 1.58.2.145
diff -u -3 -r1.58.2.144 -r1.58.2.145
--- drbd_int.h	16 Apr 2004 12:18:55 -0000	1.58.2.144
+++ drbd_int.h	23 Apr 2004 08:56:49 -0000	1.58.2.145
@@ -572,6 +572,10 @@
 #define BM_EXTENT_SIZE_B 24       // One extent represents 16M Storage
 #define BM_EXTENT_SIZE (1<<BM_EXTENT_SIZE_B)
 
+#define BM_WORDS_PER_EXTENT ( (AL_EXTENT_SIZE/BM_BLOCK_SIZE) / BITS_PER_LONG )
+#define BM_BYTES_PER_EXTENT ( (AL_EXTENT_SIZE/BM_BLOCK_SIZE) / 8 )
+#define EXTENTS_PER_SECTOR  ( 512 / BM_BYTES_PER_EXTENT )
+
 struct bm_extent { // 16MB sized extents.
 	struct lc_element lce;
 	int rs_left; //number of sectors out of sync in this extent.