svn commit: r227998 - user/attilio/vmcontention/sys/vm

Attilio Rao attilio at FreeBSD.org
Sat Nov 26 14:26:37 UTC 2011


Author: attilio
Date: Sat Nov 26 14:26:37 2011
New Revision: 227998
URL: http://svn.freebsd.org/changeset/base/227998

Log:
  Fix a bug when the 'rnode' pointer can be NULL and we try to track
  the children.  This helps in debugging case.
  
  Reported by:	flo

Modified:
  user/attilio/vmcontention/sys/vm/vm_radix.c

Modified: user/attilio/vmcontention/sys/vm/vm_radix.c
==============================================================================
--- user/attilio/vmcontention/sys/vm/vm_radix.c	Sat Nov 26 14:20:34 2011	(r227997)
+++ user/attilio/vmcontention/sys/vm/vm_radix.c	Sat Nov 26 14:26:37 2011	(r227998)
@@ -290,7 +290,7 @@ vm_radix_insert(struct vm_radix *rtree, 
 			rnode = vm_radix_node_get();
 			if (rnode == NULL) {
 				CTR4(KTR_VM,
-"insert: tree %p, root %p, index: %d, level: %d failed to allocate a new node",
+			"insert: tree %p, root %p, index: %d, level: %d ENOMEM",
 				    rtree, root, index, level);
 				return (ENOMEM);
 			}
@@ -316,23 +316,27 @@ vm_radix_insert(struct vm_radix *rtree, 
 		if (rnode->rn_child[slot] == NULL) {
 			rnode->rn_child[slot] = vm_radix_node_get();
     			if (rnode->rn_child[slot] == NULL) {
-				CTR5(KTR_VM,
-"insert: tree %p, index %jd, level %d, slot %d, child %p failed to populate",
-		    		    rtree, index, level, slot,
-				    rnode->rn_child[slot]);
+				CTR6(KTR_VM,
+"insert: tree %p, index %jd, level %d, slot %d, rnode %p, child %p ENOMEM",
+		    		    rtree, index, level, slot, rnode,
+				    (rnode != NULL) ? rnode->rn_child[slot] :
+				    NULL);
 		    		return (ENOMEM);
 			}
 			rnode->rn_count++;
 	    	}
-		CTR5(KTR_VM,
-		    "insert: tree %p, index %p, level %d, slot %d, child %p",
-		    rtree, (void *)index, level, slot, rnode->rn_child[slot]);
+		CTR6(KTR_VM,
+	"insert: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+		    rtree, (void *)index, level, slot, rnode,
+		    (rnode != NULL) ?  rnode->rn_child[slot] : NULL);
 		rnode = rnode->rn_child[slot];
 	}
 
 	slot = vm_radix_slot(index, 0);
-	CTR5(KTR_VM, "insert: tree %p, index %p, level %d, slot %d, child %p",
-	    rtree, (void *)index, level, slot, rnode->rn_child[slot]);
+	CTR6(KTR_VM,
+	    "insert: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+	    rtree, (void *)index, level, slot, rnode,
+	    (rnode != NULL) ? rnode->rn_child[slot] : NULL);
 	KASSERT(rnode->rn_child[slot] == NULL,
 	    ("vm_radix_insert: Duplicate value %p at index: %lu\n", 
 	    rnode->rn_child[slot], (u_long)index));
@@ -360,9 +364,10 @@ vm_radix_lookup(struct vm_radix *rtree, 
 	level--;
 	while (rnode) {
 		slot = vm_radix_slot(index, level);
-		CTR5(KTR_VM,
-		    "lookup: tree %p, index %p, level %d, slot %d, child %p",
-		    rtree, (void *)index, level, slot, rnode->rn_child[slot]);
+		CTR6(KTR_VM,
+	"lookup: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+		    rtree, (void *)index, level, slot, rnode,
+		    (rnode != NULL) ? rnode->rn_child[slot] : NULL);
 		if (level == 0)
 			return vm_radix_match(rnode->rn_child[slot], color);
 		rnode = rnode->rn_child[slot];
@@ -387,9 +392,10 @@ vm_radix_color(struct vm_radix *rtree, v
 	level--;
 	while (rnode) {
 		slot = vm_radix_slot(index, level);
-		CTR5(KTR_VM,
-		    "color: tree %p, index %p, level %d, slot %d, child %p",
-		    rtree, (void *)index, level, slot, rnode->rn_child[slot]);
+		CTR6(KTR_VM,
+	"color: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+		    rtree, (void *)index, level, slot, rnode,
+		    (rnode != NULL) ? rnode->rn_child[slot] : NULL);
 		if (level == 0)
 			break;
 		rnode = rnode->rn_child[slot];
@@ -430,9 +436,10 @@ restart:
 	 */
 	for (level--; level; level--) {
 		slot = vm_radix_slot(start, level);
-		CTR5(KTR_VM,
-		    "leaf: tree %p, index %p, level %d, slot %d, child %p",
-		    rtree, (void *)start, level, slot, rnode->rn_child[slot]);
+		CTR6(KTR_VM,
+	"leaf: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+		    rtree, (void *)start, level, slot, rnode,
+		    (rnode != NULL) ? rnode->rn_child[slot] : NULL);
 		if (rnode->rn_child[slot] != NULL) {
 			rnode = rnode->rn_child[slot];
 			continue;
@@ -569,9 +576,10 @@ restart:
 	level--;
 	while (rnode) {
 		slot = vm_radix_slot(index, level);
-		CTR5(KTR_VM,
-		    "lookup_le: tree %p, index %p, level %d, slot %d, child %p",
-		    rtree, (void *)index, level, slot, rnode->rn_child[slot]);
+		CTR6(KTR_VM,
+	"lookup_le: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+		    rtree, (void *)index, level, slot, rnode,
+		    (rnode != NULL) ? rnode->rn_child[slot] : NULL);
 		if (level == 0)
 			break;
 		/*
@@ -641,9 +649,10 @@ vm_radix_remove(struct vm_radix *rtree, 
 		stack[level] = rnode;
 		slot = vm_radix_slot(index, level);
 		rnode = rnode->rn_child[slot];
-		CTR5(KTR_VM,
-		    "remove: tree %p, index %p, level %d, slot %d, child %p",
-		    rtree, (void *)index, level, slot, rnode->rn_child[slot]);
+		CTR6(KTR_VM,
+	"remove: tree %p, index %p, level %d, slot %d, rnode %p, child %p",
+		    rtree, (void *)index, level, slot, rnode,
+		    (rnode != NULL) ? rnode->rn_child[slot] : NULL);
 		level--;
 	}
 	KASSERT(rnode != NULL,


More information about the svn-src-user mailing list