code: mafs

Download patch

ref: 2d2835de03e4eafa1b9e30797a598fa48a8bf512
parent: 5a0f60650e7e27d4340313edb141fd728bf099d3
author: 9ferno <gophone2015@gmail.com>
date: Sun Dec 25 13:33:48 EST 2022

fixed more extents bugs

diff: cannot open b/tests/extents/2//null: file does not exist: 'b/tests/extents/2//null' diff: cannot open b/tests/extents/3//null: file does not exist: 'b/tests/extents/3//null'
--- a/custom.acid
+++ b/custom.acid
@@ -1,4 +1,5 @@
 include("mafs.acid");
+include("extents.acid");
 
 defn
 Qid9p1(addr) {
@@ -43,4 +44,93 @@
 		Dentry1(addr+0);
 	print("}\n");
 	print("	name	", *(addr.name\s), "\n");
+};
+
+defn
+Showextentpointers(addr) {
+	complex Extent addr;
+	local start, len;
+
+	start = addr.start\Z;
+	len = addr.len\Z;
+	print(start\Z, "	", (start+len-1)\Z,"	", len\Z,
+			"	", addr\Y, "\n");
+	print("	", addr.prev\Y, " lru   ", addr.next\Y, "\n");
+	print("	", addr.low\Y,  " start ", addr.high\Y,"\n");
+	print("	", addr.small\Y," len   ", addr.big\Y, "\n");
+};
+
+defn
+Showextentspointers(addr) {
+	complex Extents addr;
+	complex Extent eaddr;
+
+	print(*(addr.name\s), " n ", addr.n\Z,
+			" lowest ", addr.lowest\Y,
+			" lru ", addr.lru\Y,
+			" nlru ", addr.nlru\b, "\n");
+	eaddr = addr.lowest;
+	while eaddr != 0 do {
+		Showextentpointers(eaddr);
+		eaddr = eaddr.high;
+	}
+};
+
+defn
+Showextent(addr) {
+	complex Extent addr;
+	local start, len;
+
+	start = addr.start\Z;
+	len = addr.len\Z;
+	print(start\Z, " ", (start+len-1)\Z," ", len\Z, " ", addr\Y);
+};
+
+defn
+Showextents(addr) {
+	complex Extents addr;
+	complex Extent eaddr;
+	complex Extent lru;
+	complex Extent elow;
+
+	print(*(addr.name\s), " n ", addr.n\Z,
+			" lowest (", Showextent(addr.lowest),
+			") lru (", Showextent(addr.lru),
+			") nlru ", addr.nlru\b, "\n");
+	print("by blkno:\n");
+	eaddr = addr.lowest;
+	while eaddr != 0 do {
+		Showextent(eaddr);
+		print("\n");
+		eaddr = eaddr.high;
+	}
+	print("by size:\n");
+	eaddr = addr.lowest;
+	while eaddr != 0 do {
+		elow = eaddr;
+		eaddr = eaddr.small;
+	}
+	eaddr = elow;
+	while eaddr != 0 do {
+		Showextent(eaddr);
+		print("\n");
+		eaddr = eaddr.big;
+	}
+	print("lru:\n");
+	eaddr = addr.lru;
+	if eaddr != 0 then {
+		Showextent(eaddr);
+		print("\n");
+		eaddr = eaddr.next;
+		while eaddr != addr.lru do {
+			Showextent(eaddr);
+			print("\n");
+			eaddr = eaddr.next;
+		}
+	}
+};
+
+defn
+Es(addr) {
+	Showextents(addr);
 };
--- a/extents.c
+++ b/extents.c
@@ -180,9 +180,10 @@
 {
 	Extent *e;
 
-	if(es == nil || es->lru == nil)
+	if(es == nil)
 		return nil;
-	for(e = es->lru; e!=nil && e->small != nil; e=e->small)
+	for(e = es->lru ? es->lru : es->lowest;
+		e!=nil && e->small != nil; e=e->small)
 		;
 	return e;
 }
@@ -192,9 +193,10 @@
 {
 	Extent *e;
 
-	if(es == nil || es->lru == nil)
+	if(es == nil)
 		return nil;
-	for(e = es->lru; e!=nil && e->big != nil; e=e->big)
+	for(e = es->lru ? es->lru : es->lowest;
+		e!=nil && e->big != nil; e=e->big)
 		;
 	return e;
 }
