git: 9front

Download patch

ref: 2e880e7369a4b19a1348e18235d4245507844743
parent: 19814f66a3529608a0c8a75d01ce89a614e41548
author: aiju <devnull@localhost>
date: Wed Oct 3 13:45:58 EDT 2012

hjfs debug commands

--- a/sys/src/cmd/hjfs/cons.c
+++ b/sys/src/cmd/hjfs/cons.c
@@ -196,6 +196,86 @@
 	return 1;
 }
 
+int
+cmddebugdeind(int, char **argv)
+{
+	Chan *ch;
+	Buf *b;
+	Dentry *d;
+
+	ch = chanattach(fsmain, 0);
+	if(ch == nil)
+		return -1;
+	ch->uid = -1;
+	if(walkpath(ch, argv[1], nil) < 0)
+		goto error;
+	rlock(fsmain);
+	dprint("hjfs: loc %ulld / %uld, offset %ulld\n", ch->loc->blk, ch->loc->deind, BLOCK * ch->loc->blk + (RBLOCK - BLOCK) + DENTRYSIZ * ch->loc->deind);
+	b = getbuf(fsmain->d, ch->loc->blk, TDENTRY, 0);
+	if(b == nil){
+		runlock(fsmain);
+		goto error;
+	}
+	d = &b->de[ch->loc->deind];
+	dprint("hjfs: name %s\n", d->name);
+	dprint("hjfs: uid %d, muid %d, gid %d\n", d->uid, d->muid, d->gid);
+	dprint("hjfs: mode %#o, qid %ulld, type %#x, version %d\n", d->mode, d->path, d->type, d->vers);
+	dprint("hjfs: size %d\n", d->size);
+	dprint("hjfs: atime %ulld, mtime %ulld\n", d->atime, d->mtime);
+	putbuf(b);
+	runlock(fsmain);
+	chanclunk(ch);
+	return 0;
+error:
+	chanclunk(ch);
+	return -1;
+}
+
+int
+cmddebuggetblk(int argc, char **argv)
+{
+	Chan *ch;
+	Buf *b;
+	int rc;
+	uvlong r, start, end, i;
+
+	if(argc != 3 || argc != 4)
+		return -9001;
+	start = atoll(argv[3]);
+	if(argc == 4)
+		end = atoll(argv[4]);
+	else
+		end = start;
+	ch = chanattach(fsmain, 0);
+	if(ch == nil)
+		return -1;
+	ch->uid = -1;
+	if(walkpath(ch, argv[1], nil) < 0)
+		goto error;
+	rlock(fsmain);
+	b = getbuf(fsmain->d, ch->loc->blk, TDENTRY, 0);
+	if(b == nil){
+		runlock(fsmain);
+		goto error;
+	}
+	for(i = start; i <= end; i++){
+		rc = getblk(fsmain, ch->loc, b, i, &r, GBREAD);
+		if(rc > 0)
+			dprint("hjfs: getblk %ulld = %ulld\n", i, r);
+		if(rc == 0)
+			dprint("hjfs: getblk %ulld not found\n", i);
+		if(rc < 0)
+			dprint("hjfs: getblk %ulld: %r\n", i);
+	}
+	putbuf(b);
+	runlock(fsmain);
+	chanclunk(ch);
+	return 0;
+error:
+	chanclunk(ch);
+	return -1;
+}
+
 extern int cmdnewuser(int, char **);
 
 Cmd cmds[] = {
@@ -209,6 +289,8 @@
 	{"newuser", 0, cmdnewuser},
 	{"echo", 2, cmdecho},
 	{"df", 1, cmddf},
+	{"debug-deind", 2, cmddebugdeind},
+	{"debug-getblk", 0, cmddebuggetblk},
 };
 
 
--