[DRBD-cvs] svn commit by phil - r2117 - trunk/drbd - * Made the display of a LRU-cache's usage in /proc more

drbd-cvs at lists.linbit.com drbd-cvs at lists.linbit.com
Mon Mar 13 18:38:28 CET 2006


Author: phil
Date: 2006-03-13 18:38:25 +0100 (Mon, 13 Mar 2006)
New Revision: 2117

Modified:
   trunk/drbd/drbd_receiver.c
   trunk/drbd/lru_cache.c
   trunk/drbd/lru_cache.h
Log:
* Made the display of a LRU-cache's usage in /proc more usefull by
  printing the currently used elements as well.
* Wrote a drbd_uuid_dump() debug helper.
* Free the peer's UUID set on disconnect. This was the reason why
  DRBD8 did a full sync after interrupting a resync by 
  drbdadm down r0 / drbdadm up r0 on a SyncSource node.



Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2006-03-13 12:10:04 UTC (rev 2116)
+++ trunk/drbd/drbd_receiver.c	2006-03-13 17:38:25 UTC (rev 2117)
@@ -1574,6 +1574,16 @@
 	return rv;
 }
 
+STATIC void drbd_uuid_dump(drbd_dev *mdev,char* text,u64* uuid)
+{
+	WARN("%s %016llX:%016llX:%016llX:%016llX\n",
+	     text,
+	     uuid[Current],
+	     uuid[Bitmap],
+	     uuid[History_start],
+	     uuid[History_end]);
+}
+
 /*
   100   after split brain try auto recover
     2   SyncSource set BitMap
@@ -1584,7 +1594,7 @@
  -100   after split brain, disconnect
 -1000   unrelated data
  */
-static int drbd_uuid_compare(drbd_dev *mdev)
+STATIC int drbd_uuid_compare(drbd_dev *mdev)
 {
 	u64 self, peer;
 	int i,j;
@@ -1645,8 +1655,14 @@
 	int hg;
 	drbd_conns_t rv = conn_mask;
 
+
+	//drbd_uuid_dump(mdev,"self",mdev->bc->md.uuid);
+	//drbd_uuid_dump(mdev,"peer",mdev->p_uuid);
+
 	hg = drbd_uuid_compare(mdev);
 
+	//WARN("uuid_compare()=%d\n",hg);
+
 	if (hg == 100) {
 		if ( mdev->state.role==Secondary && peer_role==Secondary ) {
 			hg = drbd_asb_recover_0p(mdev);
@@ -2432,6 +2448,11 @@
 		}
 	}
 
+	if ( mdev->p_uuid ) {
+		kfree(mdev->p_uuid);
+		mdev->p_uuid = NULL;
+	}
+
 	drbd_md_sync(mdev);
 	INFO("Connection lost.\n");
 }

Modified: trunk/drbd/lru_cache.c
===================================================================
--- trunk/drbd/lru_cache.c	2006-03-13 12:10:04 UTC (rev 2116)
+++ trunk/drbd/lru_cache.c	2006-03-13 17:38:25 UTC (rev 2117)
@@ -94,9 +94,9 @@
 	 * misses include "dirty" count (update from an other thread in progress)
 	 * and "changed", when this in fact lead to an successful update of the cache.
 	 */
-	return seq_printf(seq,"\t%s: elements:%u "
+	return seq_printf(seq,"\t%s: used:%u/%u "
 		"hits:%lu misses:%lu starving:%lu dirty:%lu changed:%lu\n",
-		lc->name, lc->nr_elements,
+		lc->name, lc->used, lc->nr_elements,
 		lc->hits, lc->misses, lc->starving, lc->dirty, lc->changed);
 }
 
@@ -223,7 +223,7 @@
 	e = lc_find(lc, enr);
 	if (e) {
 		++lc->hits;
-		++e->refcnt;
+		if( e->refcnt++ == 0) lc->used++;
 		list_move(&e->list,&lc->in_use); // Not evictable...
 		RETURN(e);
 	}
@@ -252,6 +252,7 @@
 
 	clear_bit(__LC_STARVING,&lc->flags);
 	BUG_ON(++e->refcnt != 1);
+	lc->used++;
 
 	lc->changing_element = e;
 	lc->new_number = enr;
@@ -285,6 +286,7 @@
 	BUG_ON(e->refcnt == 0);
 	if ( --e->refcnt == 0) {
 		list_move(&e->list,&lc->lru); // move it to the front of LRU.
+		lc->used--;
 		clear_bit(__LC_STARVING,&lc->flags);
 		smp_mb__after_clear_bit();
 	}

Modified: trunk/drbd/lru_cache.h
===================================================================
--- trunk/drbd/lru_cache.h	2006-03-13 12:10:04 UTC (rev 2116)
+++ trunk/drbd/lru_cache.h	2006-03-13 17:38:25 UTC (rev 2117)
@@ -74,6 +74,7 @@
 
 	/* here may or may not be a pad... */
 
+	unsigned int used;
 	unsigned long flags;
 	unsigned long hits, misses, starving, dirty, changed;
 	struct lc_element *changing_element; // just for paranoia



More information about the drbd-cvs mailing list