@@ -212,9 +214,10 @@
 {
 	Extent *e;
 
-	if(es == nil || es->lru == nil)
+	if(es == nil)
 		return nil;
-	for(e = es->lru; e!=nil && e->high != nil; e=e->high)
+	for(e = es->lru ? es->lru : es->lowest;
+		e!=nil && e->high != nil; e=e->high)
 		;
 	return e;
 }
@@ -328,8 +331,17 @@
 
 	if(chatty9p > 7)
 	print("addbysize after scroll down eprev start %llud len %llud\n", eprev->start, eprev->len);
-	if(chatty9p > 7)
-	print("addbysize e start %llud len %llud\n", e->start, e->len);
+	if(chatty9p > 7){
+		print("addbysize e start %llud len %llud\n", e->start, e->len);
+		if(dsmall == nil)
+			print("addbysize dsmall nil\n");
+		else
+			print("addbysize dsmall start %llud len %llud\n", dsmall->start, dsmall->len);
+		if(fbig == nil)
+			print("addbysize fbig nil\n");
+		else
+			print("addbysize fbig start %llud len %llud\n", fbig->start, fbig->len);
+	}
 	if(fbig != nil)
 		fbig->small = e;
 	e->big = fbig;
@@ -688,7 +700,7 @@
 	Extent *d, *f;
 
 	if(es == nil || e == nil || es->lowest == nil || len == 0 || e->len <= len){
-		showextentswithsize(2, "slice() panic\n", es);
+		showextentslists(2, "slice() panic\n", es);
 		panic("slice(): should not happen es %8#p e %8#p es->lru %8#p len %llud e->len %llud",
 				es, e, es->lru, len, e->len);
 	}
@@ -698,7 +710,7 @@
 
 	/* this is the only extent, nothing more to do */
 	if(es->n == 1)
-		return oldstart;
+		goto Sliced;
 
 	/*
 		change position in the size linked list
@@ -708,7 +720,7 @@
 	f = e->big;
 	/* already the smallest, nothing more to do */
 	if(d == nil)
-		return oldstart;
+		goto Sliced;
 	d->big = f;
 	if(f != nil)
 		f->small = d;
@@ -728,6 +740,8 @@
 		d->big = e;
 	if(f != nil)
 		f->small = e;
+
+Sliced:
 	intolrus(es, e);
 	return oldstart;
 }
@@ -743,6 +757,8 @@
 
 	if(es == nil)
 		panic("balloc: es == nil");
+	if(es->n == 0)
+		panic("balloc entering es->n == 0\n");
 	start = 0;
 	USED(start);
 	qlock(&es->lck);
@@ -750,7 +766,7 @@
 		rsleep(&es->isempty);
 	if(chatty9p > 7){
 		snprint(msg, 64, "balloc() %llud blocks:\n", n);
-		showextentswithsize(2, msg, es);
+		showextentslists(2, msg, es);
 	}
 again:
 	e = euse = searchlrusbysize(es, n, &dir);
@@ -794,7 +810,12 @@
 
 //		snprint(msg, 64, "balloc()'ed start %llud len %llud blocks:\n", start, n);
 //		showextentswithsize(2, msg, es);
+	if(es->n == 0)
+		panic("balloc exiting es->n == 0\n");
 	qunlock(&es->lck);
+	/* uncomment the below line and the other in bfree() for
+		generating test cases of unforeseen behaviour */
+	/* fprint(2, "%s-%llud %llud\n", es->name, start, n); */
 	return start;
 }
 
@@ -809,12 +830,15 @@
 void
 bfree(Extents *es, u64 start, u64 len)
 {
-	char msg[64];
+//	char msg[64];
 
 	if(es == nil)
 		panic("bfree: es == nil");
 	if(len <= 0)
 		panic("bfree: len <= 0");
+	/* uncomment the below line and the other in balloc() for
+		generating test cases of unforeseen behaviour */
+	/* fprint(2, "%s+%llud %llud\n", es->name, start, len); */
 	qlock(&es->lck);
 	add(es, start, len);
 //		snprint(msg, 64, "bfree()d start %llud len %llud blocks:\n", start, len);
@@ -821,6 +845,8 @@
 //		showextentswithsize(2, msg, es);
 //	if(es->n == 1) the sleeper could just be waiting for a different len block
 		rwakeup(&es->isempty);
+	if(es->n == 0)
+		panic("bfree exiting es->n == 0\n");
 	qunlock(&es->lck);
 }
 
