code: mafs

Download patch

ref: 0a2bc153ff335f97546a6e4ea7d0c6de74f40776
parent: 4671a19b2f46d007ef991cdd3d2190096eb326f7
author: 9ferno <gophone2015@gmail.com>
date: Fri Dec 2 15:20:34 EST 2022

streamlining the recovery process after a crash

--- a/docs/mafs.ms
+++ b/docs/mafs.ms
@@ -1230,9 +1230,9 @@
 Find the total number of blocks on a disk.
 .sp
 .nf
-	dd -if /dev/sdF1/fs -bs 512 -iseek 1 -count 1 -quiet 1 | awk '$1 == "nblocks" { print $2 }'
+	dd -if /dev/sdF1/fs -bs 512 -iseek 2 -count 1 -quiet 1 | awk '$1 == "nblocks" { print $2 }'
 
-	disk/block /dev/sdF1/fs 1 | awk '$1 == "nblocks" { print $2 }'
+	disk/block /dev/sdF1/fs 2 | awk '$1 == "nblocks" { print $2 }'
 .fi
 .sp
 .ne 5
@@ -1239,8 +1239,8 @@
 Build the list of free blocks. This should match the contents of /adm/frees.
 .sp
 .nf
-	disk/unused <{disk/used /dev/sdF1/fs} 11721040049 # 11721040049 = total number of disk blocks
-	disk/unused <{disk/used test.0/disk} 32 # 32 = total number of disk blocks
+	disk/unused 11721040049 <{disk/used /dev/sdF1/fs} # 11721040049 = total number of disk blocks
+	disk/unused 32 <{disk/used test.0/disk} # 32 = total number of disk blocks
 .fi
 .sp
 .ne 5
@@ -1247,8 +1247,8 @@
 Change the contents of /adm/frees.
 .sp
 .nf
-	disk/updatefrees tests/test.0/disk <{disk/unused <{disk/used tests/test.0/disk} 32}
-	disk/updatefrees /dev/sdF1/fs <{disk/unused <{disk/used /dev/sdF1/fs} 11721040049}
+	disk/updatefrees tests/test.0/disk <{disk/unused 32 <{disk/used tests/test.0/disk}}
+	disk/updatefrees /dev/sdF1/fs <{disk/unused 11721040049 <{disk/used /dev/sdF1/fs}}
 .fi
 .sp
 .ne 5
@@ -1255,7 +1255,16 @@
 A sanity check that the file system is not corrupt by comparing that the unused blocks and free blocks match up. $nblocks is the total number of disk blocks. $disk is the disk.
 .sp
 .nf
