[DRBD-cvs] svn commit by phil - r2110 - trunk/drbd - Added some (disabled) debug code, that could be usefull

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Fri Mar 10 12:07:47 CET 2006


Author: phil
Date: 2006-03-10 12:07:46 +0100 (Fri, 10 Mar 2006)
New Revision: 2110

Modified:
   trunk/drbd/drbd_actlog.c
   trunk/drbd/drbd_main.c
   trunk/drbd/drbd_proc.c
   trunk/drbd/drbd_receiver.c
   trunk/drbd/lru_cache.c
   trunk/drbd/lru_cache.h
Log:
Added some (disabled) debug code, that could be usefull later on
as well.


Modified: trunk/drbd/drbd_actlog.c
===================================================================
--- trunk/drbd/drbd_actlog.c	2006-03-08 12:33:07 UTC (rev 2109)
+++ trunk/drbd/drbd_actlog.c	2006-03-10 11:07:46 UTC (rev 2110)
@@ -591,7 +591,7 @@
 				      int cleared)
 {
 	struct list_head *le, *tmp;
-	struct bm_extent* ext;
+	struct bm_extent* ext, *ext1;
 	struct update_odbm_work * udw;
 
 	unsigned int enr;
@@ -640,25 +640,34 @@
 	}
 
 	list_for_each_safe(le,tmp,&mdev->resync->lru) {
-		ext=(struct bm_extent *)list_entry(le,struct lc_element,list);
-		if(ext->rs_left == 0) {
+		ext1=(struct bm_extent *)list_entry(le,struct lc_element,list);
+		if(ext1->rs_left == 0) {
+			if(ext1 == ext) ext=NULL;
 			udw=kmalloc(sizeof(*udw),GFP_ATOMIC);
 			if(!udw) {
 				WARN("Could not kmalloc an udw\n");
 				break;
 			}
-			udw->enr = ext->lce.lc_number;
+			udw->enr = ext1->lce.lc_number;
 			udw->w.cb = w_update_odbm;
 			drbd_queue_work_front(mdev,&mdev->data.work,&udw->w);
-			if (ext->flags != 0) {
+			if (ext1->flags != 0) {
 				WARN("deleting resync lce: %d[%u;%02lx]\n",
-				     ext->lce.lc_number, ext->rs_left,
-				     ext->flags);
-				ext->flags = 0;
+				     ext1->lce.lc_number, ext1->rs_left,
+				     ext1->flags);
+				ext1->flags = 0;
 			}
-			lc_del(mdev->resync,&ext->lce);
+			lc_del(mdev->resync,&ext1->lce);
 		}
 	}
+
+	if(ext) {
+		if (ext->rs_left == 0) {
+			ERR("BUG! missed lc_number:%u refcnt: %u\n",
+			    ext->lce.lc_number,
+			    ext->lce.refcnt);
+		}
+	}
 }
 
 /* clear the bit corresponding to the piece of storage in question:

Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c	2006-03-08 12:33:07 UTC (rev 2109)
+++ trunk/drbd/drbd_main.c	2006-03-10 11:07:46 UTC (rev 2110)
@@ -2180,6 +2180,9 @@
 	printk(KERN_ERR "AL_EXTENTS_PT = %d\n",AL_EXTENTS_PT);
 	printk(KERN_ERR "DRBD_MAX_SECTORS = %llu\n",DRBD_MAX_SECTORS);
 	printk(KERN_ERR "DRBD_MAX_SECTORS_FLEX = %llu\n",DRBD_MAX_SECTORS_FLEX);
+#define OOF(t,m) printk(KERN_ERR "offsetof("#t","#m") = %d\n", offsetof(t,m))
+	OOF(struct Drbd_Conf,bitmap);
+	//OOF(struct drbd_bitmap,bm_set);
 	return -EBUSY;
 #endif
 #ifdef __arch_um__

Modified: trunk/drbd/drbd_proc.c
===================================================================
--- trunk/drbd/drbd_proc.c	2006-03-08 12:33:07 UTC (rev 2109)
+++ trunk/drbd/drbd_proc.c	2006-03-10 11:07:46 UTC (rev 2110)
@@ -160,7 +160,18 @@
 	seq_printf(seq," K/sec\n");
 }
 
+#if 0
+STATIC void resync_dump_detail(struct seq_file *seq, struct lc_element * e)
+{
+	struct bm_extent *bme = (struct bm_extent *)e;
 
+	seq_printf(seq,"%5d %s %s\n",bme->rs_left,
+		   bme->flags & BME_NO_WRITES ? "NO_WRITES" : "---------",
+		   bme->flags & BME_LOCKED ? "LOCKED" : "------"
+		   );
+}
+#endif
+
 STATIC int drbd_seq_show(struct seq_file *seq, void *v)
 {
 	int i;
@@ -221,6 +232,13 @@
 		if(drbd_conf[i].act_log) {
 			lc_printf_stats(seq,drbd_conf[i].act_log);
 		}
+#if 0
+		if(drbd_conf[i].resync) {
+			lc_dump(drbd_conf[i].resync,seq,"rs_left",
+				resync_dump_detail);
+		}
+#endif
+
 	}
 
 	return 0;

Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2006-03-08 12:33:07 UTC (rev 2109)
+++ trunk/drbd/drbd_receiver.c	2006-03-10 11:07:46 UTC (rev 2110)
@@ -1076,8 +1076,6 @@
 						    1);
 				dec_unacked(mdev);
 			}
-			/* FIXME
-			 * explain why we need this SYNC_STARTED flag bit */
 			if (test_bit(SYNC_STARTED,&mdev->flags) )
 				drbd_set_in_sync(mdev,sector,drbd_ee_get_size(e));
 		} else {
@@ -1110,8 +1108,6 @@
 	if(mdev->net_conf->wire_protocol == DRBD_PROT_C) {
 		if(likely(drbd_bio_uptodate(e->private_bio))) {
 			ok &= drbd_send_ack(mdev,WriteAck,e);
-			/* FIXME
-			 * explain why we need this SYNC_STARTED flag bit */
 			if (test_bit(SYNC_STARTED,&mdev->flags))
 				drbd_set_in_sync(mdev,sector,drbd_ee_get_size(e));
 		} else {

Modified: trunk/drbd/lru_cache.c
===================================================================
--- trunk/drbd/lru_cache.c	2006-03-08 12:33:07 UTC (rev 2109)
+++ trunk/drbd/lru_cache.c	2006-03-10 11:07:46 UTC (rev 2110)
@@ -313,3 +313,29 @@
 	list_move(&e->list, e->refcnt ? &lc->in_use : &lc->lru);
 }
 
+#if 0
+/**
+ * lc_dump: Dump a complete LRU cache to seq in textual form.
+ */
+void lc_dump(struct lru_cache* lc, struct seq_file *seq, char* utext,
+	     void (*detail) (struct seq_file *, struct lc_element *) )
+{
+	unsigned int nr_elements = lc->nr_elements;
+	struct lc_element *e;
+	int i;
+
+	seq_printf(seq,"\tnn: lc_number refcnt %s\n ",utext);
+	for(i=0;i<nr_elements;i++) {
+		e = lc_entry(lc,i);
+		if( e->lc_number == LC_FREE ) {
+			seq_printf(seq,"\t%2d: FREE\n",i );
+		} else {
+			seq_printf(seq,"\t%2d: %4u %4u    ", i, 
+				   e->lc_number,
+				   e->refcnt );
+			detail(seq,e);
+		}
+	}
+}
+
+#endif

Modified: trunk/drbd/lru_cache.h
===================================================================
--- trunk/drbd/lru_cache.h	2006-03-08 12:33:07 UTC (rev 2109)
+++ trunk/drbd/lru_cache.h	2006-03-10 11:07:46 UTC (rev 2110)
@@ -110,6 +110,9 @@
 struct seq_file;
 extern size_t lc_printf_stats(struct seq_file *seq, struct lru_cache* lc);
 
+void lc_dump(struct lru_cache* lc, struct seq_file *seq, char* utext,
+	     void (*detail) (struct seq_file *, struct lc_element *) );
+
 /* This can be used to stop lc_get from changing the set of active elements.
  * Note that the reference counts and order on the lru list may still change.
  * returns true if we aquired the lock.



More information about the drbd-cvs mailing list