@@ -953,7 +979,7 @@
 }
 
 void
-showextentswithsize(int fd, char *msg, Extents *es)
+showextentspointers(int fd, char *msg, Extents *es)
 {
 	Extent *e;
 
@@ -960,16 +986,56 @@
 	fprint(fd, "%s", msg);
 	fprint(fd, "Extents %s n %llud lowest %8#p lru %8#p nlru %d\n",
 				es->name, es->n, es->lowest, es->lru, es->nlru);
+	fprint(fd, "by blkno:\n");
 	for(e = lowest(es); e != nil; e = e->high){
-		// fprint(fd, "%llud %llud %llud", e->start, e->start+e->len-1, e->len);
-		showextent(fd, "	", e);
+		fprint(fd, "%llud %llud %llud\n", e->start, e->start+e->len-1, e->len);
+		// showextent(fd, "	", e);
 	}
+}
+
+void
+showextentslists(int fd, char *msg, Extents *es)
+{
+	Extent *e;
+
+	fprint(fd, "%s", msg);
+	fprint(fd, "Extents %s n %llud", es->name, es->n);
+	if(es->lowest)
+		fprint(fd, " lowest (%llud %llud %llud)",
+				es->lowest->start,
+				es->lowest->start+es->lowest->len-1,
+				es->lowest->len);
+	else
+		fprint(fd, " lowest %8#p", es->lowest);
+
+	if(es->lru)
+		fprint(fd, " lru (%llud %llud %llud) ",
+				es->lru->start,
+				es->lru->start+es->lru->len-1,
+				es->lru->len);
+	else
+		fprint(fd, " lru %8#p ", es->lru);
+	fprint(fd, "nlru %d\n", es->nlru);
+
+	fprint(fd, "by blkno:\n");
+	for(e = lowest(es); e != nil; e = e->high){
+		fprint(fd, "%llud %llud %llud\n", e->start, e->start+e->len-1, e->len);
+		// showextent(fd, "	", e);
+	}
 	if(es->lowest != nil){
 		fprint(fd, "by size:\n");
 		for(e = smallest(es); e != nil; e = e->big){
-			// fprint(fd, "%llud %llud %llud", e->start, e->start+e->len-1, e->len);
-			showextent(fd, "	", e);
+			fprint(fd, "%llud %llud %llud\n", e->start, e->start+e->len-1, e->len);
+			// showextent(fd, "	", e);
 		}
+	}
+	if(es->lru != nil){
+		fprint(fd, "lru:\n");
+		e = es->lru;
+		do{
+			fprint(fd, "%llud %llud %llud\n", e->start, e->start+e->len-1, e->len);
+			e=e->next;
+		}while(e != nil && e != es->lru);
 	}
 }
 
--- a/extents.h
+++ b/extents.h
@@ -44,7 +44,7 @@
 
 void	showblocknos(int fd, Extents *es);
 void	showextents(int fd, char *msg, Extents *es);
-void	showextentswithsize(int fd, char *msg, Extents *es);
+void	showextentslists(int fd, char *msg, Extents *es);
 s32	sizeofextents(Extents *es);
 s32	saveextents(Extents *es, s8 *buf, u32 nbuf);
 s32	loadextents(Extents *es, s8 *buf, u32 nbuf);