-	diff <{disk/unused -l <{disk/used tests/test.0/disk} 32}} <{disk/free tests/test.0/disk}
+	diff <{disk/unused -l 32 <{disk/used tests/test.0/disk}}} <{disk/free tests/test.0/disk}
+.fi
+.sp
+.ne 5
+Check and correct a crashed filesystem.
+.sp
+.nf
+	nblocks=`{disk/block /dev/sdF1/fs 2 | awk '$1 == "nblocks"{ print $2 }'}
+	disk/updatefrees /dev/sdF1/fs <{disk/unused $nblocks <{disk/used /dev/sdF1/fs}
+	disk/fsok /dev/sdF1/fs
 .fi
 \".sp
 \"Changing the service name without a ream.
--- /dev/null
+++ b/fsok.c
@@ -1,0 +1,60 @@
+#include <u.h>
+#include <libc.h>
+#include "dat.h"
+#include "fns.h"
+
+/*
+	do Super.fsok = 1
+	disk/fsok fsfile
+ */
+
+int debug = 0;
+char *devfile = nil, *freesfile = nil;
+
+static void
+usage(void)
+{
+	fprint(2, "usage: fsok [-D] fsfile\n");
+	exits("usage");
+}
+
+void
+main(int argc, char *argv[])
+{
+	u64 size;
+	s8 buf[Metadatablocksize];
+	Dentry *d;
+
+	ARGBEGIN{
+	default:	usage();
+	case 'D':	debug++; break;
+	}ARGEND
+
+	if(argc != 1)
+		usage();
+
+	devfile = argv[0];
+	if(devfile == nil)
+		sysfatal("no disk file");
+
+	if (access(devfile, AREAD|AWRITE) == -1)
+		sysfatal("%s cannot access device", devfile);
+
+	size = devinit(devfile);
+	if(size == 0)
+		panic("null size %s", devfile);
+
+	devread(Bdsuper, buf, Metadataunits);
+	// showblock(1, buf);
+	recentmetadata(buf, &d, nil);
+
+	if(d->fsok)
+		fprint(2, "fsok: %s fsok %llud != 0\n", devfile, d->fsok);
+	else{
+		d->fsok = 1;
+		d->mtime = nsec();
+		devwrite(Bdsuper, buf, Metadataunits);
+	}
+	close(devfd);
+	exits(0);
+}
--- a/mkfile
+++ b/mkfile
@@ -1,6 +1,6 @@
 </$objtype/mkfile
 
-TARG=mafs used reconcile block find free unused updatefrees # mfs
+TARG=mafs used reconcile block find free unused updatefrees fsok # mfs
 
 OFILES=\
 	9p.$O\
@@ -34,6 +34,9 @@
 
 </sys/src/cmd/mkmany
 # LDFLAGS=-p
+
+$O.fsok:	blk.$O dat.$O dev.$O misc.$O tag.$O fsok.$O
+	$LD $LDFLAGS -o $target $prereq
 
 $O.updatefrees:	blk.$O dat.$O dev.$O misc.$O tag.$O updatefrees.$O
 	$LD $LDFLAGS -o $target $prereq
--- a/tests/check.rc
+++ b/tests/check.rc
@@ -31,5 +31,5 @@
 echo reconcile $disk $nblocks
 disk/reconcile -u <{disk/used $disk} -F <{disk/free $disk} $nblocks
 
-diff <{disk/unused <{disk/used $disk} $nblocks} \
+diff <{disk/unused $nblocks <{disk/used $disk}} \
 	 <{disk/free $disk} || echo unused and free do not match up
--- a/tests/test.0/blocks/14
+++ b/tests/test.0/blocks/14
@@ -1,13 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 9
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669266782968974477
+mtime 1670008664059460719
 path 14
 version 0
 mode 444
-22 25 4
--- a/tests/test.0/blocks/15
+++ b/tests/test.0/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 9
+size 8
 pdblkno 6
 pqpath 6
-mtime 1669266782968974477
+mtime 1670008664059856827
 path 14
 version 0
 mode 444
--- a/tests/test.0/blocks/4
+++ b/tests/test.0/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669266781839844790
+mtime 1670008662930114801
 path 4
 version 0
 mode 444
--- a/tests/test.0/blocks/5
+++ b/tests/test.0/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669266781839844790
+mtime 1670008662930114801
 path 4
 version 0
 mode 444
--- a/tests/test.1/blocks/14
+++ b/tests/test.1/blocks/14
@@ -1,12 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669260494838816085
+mtime 1670008681951018721
 path 14
 version 0
 mode 444
--- a/tests/test.1/blocks/15
+++ b/tests/test.1/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669260494838816085
+mtime 1670008681951252665
 path 14
 version 0
 mode 444
--- a/tests/test.1/blocks/4
+++ b/tests/test.1/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260493689548915
+mtime 1670008680799949060
 path 4
 version 0
 mode 444
--- a/tests/test.1/blocks/5
+++ b/tests/test.1/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260493689548915
+mtime 1670008680799949060
 path 4
 version 0
 mode 444
--- a/tests/test.2/blocks/14
+++ b/tests/test.2/blocks/14
@@ -1,13 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 10
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669260591462739301
+mtime 1670008687664901315
 path 14
 version 0
 mode 444
-24 41 18
--- a/tests/test.2/blocks/15
+++ b/tests/test.2/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 10
+size 9
 pdblkno 6
 pqpath 6
-mtime 1669260591462739301
+mtime 1670008687665148772
 path 14
 version 0
 mode 444
--- a/tests/test.2/blocks/4
+++ b/tests/test.2/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260590166214698
+mtime 1670008686344249396
 path 4
 version 0
 mode 444
--- a/tests/test.2/blocks/5
+++ b/tests/test.2/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260590166214698
+mtime 1670008686344249396
 path 4
 version 0
 mode 444
--- /dev/null
+++ b/tests/test.3/blocks/14
@@ -1,0 +1,12 @@
+Tdentry 14 2
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670008722643155240
+path 14
+version 0
+mode 444
--- /dev/null
+++ b/tests/test.3/blocks/15
@@ -1,0 +1,13 @@
+Tdentry 14 3
+name frees
+uid -1
+gid -1
+muid -1
+size 15
+pdblkno 6
+pqpath 6
+mtime 1670008722643427274
+path 14
+version 0
+mode 444
+24 40953 40930
--- a/tests/test.3/blocks/4
+++ b/tests/test.3/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260676578886629
+mtime 1670008717603682736
 path 4
 version 0
 mode 444
--- a/tests/test.3/blocks/5
+++ b/tests/test.3/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260676578886629
+mtime 1670008717603682736
 path 4
 version 0
 mode 444
--- /dev/null
+++ b/tests/test.4/blocks/14
@@ -1,0 +1,12 @@
+Tdentry 14 2
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670008727487619615
+path 14
+version 0
+mode 444
--- /dev/null
+++ b/tests/test.4/blocks/15
@@ -1,0 +1,13 @@
+Tdentry 14 3
+name frees
+uid -1
+gid -1
+muid -1
+size 9
+pdblkno 6
+pqpath 6
+mtime 1670008727487897160
+path 14
+version 0
+mode 444
+32 57 26
--- /dev/null
+++ b/tests/test.4/blocks/4
@@ -1,0 +1,14 @@
+Tdentry 4 9
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670008726307650582
+path 4
+version 0
+mode 444
+qidgen 69
+fsok 0
--- /dev/null
+++ b/tests/test.4/blocks/5
@@ -1,0 +1,14 @@
+Tdentry 4 10
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670008726307650582
+path 4
+version 0
+mode 444
+qidgen 69
+fsok 1
--- /dev/null
+++ b/tests/test.5/blocks/14
@@ -1,0 +1,12 @@
+Tdentry 14 2
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670008738271038609
+path 14
+version 0
+mode 444
--- /dev/null
+++ b/tests/test.5/blocks/15
@@ -1,0 +1,13 @@
+Tdentry 14 3
+name frees
+uid -1
+gid -1
+muid -1
+size 15
+pdblkno 6
+pqpath 6
+mtime 1670008738271344073
+path 14
+version 0
+mode 444
+5434 9993 4560
--- /dev/null
+++ b/tests/test.5/blocks/4
@@ -1,0 +1,14 @@
+Tdentry 4 7
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670008736927423369
+path 4
+version 0
+mode 444
+qidgen 66
+fsok 1
--- /dev/null
+++ b/tests/test.5/blocks/5
@@ -1,0 +1,14 @@
+Tdentry 4 6
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670008736927423369
+path 4
+version 0
+mode 444
+qidgen 66
+fsok 0
--- a/tests/test.6/blocks/14
+++ b/tests/test.6/blocks/14
@@ -1,12 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669260831377850683
+mtime 1670008745661281171
 path 14
 version 0
 mode 444
--- a/tests/test.6/blocks/15
+++ b/tests/test.6/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669260831377850683
+mtime 1670008745661500420
 path 14
 version 0
 mode 444
--- a/tests/test.6/blocks/4
+++ b/tests/test.6/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260829228461718
+mtime 1670008743505826948
 path 4
 version 0
 mode 444
--- a/tests/test.6/blocks/5
+++ b/tests/test.6/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669260829228461718
+mtime 1670008743505826948
 path 4
 version 0
 mode 444
--- /dev/null
+++ b/tests/test.7/blocks/14
@@ -1,0 +1,12 @@
+Tdentry 14 2
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670008842829094738
+path 14
+version 0
+mode 444
--- /dev/null
+++ b/tests/test.7/blocks/15
@@ -1,0 +1,13 @@
+Tdentry 14 3
+name frees
+uid -1
+gid -1
+muid -1
+size 20
+pdblkno 6
+pqpath 6
+mtime 1670008842829368405
+path 14
+version 0
+mode 444
+48223 163833 115611
--- /dev/null
+++ b/tests/test.7/blocks/4
@@ -1,0 +1,14 @@
+Tdentry 4 7
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670008838567924755
+path 4
+version 0
+mode 444
+qidgen 67
+fsok 0
--- /dev/null
+++ b/tests/test.7/blocks/5
@@ -1,0 +1,14 @@
+Tdentry 4 8
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670008838567924755
+path 4
+version 0
+mode 444
+qidgen 67
+fsok 1
--- a/tests/test.8/blocks/14
+++ b/tests/test.8/blocks/14
@@ -1,12 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669308925316454025
+mtime 1670008887600477443
 path 14
 version 0
 mode 444
--- a/tests/test.8/blocks/15
+++ b/tests/test.8/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669308925316454025
+mtime 1670008887600800598
 path 14
 version 0
 mode 444
--- a/tests/test.8/blocks/4
+++ b/tests/test.8/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669308924185162962
+mtime 1670008886470441051
 path 4
 version 0
 mode 444
--- a/tests/test.8/blocks/5
+++ b/tests/test.8/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669308924185162962
+mtime 1670008886470441051
 path 4
 version 0
 mode 444
--- a/tests/test.9/blocks/14
+++ b/tests/test.9/blocks/14
@@ -1,13 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 20
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669915444179031863
+mtime 1670008973422513478
 path 14
 version 0
 mode 444
-55259 131065 75807
--- a/tests/test.9/blocks/15
+++ b/tests/test.9/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 20
+size 19
 pdblkno 6
 pqpath 6
-mtime 1669915444179031863
+mtime 1670008973422762006
 path 14
 version 0
 mode 444
--- a/tests/test.9/blocks/4
+++ b/tests/test.9/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669339401162547192
+mtime 1670008970514353437
 path 4
 version 0
 mode 444
--- a/tests/test.9/blocks/5
+++ b/tests/test.9/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669339401162547192
+mtime 1670008970514353437
 path 4
 version 0
 mode 444
--- /dev/null
+++ b/tests/test.a/blocks/14
@@ -1,0 +1,12 @@
+Tdentry 14 2
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670009903056438056
+path 14
+version 0
+mode 444
--- /dev/null
+++ b/tests/test.a/blocks/15
@@ -1,0 +1,13 @@
+Tdentry 14 3
+name frees
+uid -1
+gid -1
+muid -1
+size 17
+pdblkno 6
+pqpath 6
+mtime 1670009903056710705
+path 14
+version 0
+mode 444
+24 239993 239970
--- /dev/null
+++ b/tests/test.a/blocks/4
@@ -1,0 +1,14 @@
+Tdentry 4 5
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670009432882214979
+path 4
+version 0
+mode 444
+qidgen 65
+fsok 0
--- /dev/null
+++ b/tests/test.a/blocks/5
@@ -1,0 +1,14 @@
+Tdentry 4 6
+name super
+uid -1
+gid -1
+muid -1
+size 16
+pdblkno 6
+pqpath 6
+mtime 1670009432882214979
+path 4
+version 0
+mode 444
+qidgen 65
+fsok 1
--- /dev/null
+++ b/tests/test.b/blocks/14
@@ -1,0 +1,12 @@
+Tdentry 14 2
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670009907755394973
+path 14
+version 0
+mode 444
--- /dev/null
+++ b/tests/test.b/blocks/15
@@ -1,0 +1,12 @@
+Tdentry 14 3
+name frees
+uid -1
+gid -1
+muid -1
+size 0
+pdblkno 6
+pqpath 6
+mtime 1670009907755691693
+path 14
+version 0
+mode 444
--- a/tests/test.b/blocks/4
+++ b/tests/test.b/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669271948706262551
+mtime 1670009906599643058
 path 4
 version 0
 mode 444
--- a/tests/test.b/blocks/5
+++ b/tests/test.b/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669271948706262551
+mtime 1670009906599643058
 path 4
 version 0
 mode 444
--- a/tests/test.d/blocks/14
+++ b/tests/test.d/blocks/14
@@ -1,12 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669307059197302332
+mtime 1670009913043098798
 path 14
 version 0
 mode 444
--- a/tests/test.d/blocks/15
+++ b/tests/test.d/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669307059197302332
+mtime 1670009913043349146
 path 14
 version 0
 mode 444
--- a/tests/test.d/blocks/4
+++ b/tests/test.d/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669307058020360539
+mtime 1670009911871179873
 path 4
 version 0
 mode 444
--- a/tests/test.d/blocks/5
+++ b/tests/test.d/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669307058020360539
+mtime 1670009911871179873
 path 4
 version 0
 mode 444
--- a/tests/test.e/blocks/14
+++ b/tests/test.e/blocks/14
@@ -1,12 +1,12 @@
-Tdentry 14 4
+Tdentry 14 2
 name frees
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669308212473004071
+mtime 1670009918329825490
 path 14
 version 0
 mode 444
--- a/tests/test.e/blocks/15
+++ b/tests/test.e/blocks/15
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 1
+size 0
 pdblkno 6
 pqpath 6
-mtime 1669308212473004071
+mtime 1670009918330104800
 path 14
 version 0
 mode 444
--- a/tests/test.e/blocks/4
+++ b/tests/test.e/blocks/4
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669308211304908901
+mtime 1670009917145115806
 path 4
 version 0
 mode 444
--- a/tests/test.e/blocks/5
+++ b/tests/test.e/blocks/5
@@ -3,10 +3,10 @@
 uid -1
 gid -1
 muid -1
-size 18
+size 16
 pdblkno 6
 pqpath 6
-mtime 1669308211304908901
+mtime 1670009917145115806
 path 4
 version 0
 mode 444
--- a/tests/test.f/blocks/14
+++ b/tests/test.f/blocks/14
@@ -6,7 +6,7 @@
 size 8
 pdblkno 6
 pqpath 6
-mtime 1670008436782391613
+mtime 1670009933383849710
 path 14
 version 0
 mode 444
--- a/tests/test.f/blocks/15
+++ b/tests/test.f/blocks/15
@@ -6,7 +6,7 @@
 size 0
 pdblkno 6
 pqpath 6
-mtime 1670008436780964127
+mtime 1670009933383458278
 path 14
 version 0
 mode 444
--- a/tests/test.f/blocks/4
+++ b/tests/test.f/blocks/4
@@ -6,7 +6,7 @@
 size 16
 pdblkno 6
 pqpath 6
-mtime 1670008426769907217
+mtime 1670009923372524820
 path 4
 version 0
 mode 444
--- a/tests/test.f/blocks/5
+++ b/tests/test.f/blocks/5
@@ -6,7 +6,7 @@
 size 16
 pdblkno 6
 pqpath 6
-mtime 1670008426769907217
+mtime 1670009923372524820
 path 4
 version 0
 mode 444
--- a/unused.c
+++ b/unused.c
@@ -8,7 +8,7 @@
 	indentify block numbers that are not used.
 	These blocks can be used to update /adm/frees as they are free to use.
 
-	watch -e '6\.unused' 'date; ./6.unused -D <{seq 1 1 3; seq 5 1 6} 7 '
+	watch -e '6\.unused' 'date; ./6.unused -D 7 <{seq 1 1 3; seq 5 1 6} '
 
 	disk/unused -D <{seq 1 1 3; seq 5 1 6} 7
 collect used +1 +2 +3 +5 +6
@@ -18,17 +18,18 @@
 show unused
 	3 .. 5
 
-	disk/unused `{disk/used /dev/sdF1/fs} \
-	`{dd -if /dev/sdF1/fs -bs 512 -iseek 1 -count 1 -quiet 1 | awk '$1 == "nblocks" { print $2 }'}
+	disk/unused \
+	`{dd -if /dev/sdF1/fs -bs 512 -iseek 1 -count 1 -quiet 1 | awk '$1 == "nblocks" { print $2 }'} \
+	<`{disk/used /dev/sdF1/fs}
 
 	# this crashes the rc window, too much memory?
-	disk/unused `{disk/used /dev/sdF1/fs} 11721040049
+	disk/unused 11721040049 `{disk/used /dev/sdF1/fs}
 
 	disk/used /dev/sdF1/fs > /mnt/term/tmp/used.blocks
 	sort -n /mnt/term/tmp/used.blocks -o /mnt/term/tmp/used.blocks.sorted
-	disk/unused /mnt/term/tmp/used.blocks.sorted 11721040049
+	disk/unused 11721040049 /mnt/term/tmp/used.blocks.sorted
 
-	diff <{ disk/unused -l <{disk/used tests/test.0/disk} 32} <{ disk/free tests/test.0/disk }
+	diff <{ disk/unused -l 32 <{disk/used tests/test.0/disk}} <{ disk/free tests/test.0/disk }
  */
 
 enum {
@@ -60,7 +61,7 @@
 static void
 usage(void)
 {
-	fprint(2, "usage: unused -l [-D ] list_of_used_blocks_file nblocks\n");
+	fprint(2, "usage: unused -l [-D ] nblocks list_of_used_blocks_file\n");
 	exits("usage");
 }
 
@@ -81,8 +82,8 @@
 	if(argc != 2)
 		usage();
 
-	u.file = estrdup(argv[0]);
-	nblocks = atoll(argv[1]);
+	nblocks = atoll(argv[0]);
+	u.file = estrdup(argv[1]);
 
 	if(u.file == nil)
 		sysfatal("no used file");