Date: Sat, 26 Nov 2011 14:26:37 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r227998 - user/attilio/vmcontention/sys/vm Message-ID: <201111261426.pAQEQbkM095096@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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,
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201111261426.pAQEQbkM095096>