--- a/tests/extents/0/output
+++ b/tests/extents/0/output
@@ -1,16 +1,25 @@
-Extents testextents n 7 lowest 0x409238 lru 0x409298 nlru 7
-	1 13 13		e 0x409238		0x409358 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x4094d8
-	16399 22542 6144		e 0x409298		0x409238 lru 0x4094d8		0x409238 start 0x409358		0x409478 len      0x0
-	26639 28686 2048		e 0x409358		0x4093b8 lru 0x409238		0x409298 start 0x4093b8		0x4094d8 len 0x4093b8
-	30735 32782 2048		e 0x4093b8		0x409418 lru 0x409358		0x409358 start 0x409418		0x409358 len 0x409418
-	55311 57358 2048		e 0x409418		0x409478 lru 0x4093b8		0x4093b8 start 0x409478		0x4093b8 len 0x409478
-	59407 61454 2048		e 0x409478		0x4094d8 lru 0x409418		0x409418 start 0x4094d8		0x409418 len 0x409298
-	63503 65535 2033		e 0x4094d8		0x409298 lru 0x409478		0x409478 start      0x0		0x409238 len 0x409358
+Extents testextents n 7 lowest (1 13 13) lru (16399 22542 6144) nlru 7
+by blkno:
+1 13 13
+16399 22542 6144
+26639 28686 2048
+30735 32782 2048
+55311 57358 2048
+59407 61454 2048
+63503 65535 2033
 by size:
-	1 13 13		e 0x409238		0x409358 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x4094d8
-	63503 65535 2033		e 0x4094d8		0x409298 lru 0x409478		0x409478 start      0x0		0x409238 len 0x409358
-	26639 28686 2048		e 0x409358		0x4093b8 lru 0x409238		0x409298 start 0x4093b8		0x4094d8 len 0x4093b8
-	30735 32782 2048		e 0x4093b8		0x409418 lru 0x409358		0x409358 start 0x409418		0x409358 len 0x409418
-	55311 57358 2048		e 0x409418		0x409478 lru 0x4093b8		0x4093b8 start 0x409478		0x4093b8 len 0x409478
-	59407 61454 2048		e 0x409478		0x4094d8 lru 0x409418		0x409418 start 0x4094d8		0x409418 len 0x409298
-	16399 22542 6144		e 0x409298		0x409238 lru 0x4094d8		0x409238 start 0x409358		0x409478 len      0x0
+1 13 13
+63503 65535 2033
+26639 28686 2048
+30735 32782 2048
+55311 57358 2048
+59407 61454 2048
+16399 22542 6144
+lru:
+16399 22542 6144
+63503 65535 2033
+59407 61454 2048
+55311 57358 2048
+30735 32782 2048
+26639 28686 2048
+1 13 13
--- a/tests/extents/1/output
+++ b/tests/extents/1/output
@@ -1,18 +1,28 @@
-Extents testextents n 8 lowest 0x409238 lru 0x409238 nlru 8
-	0 13 14		e 0x409238		0x4092f8 lru 0x409358		     0x0 start 0x4092f8		     0x0 len 0x409598
-	6159 8206 2048		e 0x4092f8		0x409418 lru 0x409238		0x409238 start 0x409358		0x409598 len 0x409418
-	10255 18446 8192		e 0x409358		0x409238 lru 0x409598		0x4092f8 start 0x409418		0x409538 len      0x0
-	20495 22542 2048		e 0x409418		0x409478 lru 0x4092f8		0x409358 start 0x409478		0x4092f8 len 0x409478
-	24591 26638 2048		e 0x409478		0x4094d8 lru 0x409418		0x409418 start 0x4094d8		0x409418 len 0x4094d8
-	40975 43022 2048		e 0x4094d8		0x409538 lru 0x409478		0x409478 start 0x409538		0x409478 len 0x409538
-	59407 61454 2048		e 0x409538		0x409598 lru 0x4094d8		0x4094d8 start 0x409598		0x4094d8 len 0x409358
-	64649 65535 887		e 0x409598		0x409358 lru 0x409538		0x409538 start      0x0		0x409238 len 0x4092f8
+Extents testextents n 8 lowest (0 13 14) lru (0 13 14) nlru 8
+by blkno:
+0 13 14
+6159 8206 2048
+10255 18446 8192
+20495 22542 2048
+24591 26638 2048
+40975 43022 2048
+59407 61454 2048
+64649 65535 887
 by size:
-	0 13 14		e 0x409238		0x4092f8 lru 0x409358		     0x0 start 0x4092f8		     0x0 len 0x409598
-	64649 65535 887		e 0x409598		0x409358 lru 0x409538		0x409538 start      0x0		0x409238 len 0x4092f8
-	6159 8206 2048		e 0x4092f8		0x409418 lru 0x409238		0x409238 start 0x409358		0x409598 len 0x409418
-	20495 22542 2048		e 0x409418		0x409478 lru 0x4092f8		0x409358 start 0x409478		0x4092f8 len 0x409478
-	24591 26638 2048		e 0x409478		0x4094d8 lru 0x409418		0x409418 start 0x4094d8		0x409418 len 0x4094d8
-	40975 43022 2048		e 0x4094d8		0x409538 lru 0x409478		0x409478 start 0x409538		0x409478 len 0x409538
-	59407 61454 2048		e 0x409538		0x409598 lru 0x4094d8		0x4094d8 start 0x409598		0x4094d8 len 0x409358
-	10255 18446 8192		e 0x409358		0x409238 lru 0x409598		0x4092f8 start 0x409418		0x409538 len      0x0
+0 13 14
+64649 65535 887
+6159 8206 2048
+20495 22542 2048
+24591 26638 2048
+40975 43022 2048
+59407 61454 2048
+10255 18446 8192
+lru:
+0 13 14
+10255 18446 8192
+64649 65535 887
+59407 61454 2048
+40975 43022 2048
+24591 26638 2048
+20495 22542 2048
+6159 8206 2048
--- /dev/null
+++ b/tests/extents/2/input
@@ -1,0 +1,1103 @@
+0 8388608
+-1
+-1
+-20
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+25 1
+85 1
+119 1
+195 1
+-1
+144 1
+163 1
+296 1
+352 1
+103 1
+35 1
+66 1
+188 1
+58 1
+229 1
+98 1
+145 1
+48 1
+86 1
+100 1
+199 1
+74 1
+-1
+36 1
+106 1
+118 1
+146 1
+165 1
+202 1
+-1
+72 1
+354 1
+193 1
+60 1
+148 1
+167 1
+291 1
+51 1
+336 1
+37 1
+125 1
+93 1
+71 1
+149 1
+168 1
+316 1
+357 1
+-1
+61 1
+96 1
+338 1
+151 1
+270 1
+318 1
+298 1
+285 1
+254 1
+113 1
+214 1
+232 1
+244 1
+308 1
+83 1
+152 1
+55 1
+190 1
+269 1
+153 1
+112 1
+320 1
+75 1
+277 1
+117 1
+-1
+154 1
+280 1
+187 1
+263 1
+57 1
+97 1
+138 1
+108 1
+210 1
+213 1
+303 1
+207 1
+267 1
+94 1
+122 1
+218 1
+301 1
+40 1
+247 1
+345 1
+111 1
+253 1
+-1
+198 1
+255 1
+346 1
+178 1
+-1
+80 1
+272 1
+42 1
+292 1
+204 1
+179 1
+311 1
+43 1
+200 1
+348 1
+328 1
+44 1
+329 1
+45 1
+115 1
+181 1
+197 1
+-1
+126 1
+133 1
+143 1
+182 1
+351 1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+416 1
--- /dev/null
+++ b/tests/extents/2/output
@@ -1,0 +1,77 @@
+Extents testextents n 28 lowest (42 45 4) lru (416 416 1) nlru 243
+by blkno:
+42 45 4
+57 58 2
+60 61 2
+71 72 2
+74 75 2
+85 86 2
+93 94 2
+96 98 3
+111 113 3
+117 119 3
+125 126 2
+143 146 4
+148 149 2
+151 154 4
+167 168 2
+178 179 2
+181 182 2
+187 188 2
+197 200 4
+213 214 2
+253 255 3
+269 270 2
+291 292 2
+328 329 2
+345 346 2
+351 352 2
+416 416 1
+950 8388607 8387658
+by size:
+416 416 1
+57 58 2
+60 61 2
+71 72 2
+74 75 2
+85 86 2
+93 94 2
+125 126 2
+148 149 2
+167 168 2
+178 179 2
+181 182 2
+187 188 2
+213 214 2
+269 270 2
+291 292 2
+328 329 2
+345 346 2
+351 352 2
+96 98 3
+111 113 3
+117 119 3
+253 255 3
+42 45 4
+143 146 4
+151 154 4
+197 200 4
+950 8388607 8387658
+lru:
+416 416 1
+351 352 2
+181 182 2
+143 146 4
+125 126 2
+197 200 4
+42 45 4
+328 329 2
+178 179 2
+291 292 2
+345 346 2
+253 255 3
+111 113 3
+93 94 2
+213 214 2
+96 98 3
+57 58 2
--- /dev/null
+++ b/tests/extents/3/input
@@ -1,0 +1,1888 @@
+0 8388608
+-1
+-1
+-20
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+25 1
+1 1
+85 1
+119 1
+-1
+195 1
+235 1
+362 1
+144 1
+163 1
+-1
+296 1
+352 1
+416 1
+458 1
+103 1
+35 1
+66 1
+188 1
+58 1
+229 1
+98 1
+-1
+145 1
+164 1
+376 1
+48 1
+86 1
+474 1
+100 1
+492 1
+199 1
+74 1
+456 1
+114 1
+300 1
+36 1
+106 1
+450 1
+118 1
+-1
+531 1
+146 1
+165 1
+202 1
+135 1
+72 1
+354 1
+493 1
+532 1
+256 1
+193 1
+514 1
+60 1
+224 1
+148 1
+167 1
+291 1
+-1
+381 1
+51 1
+440 1
+336 1
+203 1
+37 1
+125 1
+93 1
+-1
+71 1
+149 1
+168 1
+316 1
+52 1
+516 1
+242 1
+357 1
+61 1
+465 1
+257 1
+53 1
+96 1
+517 1
+338 1
+533 1
+151 1
+270 1
+318 1
+-1
+423 1
+298 1
+442 1
+285 1
+-1
+433 1
+254 1
+339 1
+113 1
+453 1
+214 1
+232 1
+244 1
+308 1
+-1
+452 1
+83 1
+152 1
+171 1
+55 1
+92 1
+190 1
+269 1
+153 1
+172 1
+112 1
+320 1
+75 1
+400 1
+-1
+56 1
+277 1
+65 1
+117 1
+154 1
+208 1
+280 1
+187 1
+263 1
+501 1
+57 1
+97 1
+521 1
+138 1
+470 1
+368 1
+412 1
+-1
+47 1
+444 1
+-1
+131 1
+480 1
+108 1
+391 1
+486 1
+367 1
+210 1
+463 1
+479 1
+-1
+522 1
+213 1
+303 1
+427 1
+503 1
+207 1
+267 1
+94 1
+122 1
+102 1
+218 1
+246 1
+-1
+282 1
+301 1
+-1
+420 1
+487 1
+40 1
+247 1
+380 1
+345 1
+431 1
+524 1
+111 1
+158 1
+253 1
+401 1
+358 1
+198 1
+-1
+255 1
+346 1
+116 1
+178 1
+-1
+80 1
+326 1
+272 1
+360 1
+42 1
+126 1
+88 1
+292 1
+-1
+251 1
+204 1
+387 1
+179 1
+311 1
+327 1
+43 1
+221 1
+200 1
+348 1
+439 1
+266 1
+372 1
+328 1
+489 1
+464 1
+44 1
+-1
+399 1
+329 1
+411 1
+142 1
+45 1
+115 1
+181 1
+197 1
+-1
+177 1
+133 1
+370 1
+375 1
+162 1
+143 1
+182 1
+351 1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+530 1
+274 1
--- /dev/null
+++ b/tests/extents/3/output
@@ -1,0 +1,13 @@
+Extents testextents n 3 lowest (274 274 1) lru (274 274 1) nlru 3
+by blkno:
+274 274 1
+530 530 1
+1486 8388607 8387122
+by size:
+274 274 1
+530 530 1
+1486 8388607 8387122
+lru:
+274 274 1
+530 530 1
+1486 8388607 8387122
--- a/tests/extents/addabove/output
+++ b/tests/extents/addabove/output
@@ -1,6 +1,10 @@
-Extents testextents n 2 lowest 0x409238 lru 0x409298 nlru 2
-	20 22 3		e 0x409238		0x409298 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x409298
-	40 43 4		e 0x409298		0x409238 lru 0x409238		0x409238 start      0x0		0x409238 len      0x0
+Extents testextents n 2 lowest (20 22 3) lru (40 43 4) nlru 2
+by blkno:
+20 22 3
+40 43 4
 by size:
-	20 22 3		e 0x409238		0x409298 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x409298
-	40 43 4		e 0x409298		0x409238 lru 0x409238		0x409238 start      0x0		0x409238 len      0x0
+20 22 3
+40 43 4
+lru:
+40 43 4
+20 22 3
--- a/tests/extents/addabove1/output
+++ b/tests/extents/addabove1/output
@@ -1,6 +1,10 @@
-Extents testextents n 2 lowest 0x409238 lru 0x409298 nlru 2
-	180 183 4		e 0x409238		0x409298 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x409298
-	250 253 4		e 0x409298		0x409238 lru 0x409238		0x409238 start      0x0		0x409238 len      0x0
+Extents testextents n 2 lowest (180 183 4) lru (250 253 4) nlru 2
+by blkno:
+180 183 4
+250 253 4
 by size:
-	180 183 4		e 0x409238		0x409298 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x409298
-	250 253 4		e 0x409298		0x409238 lru 0x409238		0x409238 start      0x0		0x409238 len      0x0
+180 183 4
+250 253 4
+lru:
+250 253 4
+180 183 4
--- a/tests/extents/addbelow/output
+++ b/tests/extents/addbelow/output
@@ -1,6 +1,10 @@
-Extents testextents n 2 lowest 0x409298 lru 0x409298 nlru 2
-	180 183 4		e 0x409298		0x409238 lru 0x409238		     0x0 start 0x409238		     0x0 len 0x409238
-	250 253 4		e 0x409238		0x409298 lru 0x409298		0x409298 start      0x0		0x409298 len      0x0
+Extents testextents n 2 lowest (180 183 4) lru (180 183 4) nlru 2
+by blkno:
+180 183 4
+250 253 4
 by size:
