[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.