[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