-	180 183 4		e 0x409298		0x409238 lru 0x409238		     0x0 start 0x409238		     0x0 len 0x409238
-	250 253 4		e 0x409238		0x409298 lru 0x409298		0x409298 start      0x0		0x409298 len      0x0
+180 183 4
+250 253 4
+lru:
+180 183 4
+250 253 4
--- a/tests/extents/addbelow1/output
+++ b/tests/extents/addbelow1/output
@@ -1,8 +1,13 @@
-Extents testextents n 3 lowest 0x4092f8 lru 0x4092f8 nlru 3
-	100 100 1		e 0x4092f8		0x409238 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x409298
-	180 183 4		e 0x409298		0x4092f8 lru 0x409238		0x4092f8 start 0x409238		0x4092f8 len 0x409238
-	250 253 4		e 0x409238		0x409298 lru 0x4092f8		0x409298 start      0x0		0x409298 len      0x0
+Extents testextents n 3 lowest (100 100 1) lru (100 100 1) nlru 3
+by blkno:
+100 100 1
+180 183 4
+250 253 4
 by size:
-	100 100 1		e 0x4092f8		0x409238 lru 0x409298		     0x0 start 0x409298		     0x0 len 0x409298
-	180 183 4		e 0x409298		0x4092f8 lru 0x409238		0x4092f8 start 0x409238		0x4092f8 len 0x409238
-	250 253 4		e 0x409238		0x409298 lru 0x4092f8		0x409298 start      0x0		0x409298 len      0x0
+100 100 1
+180 183 4
+250 253 4
+lru:
+100 100 1
+180 183 4
+250 253 4
--- a/tests/extents/addbelow2/output
+++ b/tests/extents/addbelow2/output
@@ -1,8 +1,13 @@
-Extents testextents n 3 lowest 0x409238 lru 0x409238 nlru 3
-	0 17 18		e 0x409238		0x409358 lru 0x4093b8		     0x0 start 0x4093b8		0x409358 len      0x0
-	22 24 3		e 0x4093b8		0x409238 lru 0x409358		0x409238 start 0x409358		     0x0 len 0x409358
-	29 31 3		e 0x409358		0x4093b8 lru 0x409238		0x4093b8 start      0x0		0x4093b8 len 0x409238
+Extents testextents n 3 lowest (0 17 18) lru (0 17 18) nlru 3
+by blkno:
+0 17 18
+22 24 3
+29 31 3
 by size:
