code: plan9front

Download patch

ref: 45b5336f887b69365f90aae42cd0c66542d1a8e9
parent: 33b0e1bb8137ceb835e9cae939171ea27d02e1d6
author: Ori Bernstein <ori@eigenstate.org>
date: Mon May 27 00:17:29 EDT 2024

gefs: add command to show free ranges on console

--- a/sys/src/cmd/gefs/cons.c
+++ b/sys/src/cmd/gefs/cons.c
@@ -338,6 +338,24 @@
 }
 
 static void
+showfree(int fd, char **, int)
+{
+	Arange *r;
+	Arena *a;
+	int i;
+
+	for(i = 0; i < fs->narena; i++){
+		a = &fs->arenas[i];
+		qlock(a);
+		fprint(fd, "arena %d %llx+%llx{\n", i, a->h0->bp.addr, a->size);
+		for(r = (Arange*)avlmin(a->free); r != nil; r = (Arange*)avlnext(r))
+			fprint(fd, "\t%llx..%llx (%llx)\n", r->off, r->off+r->len, r->len);
+		fprint(fd, "}\n");
+		qunlock(a);
+	}
+}
+
+static void
 unreserve(int fd, char **ap, int)
 {
 	if(strcmp(ap[0], "on") == 0)
@@ -387,6 +405,7 @@
 	{.name="show",		.sub="tree",	.minarg=0, .maxarg=1, .fn=showtree},
 	{.name="show",		.sub="users",	.minarg=0, .maxarg=0, .fn=showusers},
 	{.name="show",		.sub="bstate",	.minarg=0, .maxarg=0, .fn=showbstate},
+	{.name="show",		.sub="free",	.minarg=0, .maxarg=0, .fn=showfree},
 	{.name="debug",		.sub=nil,	.minarg=0, .maxarg=1, .fn=setdbg},
 	{.name="save",		.sub="trace",	.minarg=0, .maxarg=1, .fn=savetrace},
 	{.name=nil, .sub=nil},