-	22 24 3		e 0x4093b8		0x409238 lru 0x409358		0x409238 start 0x409358		     0x0 len 0x409358
-	29 31 3		e 0x409358		0x4093b8 lru 0x409238		0x4093b8 start      0x0		0x4093b8 len 0x409238
-	0 17 18		e 0x409238		0x409358 lru 0x4093b8		     0x0 start 0x4093b8		0x409358 len      0x0
+22 24 3
+29 31 3
+0 17 18
+lru:
+0 17 18
+22 24 3
+29 31 3
--- a/tests/extents/mergeabove/output
+++ b/tests/extents/mergeabove/output
@@ -1,4 +1,7 @@
-Extents testextents n 1 lowest 0x409238 lru 0x409238 nlru 1
-	100 112 13		e 0x409238		0x409238 lru 0x409238		     0x0 start      0x0		     0x0 len      0x0
+Extents testextents n 1 lowest (100 112 13) lru (100 112 13) nlru 1
+by blkno:
+100 112 13
 by size:
-	100 112 13		e 0x409238		0x409238 lru 0x409238		     0x0 start      0x0		     0x0 len      0x0
+100 112 13
+lru:
+100 112 13
--- a/tests/extents/mergenext/output
+++ b/tests/extents/mergenext/output
@@ -1,4 +1,7 @@
-Extents testextents n 1 lowest 0x409238 lru 0x409238 nlru 1
-	101 108 8		e 0x409238		0x409238 lru 0x409238		     0x0 start      0x0		     0x0 len      0x0
+Extents testextents n 1 lowest (101 108 8) lru (101 108 8) nlru 1
+by blkno:
+101 108 8
 by size:
-	101 108 8		e 0x409238		0x409238 lru 0x409238		     0x0 start      0x0		     0x0 len      0x0
+101 108 8
+lru:
+101 108 8
--- a/tests/extents/mergeprevious/output
+++ b/tests/extents/mergeprevious/output
@@ -1,4 +1,7 @@
-Extents testextents n 1 lowest 0x409238 lru 0x409238 nlru 1
-	101 108 8		e 0x409238		0x409238 lru 0x409238		     0x0 start      0x0		     0x0 len      0x0
+Extents testextents n 1 lowest (101 108 8) lru (101 108 8) nlru 1
+by blkno:
+101 108 8
 by size:
-	101 108 8		e 0x409238		0x409238 lru 0x409238		     0x0 start      0x0		     0x0 len      0x0
+101 108 8
+lru:
+101 108 8
--- a/tests/test.a/action.rc
+++ b/tests/test.a/action.rc
@@ -6,6 +6,6 @@
 ls -ltr test.a/big.file /n/^$service^/big.file
 diff test.a/big.file /n/^$service^/big.file # > /mnt/term/tmp/test.out
 # tail /mnt/term/tmp/test.out
-rm /n/^$service^/big.file
+# rm /n/^$service^/big.file
 
 cat /n/^$service^/adm/ctl
--- a/tests/testextents.c
+++ b/tests/testextents.c
@@ -25,6 +25,7 @@
 	s8 *line, *p;
 	Biobuf *bp;
 	u64 bno, len;
+	char act;
 
 	ARGBEGIN{
 	default:	usage();
@@ -39,14 +40,20 @@
 
 	initextents(&es, "testextents", nil);
 	while((line = Brdstr(bp, '\n', 1)) != nil) {
-		bno = strtoull(line, &p, 10);
-		p++;	/* for the space */
-		len = strtoull(p, nil, 10);
-		bfree(&es, bno, len);
+		act = line[0];
+		if(act == '-'){
+			len = strtoull(line+1, nil, 10);
+			balloc(&es, len);
+		}else{
+			bno = strtoull(line, &p, 10);
+			p++;	/* for the space */
+			len = strtoull(p, nil, 10);
+			bfree(&es, bno, len);
+		}
 		free(line);
 	}
 
-	showextentswithsize(1, "", &es);
+	showextentslists(1, "", &es);
 
 	/* why bother? just exits(nil) as cinap suggests */
 	Bterm(bp);