1--- a/user/btree.c Wed Dec 03 12:59:43 2008 +0900
2+++ b/user/btree.c Tue Dec 02 23:12:28 2008 -0800
3@@ -33,28 +33,28 @@ static inline struct uleaf *to_uleaf(vle
4 return leaf;
5 }
6
7-int uleaf_sniff(BTREE, vleaf *leaf)
8+int uleaf_sniff(struct btree *btree, vleaf *leaf)
9 {
10 return to_uleaf(leaf)->magic == 0xc0de;
11 }
12
13-int uleaf_init(BTREE, vleaf *leaf)
14+int uleaf_init(struct btree *btree, vleaf *leaf)
15 {
16 *to_uleaf(leaf) = (struct uleaf){ .magic = 0xc0de };
17 return 0;
18 }
19
20-unsigned uleaf_need(BTREE, vleaf *leaf)
21+unsigned uleaf_need(struct btree *btree, vleaf *leaf)
22 {
23 return to_uleaf(leaf)->count;
24 }
25
26-unsigned uleaf_free(BTREE, vleaf *leaf)
27+unsigned uleaf_free(struct btree *btree, vleaf *leaf)
28 {
29 return btree->entries_per_leaf - to_uleaf(leaf)->count;
30 }
31
32-void uleaf_dump(BTREE, vleaf *data)
33+void uleaf_dump(struct btree *btree, vleaf *data)
34 {
35 struct uleaf *leaf = data;
36 printf("leaf %p/%i", leaf, leaf->count);
37@@ -64,7 +64,7 @@ void uleaf_dump(BTREE, vleaf *data)
38 printf(" (%x free)\n", uleaf_free(btree, leaf));
39 }
40
41-tuxkey_t uleaf_split(BTREE, tuxkey_t key, vleaf *from, vleaf *into)
42+tuxkey_t uleaf_split(struct btree *btree, tuxkey_t key, vleaf *from, vleaf *into)
43 {
44 assert(uleaf_sniff(btree, from));
45 struct uleaf *leaf = from;
46@@ -79,7 +79,7 @@ tuxkey_t uleaf_split(BTREE, tuxkey_t key
47 return at < leaf->count ? to_uleaf(into)->entries[0].key : key;
48 }
49
50-unsigned uleaf_seek(BTREE, tuxkey_t key, struct uleaf *leaf)
51+unsigned uleaf_seek(struct btree *btree, tuxkey_t key, struct uleaf *leaf)
52 {
53 unsigned at = 0;
54 while (at < leaf->count && leaf->entries[at].key < key)
55@@ -87,7 +87,7 @@ unsigned uleaf_seek(BTREE, tuxkey_t key,
56 return at;
57 }
58
59-int uleaf_chop(BTREE, tuxkey_t key, vleaf *vleaf)
60+int uleaf_chop(struct btree *btree, tuxkey_t key, vleaf *vleaf)
61 {
62 struct uleaf *leaf = vleaf;
63 unsigned at = uleaf_seek(btree, key, leaf);
64@@ -95,7 +95,7 @@ int uleaf_chop(BTREE, tuxkey_t key, vlea
65 return 1;
66 }
67
68-void *uleaf_resize(BTREE, tuxkey_t key, vleaf *data, unsigned one)
69+void *uleaf_resize(struct btree *btree, tuxkey_t key, vleaf *data, unsigned one)
70 {
71 assert(uleaf_sniff(btree, data));
72 struct uleaf *leaf = data;
73@@ -107,7 +107,7 @@ void *uleaf_resize(BTREE, tuxkey_t key,
74 return leaf->entries + at;
75 }
76
77-void uleaf_merge(BTREE, vleaf *into, vleaf *from)
78+void uleaf_merge(struct btree *btree, vleaf *into, vleaf *from)
79 {
80 }
81
82@@ -124,13 +124,13 @@ struct btree_ops ops = {
83 .balloc = balloc,
84 };
85
86-block_t balloc(SB)
87+block_t balloc(struct sb *sb)
88 {
89 printf("-> %Lx\n", (L)sb->nextalloc);
90 return sb->nextalloc++;
91 }
92
93-int uleaf_insert(BTREE, struct uleaf *leaf, unsigned key, unsigned val)
94+int uleaf_insert(struct btree *btree, struct uleaf *leaf, unsigned key, unsigned val)
95 {
96 printf("insert 0x%x -> 0x%x\n", key, val);
97 struct uentry *entry = uleaf_resize(btree, key, leaf, 1);
98@@ -145,7 +145,7 @@ int main(int argc, char *argv[])
99 {
100 struct dev *dev = &(struct dev){ .bits = 6 };
101 map_t *map = new_map(dev, NULL);
102- SB = &(struct sb){ .devmap = map, .blocksize = 1 << dev->bits };
103+ struct sb *sb = &(struct sb){ .devmap = map, .blocksize = 1 << dev->bits };
104 map->inode = &(struct inode){ .i_sb = sb, .map = map };
105 init_buffers(dev, 1 << 20);
106 sb->entries_per_node = (sb->blocksize - offsetof(struct bnode, entries)) / sizeof(struct index_entry);
1.1--- a/user/dleaf.c Wed Dec 03 12:59:43 2008 +0900
1.2+++ b/user/dleaf.c Tue Dec 02 23:12:28 2008 -0800
1.3@@ -23,30 +23,30 @@
1.4 #include "kernel/dleaf.c"
1.5
1.6 #ifndef main
1.7-block_t balloc(SB)
1.8+block_t balloc(struct sb *sb)
1.9 {
1.10 return sb->nextalloc++;
1.11 }
1.12
1.13-void bfree(SB, block_t block)
1.14+void bfree(struct sb *sb, block_t block)
1.15 {
1.16 printf(" free %Lx\n", (L)block);
1.17 }
1.18
1.19-struct dleaf *dleaf_create(BTREE)
1.20+struct dleaf *dleaf_create(struct btree *btree)
1.21 {
1.22 struct dleaf *leaf = malloc(btree->sb->blocksize);
1.23 dleaf_init(btree, leaf);
1.24 return leaf;
1.25 }
1.26
1.27-void dleaf_destroy(BTREE, struct dleaf *leaf)
1.28+void dleaf_destroy(struct btree *btree, struct dleaf *leaf)
1.29 {
1.30 assert(dleaf_sniff(btree, leaf));
1.31 free(leaf);
1.32 }
1.33
1.34-void *dleaf_lookup(BTREE, struct dleaf *leaf, tuxkey_t index, unsigned *count)
1.35+void *dleaf_lookup(struct btree *btree, struct dleaf *leaf, tuxkey_t index, unsigned *count)
1.36 {
1.37 struct group *groups = (void *)leaf + btree->sb->blocksize, *grbase = groups - dleaf_groups(leaf);
1.38 struct entry *entries = (void *)grbase;
1.39@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
1.40 int main(int argc, char *argv[])
1.41 {
1.42 printf("--- leaf test ---\n");
1.43- SB = &(struct sb){ .blocksize = 1 << 10 };
1.44+ struct sb *sb = &(struct sb){ .blocksize = 1 << 10 };
1.45 struct btree *btree = &(struct btree){ .sb = sb, .ops = &dtree_ops };
1.46 struct dleaf *leaf = dleaf_create(btree);
1.47 dleaf_chop(btree, 0x14014LL, leaf);
2.1--- a/user/filemap.c Wed Dec 03 12:59:43 2008 +0900
2.2+++ b/user/filemap.c Tue Dec 02 23:12:28 2008 -0800
2.3@@ -57,7 +57,7 @@ int main(int argc, char *argv[])
2.4 if (fdsize64(fd, &size))
2.5 error("fdsize64 failed for '%s' (%s)", name, strerror(errno));
2.6 struct dev *dev = &(struct dev){ fd, .bits = 8 };
2.7- SB = &(struct sb){
2.8+ struct sb *sb = &(struct sb){
2.9 .max_inodes_per_block = 64,
2.10 .entries_per_node = 20,
2.11 .devmap = new_map(dev, NULL),
3.1--- a/user/iattr.c Wed Dec 03 12:59:43 2008 +0900
3.2+++ b/user/iattr.c Tue Dec 02 23:12:28 2008 -0800
3.3@@ -29,7 +29,7 @@ int main(int argc, char *argv[])
3.4 int main(int argc, char *argv[])
3.5 {
3.6 unsigned abits = DATA_BTREE_BIT|CTIME_SIZE_BIT|MODE_OWNER_BIT|LINK_COUNT_BIT|MTIME_BIT;
3.7- SB = &(struct sb){ .version = 0, .blocksize = 1 << 9, };
3.8+ struct sb *sb = &(struct sb){ .version = 0, .blocksize = 1 << 9, };
3.9 struct inode *inode = &(struct inode){ .i_sb = sb,
3.10 .present = abits, .i_mode = 0x666, .i_uid = 0x12121212, .i_gid = 0x34343434,
3.11 .btree = { .root = { .block = 0xcaba1f00dULL, .depth = 3 } },
4.1--- a/user/ileaf.c Wed Dec 03 12:59:43 2008 +0900
4.2+++ b/user/ileaf.c Tue Dec 02 23:12:28 2008 -0800
4.3@@ -26,20 +26,20 @@
4.4 #include "kernel/ileaf.c"
4.5
4.6 #ifndef main
4.7-struct ileaf *ileaf_create(BTREE)
4.8+struct ileaf *ileaf_create(struct btree *btree)
4.9 {
4.10 struct ileaf *leaf = malloc(btree->sb->blocksize);
4.11 ileaf_init(btree, leaf);
4.12 return leaf;
4.13 }
4.14
4.15-void ileaf_destroy(BTREE, struct ileaf *leaf)
4.16+void ileaf_destroy(struct btree *btree, struct ileaf *leaf)
4.17 {
4.18 assert(ileaf_sniff(btree, leaf));
4.19 free(leaf);
4.20 }
4.21
4.22-void test_append(BTREE, struct ileaf *leaf, inum_t inum, int more, char fill)
4.23+void test_append(struct btree *btree, struct ileaf *leaf, inum_t inum, int more, char fill)
4.24 {
4.25 unsigned size = 0;
4.26 char *attrs = ileaf_lookup(btree, inum, leaf, &size);
4.27@@ -48,7 +48,7 @@ void test_append(BTREE, struct ileaf *le
4.28 memset(attrs + size, fill, more);
4.29 }
4.30
4.31-void test_remove(BTREE, struct ileaf *leaf, inum_t inum, int less)
4.32+void test_remove(struct btree *btree, struct ileaf *leaf, inum_t inum, int less)
4.33 {
4.34 unsigned size = 0;
4.35 char *attrs = ileaf_lookup(btree, inum, leaf, &size);
4.36@@ -56,7 +56,7 @@ void test_remove(BTREE, struct ileaf *le
4.37 attrs = ileaf_resize(btree, inum, leaf, size - less);
4.38 }
4.39
4.40-block_t balloc(SB)
4.41+block_t balloc(struct sb *sb)
4.42 {
4.43 return sb->nextalloc++;
4.44 }
4.45@@ -64,7 +64,7 @@ int main(int argc, char *argv[])
4.46 int main(int argc, char *argv[])
4.47 {
4.48 printf("--- test inode table leaf methods ---\n");
4.49- SB = &(struct sb){ .blocksize = 4096 };
4.50+ struct sb *sb = &(struct sb){ .blocksize = 4096 };
4.51 struct btree *btree = &(struct btree){ .sb = sb, .ops = &itable_ops };
4.52 btree->entries_per_leaf = 64; // !!! should depend on blocksize
4.53 struct ileaf *leaf = ileaf_create(btree);
5.1--- a/user/inode.c Wed Dec 03 12:59:43 2008 +0900
5.2+++ b/user/inode.c Tue Dec 02 23:12:28 2008 -0800
5.3@@ -19,7 +19,7 @@
5.4 #include "filemap.c"
5.5 #undef main
5.6
5.7-struct inode *new_inode(SB, inum_t inum)
5.8+struct inode *new_inode(struct sb *sb, inum_t inum)
5.9 {
5.10 map_t *map = new_map(sb->devmap->dev, &filemap_ops);
5.11 if (!map)
5.12@@ -183,7 +183,7 @@ int main(int argc, char *argv[])
5.13 error("fdsize64 failed for '%s' (%s)", name, strerror(errno));
5.14 struct dev *dev = &(struct dev){ fd, .bits = 12 };
5.15 init_buffers(dev, 1 << 20);
5.16- SB = &(struct sb){
5.17+ struct sb *sb = &(struct sb){
5.18 .max_inodes_per_block = 64,
5.19 .entries_per_node = 20,
5.20 .devmap = new_map(dev, NULL),
6.1--- a/user/kernel/balloc.c Wed Dec 03 12:59:43 2008 +0900
6.2+++ b/user/kernel/balloc.c Tue Dec 02 23:12:28 2008 -0800
6.3@@ -225,7 +225,7 @@ block_t balloc_from_range(struct inode *
6.4 return balloc_extent_from_range(inode, start, count, 1);
6.5 }
6.6
6.7-block_t balloc(SB)
6.8+block_t balloc(struct sb *sb)
6.9 {
6.10 trace_off("balloc block at goal %Lx", (L)sb->nextalloc);
6.11 block_t goal = sb->nextalloc, total = sb->volblocks, block;
6.12@@ -239,7 +239,7 @@ found:
6.13 return block;
6.14 }
6.15
6.16-block_t balloc_extent(SB, unsigned blocks)
6.17+block_t balloc_extent(struct sb *sb, unsigned blocks)
6.18 {
6.19 trace_off("balloc %x blocks at goal %Lx", blocks, (L)sb->nextalloc);
6.20 block_t goal = sb->nextalloc, total = sb->volblocks, block;
6.21@@ -253,7 +253,7 @@ found:
6.22 return block;
6.23 }
6.24
6.25-void bfree_extent(SB, block_t start, unsigned count)
6.26+void bfree_extent(struct sb *sb, block_t start, unsigned count)
6.27 {
6.28 unsigned mapshift = sb->blockbits + 3;
6.29 unsigned mapmask = (1 << mapshift) - 1;
6.30@@ -277,7 +277,7 @@ eek:
6.31 warn("extent 0x%Lx %s!\n", (L)start, why);
6.32 }
6.33
6.34-void bfree(SB, block_t block)
6.35+void bfree(struct sb *sb, block_t block)
6.36 {
6.37 bfree_extent(sb, block, 1);
6.38 }
7.1--- a/user/kernel/btree.c Wed Dec 03 12:59:43 2008 +0900
7.2+++ b/user/kernel/btree.c Tue Dec 02 23:12:28 2008 -0800
7.3@@ -34,7 +34,7 @@ static inline unsigned bcount(struct bno
7.4 return from_be_u32(node->count);
7.5 }
7.6
7.7-static void free_block(SB, block_t block)
7.8+static void free_block(struct sb *sb, block_t block)
7.9 {
7.10 }
7.11
7.12@@ -171,7 +171,7 @@ void free_cursor(struct cursor *cursor)
7.13 free(cursor);
7.14 }
7.15
7.16-int probe(BTREE, tuxkey_t key, struct cursor *cursor)
7.17+int probe(struct btree *btree, tuxkey_t key, struct cursor *cursor)
7.18 {
7.19 unsigned i, depth = btree->root.depth;
7.20 struct buffer_head *buffer = sb_bread(vfs_sb(btree->sb), btree->root.block);
7.21@@ -205,7 +205,7 @@ static inline int level_finished(struct
7.22 }
7.23 // also write level_beginning!!!
7.24
7.25-int advance(BTREE, struct cursor *cursor)
7.26+int advance(struct btree *btree, struct cursor *cursor)
7.27 {
7.28 int depth = btree->root.depth, level = depth;
7.29 struct buffer_head *buffer = cursor->path[level].buffer;
7.30@@ -250,7 +250,7 @@ tuxkey_t next_key(struct cursor *cursor,
7.31 }
7.32 // also write this_key!!!
7.33
7.34-void show_tree_range(BTREE, tuxkey_t start, unsigned count)
7.35+void show_tree_range(struct btree *btree, tuxkey_t start, unsigned count)
7.36 {
7.37 printf("%i level btree at %Li:\n", btree->root.depth, (L)btree->root.block);
7.38 struct cursor *cursor = alloc_cursor(btree->root.depth + 1);
7.39@@ -271,7 +271,7 @@ void show_tree_range(BTREE, tuxkey_t sta
7.40
7.41 /* Deletion */
7.42
7.43-static void brelse_free(SB, struct buffer_head *buffer)
7.44+static void brelse_free(struct sb *sb, struct buffer_head *buffer)
7.45 {
7.46 brelse(buffer);
7.47 if (bufcount(buffer)) {
7.48@@ -320,12 +320,12 @@ static void merge_nodes(struct bnode *no
7.49 node->count = to_be_u32(bcount(node) + bcount(node2));
7.50 }
7.51
7.52-int delete_from_leaf(BTREE, vleaf *leaf, struct delete_info *info)
7.53+int delete_from_leaf(struct btree *btree, vleaf *leaf, struct delete_info *info)
7.54 {
7.55 return (btree->ops->leaf_chop)(btree, info->key, leaf);
7.56 }
7.57
7.58-int tree_chop(BTREE, struct delete_info *info, millisecond_t deadline)
7.59+int tree_chop(struct btree *btree, struct delete_info *info, millisecond_t deadline)
7.60 {
7.61 int depth = btree->root.depth, level = depth - 1, suspend = 0;
7.62 struct cursor *cursor;
7.63@@ -565,7 +565,7 @@ void *tree_expand(struct btree *btree, t
7.64 return NULL;
7.65 }
7.66
7.67-struct btree new_btree(SB, struct btree_ops *ops)
7.68+struct btree new_btree(struct sb *sb, struct btree_ops *ops)
7.69 {
7.70 struct btree btree = { .sb = sb, .ops = ops };
7.71 struct buffer_head *rootbuf = new_node(&btree);
8.1--- a/user/kernel/dleaf.c Wed Dec 03 12:59:43 2008 +0900
8.2+++ b/user/kernel/dleaf.c Tue Dec 02 23:12:28 2008 -0800
8.3@@ -68,7 +68,7 @@ static inline struct dleaf *to_dleaf(vle
8.4 return leaf;
8.5 }
8.6
8.7-int dleaf_init(BTREE, vleaf *leaf)
8.8+int dleaf_init(struct btree *btree, vleaf *leaf)
8.9 {
8.10 if (!leaf)
8.11 return -1;
8.12@@ -79,22 +79,22 @@ int dleaf_init(BTREE, vleaf *leaf)
8.13 return 0;
8.14 }
8.15
8.16-int dleaf_sniff(BTREE, vleaf *leaf)
8.17+int dleaf_sniff(struct btree *btree, vleaf *leaf)
8.18 {
8.19 return from_be_u16(to_dleaf(leaf)->magic) == 0x1eaf;
8.20 }
8.21
8.22-unsigned dleaf_free(BTREE, vleaf *leaf)
8.23+unsigned dleaf_free(struct btree *btree, vleaf *leaf)
8.24 {
8.25 return from_be_u16(to_dleaf(leaf)->used) - from_be_u16(to_dleaf(leaf)->free);
8.26 }
8.27
8.28-unsigned dleaf_need(BTREE, struct dleaf *leaf)
8.29+unsigned dleaf_need(struct btree *btree, struct dleaf *leaf)
8.30 {
8.31 return btree->sb->blocksize - dleaf_free(btree, leaf) - sizeof(struct dleaf);
8.32 }
8.33
8.34-int dleaf_free2(BTREE, void *vleaf)
8.35+int dleaf_free2(struct btree *btree, void *vleaf)
8.36 {
8.37 struct dleaf *leaf = vleaf;
8.38 struct group *gdict = (void *)leaf + btree->sb->blocksize, *gstop = gdict - dleaf_groups(leaf);
8.39@@ -105,7 +105,7 @@ int dleaf_free2(BTREE, void *vleaf)
8.40 return (void *)entry - (void *)extents;
8.41 }
8.42
8.43-void dleaf_dump(BTREE, vleaf *vleaf)
8.44+void dleaf_dump(struct btree *btree, vleaf *vleaf)
8.45 {
8.46 unsigned blocksize = btree->sb->blocksize;
8.47 struct dleaf *leaf = vleaf;
8.48@@ -159,7 +159,7 @@ void dleaf_dump(BTREE, vleaf *vleaf)
8.49 * But it does truncate so it is getting checked in just for now.
8.50 */
8.51
8.52-int dleaf_chop(BTREE, tuxkey_t chop, vleaf *vleaf)
8.53+int dleaf_chop(struct btree *btree, tuxkey_t chop, vleaf *vleaf)
8.54 {
8.55 struct dleaf *leaf = vleaf;
8.56 struct group *gdict = (void *)leaf + btree->sb->blocksize, *group = gdict;
8.57@@ -208,7 +208,7 @@ int dleaf_chop(BTREE, tuxkey_t chop, vle
8.58 return 1;
8.59 }
8.60
8.61-int dleaf_check(BTREE, struct dleaf *leaf)
8.62+int dleaf_check(struct btree *btree, struct dleaf *leaf)
8.63 {
8.64 struct group *gdict = (void *)leaf + btree->sb->blocksize, *gstop = gdict - dleaf_groups(leaf);
8.65 struct entry *edict = (void *)gstop, *entry = edict;
8.66@@ -238,7 +238,7 @@ eek:
8.67 return -1;
8.68 }
8.69
8.70-tuxkey_t dleaf_split(BTREE, tuxkey_t key, vleaf *from, vleaf *into)
8.71+tuxkey_t dleaf_split(struct btree *btree, tuxkey_t key, vleaf *from, vleaf *into)
8.72 {
8.73 assert(dleaf_sniff(btree, from));
8.74 struct dleaf *leaf = from, *dest = into;
8.75@@ -299,7 +299,7 @@ tuxkey_t dleaf_split(BTREE, tuxkey_t key
8.76 return get_index(destgroups - 1, destentries - 1);
8.77 }
8.78
8.79-void dleaf_merge(BTREE, struct dleaf *leaf, struct dleaf *from)
8.80+void dleaf_merge(struct btree *btree, struct dleaf *leaf, struct dleaf *from)
8.81 {
8.82 struct group *groups = (void *)leaf + btree->sb->blocksize, *grbase = groups - dleaf_groups(leaf);
8.83 struct entry *entries = (void *)grbase;
9.1--- a/user/kernel/ileaf.c Wed Dec 03 12:59:43 2008 +0900
9.2+++ b/user/kernel/ileaf.c Tue Dec 02 23:12:28 2008 -0800
9.3@@ -41,33 +41,33 @@ static inline tuxkey_t ibase(struct ilea
9.4 return from_be_u64(leaf->ibase);
9.5 }
9.6
9.7-int ileaf_init(BTREE, vleaf *leaf)
9.8+int ileaf_init(struct btree *btree, vleaf *leaf)
9.9 {
9.10 printf("initialize inode leaf %p\n", leaf);
9.11 *(struct ileaf *)leaf = (struct ileaf){ to_be_u16(0x90de) };
9.12 return 0;
9.13 }
9.14
9.15-int ileaf_sniff(BTREE, vleaf *leaf)
9.16+int ileaf_sniff(struct btree *btree, vleaf *leaf)
9.17 {
9.18 return ((struct ileaf *)leaf)->magic == to_be_u16(0x90de);
9.19 }
9.20
9.21-unsigned ileaf_need(BTREE, vleaf *vleaf)
9.22+unsigned ileaf_need(struct btree *btree, vleaf *vleaf)
9.23 {
9.24 be_u16 *dict = vleaf + btree->sb->blocksize;
9.25 unsigned count = icount(to_ileaf(vleaf));
9.26 return atdict(dict, count) + count * sizeof(*dict);
9.27 }
9.28
9.29-unsigned ileaf_free(BTREE, vleaf *leaf)
9.30+unsigned ileaf_free(struct btree *btree, vleaf *leaf)
9.31 {
9.32 return btree->sb->blocksize - ileaf_need(btree, leaf) - sizeof(struct ileaf);
9.33 }
9.34
9.35-void ileaf_dump(BTREE, vleaf *vleaf)
9.36+void ileaf_dump(struct btree *btree, vleaf *vleaf)
9.37 {
9.38- SB = btree->sb;
9.39+ struct sb *sb = btree->sb;
9.40 struct ileaf *leaf = vleaf;
9.41 inum_t inum = ibase(leaf);
9.42 be_u16 *dict = vleaf + sb->blocksize;
9.43@@ -99,7 +99,7 @@ void ileaf_dump(BTREE, vleaf *vleaf)
9.44 }
9.45 }
9.46
9.47-void *ileaf_lookup(BTREE, inum_t inum, struct ileaf *leaf, unsigned *result)
9.48+void *ileaf_lookup(struct btree *btree, inum_t inum, struct ileaf *leaf, unsigned *result)
9.49 {
9.50 assert(inum >= ibase(leaf));
9.51 assert(inum < ibase(leaf) + btree->entries_per_leaf);
9.52@@ -116,7 +116,7 @@ void *ileaf_lookup(BTREE, inum_t inum, s
9.53 return attrs;
9.54 }
9.55
9.56-int isinorder(BTREE, struct ileaf *leaf)
9.57+int isinorder(struct btree *btree, struct ileaf *leaf)
9.58 {
9.59 be_u16 *dict = (void *)leaf + btree->sb->blocksize;
9.60 for (int i = 0, offset = 0, limit; --i >= -icount(leaf); offset = limit)
9.61@@ -125,7 +125,7 @@ int isinorder(BTREE, struct ileaf *leaf)
9.62 return 1;
9.63 }
9.64
9.65-int ileaf_check(BTREE, struct ileaf *leaf)
9.66+int ileaf_check(struct btree *btree, struct ileaf *leaf)
9.67 {
9.68 char *why;
9.69 why = "not an inode table leaf";
9.70@@ -140,7 +140,7 @@ eek:
9.71 return -1;
9.72 }
9.73
9.74-void ileaf_trim(BTREE, struct ileaf *leaf) {
9.75+void ileaf_trim(struct btree *btree, struct ileaf *leaf) {
9.76 be_u16 *dict = (void *)leaf + btree->sb->blocksize;
9.77 while (icount(leaf) > 1 && *(dict - icount(leaf)) == *(dict - icount(leaf) + 1))
9.78 leaf->count = to_be_u16(from_be_u16(leaf->count) - 1);
9.79@@ -150,7 +150,7 @@ void ileaf_trim(BTREE, struct ileaf *lea
9.80
9.81 #define SPLIT_AT_INUM
9.82
9.83-tuxkey_t ileaf_split(BTREE, tuxkey_t inum, vleaf *from, vleaf *into)
9.84+tuxkey_t ileaf_split(struct btree *btree, tuxkey_t inum, vleaf *from, vleaf *into)
9.85 {
9.86 assert(ileaf_sniff(btree, from));
9.87 struct ileaf *leaf = from, *dest = into;
9.88@@ -194,7 +194,7 @@ tuxkey_t ileaf_split(BTREE, tuxkey_t inu
9.89 return ibase(dest);
9.90 }
9.91
9.92-void ileaf_merge(BTREE, struct ileaf *leaf, struct ileaf *from)
9.93+void ileaf_merge(struct btree *btree, struct ileaf *leaf, struct ileaf *from)
9.94 {
9.95 if (!icount(from))
9.96 return;
9.97@@ -209,7 +209,7 @@ void ileaf_merge(BTREE, struct ileaf *le
9.98 add_idict(dict - i, from_be_u16(*(dict - at)));
9.99 }
9.100
9.101-void *ileaf_resize(BTREE, tuxkey_t inum, vleaf *base, unsigned newsize)
9.102+void *ileaf_resize(struct btree *btree, tuxkey_t inum, vleaf *base, unsigned newsize)
9.103 {
9.104 assert(ileaf_sniff(btree, base));
9.105 struct ileaf *leaf = base;
9.106@@ -240,7 +240,7 @@ void *ileaf_resize(BTREE, tuxkey_t inum,
9.107 return attrs;
9.108 }
9.109
9.110-inum_t find_empty_inode(BTREE, struct ileaf *leaf, inum_t goal)
9.111+inum_t find_empty_inode(struct btree *btree, struct ileaf *leaf, inum_t goal)
9.112 {
9.113 assert(goal >= ibase(leaf));
9.114 goal -= ibase(leaf);
9.115@@ -256,7 +256,7 @@ inum_t find_empty_inode(BTREE, struct il
9.116 return i + ibase(leaf);
9.117 }
9.118
9.119-int ileaf_purge(BTREE, inum_t inum, struct ileaf *leaf)
9.120+int ileaf_purge(struct btree *btree, inum_t inum, struct ileaf *leaf)
9.121 {
9.122 if (inum < ibase(leaf) || inum - ibase(leaf) >= btree->entries_per_leaf)
9.123 return -EINVAL;
10.1--- a/user/kernel/inode.c Wed Dec 03 12:59:43 2008 +0900
10.2+++ b/user/kernel/inode.c Tue Dec 02 23:12:28 2008 -0800
10.3@@ -53,7 +53,7 @@ int store_attrs(struct inode *inode, str
10.4
10.5 int make_inode(struct inode *inode, struct tux_iattr *iattr)
10.6 {
10.7- SB = tux_sb(inode->i_sb);
10.8+ struct sb *sb = tux_sb(inode->i_sb);
10.9 int err = -ENOENT, depth = sb->itable.root.depth;
10.10 struct cursor *cursor = alloc_cursor(depth + 2); /* +1 for now depth */
10.11 if (!cursor)
10.12@@ -111,7 +111,7 @@ errout:
10.13
10.14 static int open_inode(struct inode *inode)
10.15 {
10.16- SB = tux_sb(inode->i_sb);
10.17+ struct sb *sb = tux_sb(inode->i_sb);
10.18 int err, depth = sb->itable.root.depth;
10.19 struct cursor *cursor = alloc_cursor(depth + 1);
10.20 if (!cursor)
10.21@@ -148,7 +148,7 @@ int save_inode(struct inode *inode)
10.22 int save_inode(struct inode *inode)
10.23 {
10.24 trace("save inode 0x%Lx", (L)tux_inode(inode)->inum);
10.25- SB = tux_sb(inode->i_sb);
10.26+ struct sb *sb = tux_sb(inode->i_sb);
10.27 int err, depth = sb->itable.root.depth;
10.28 struct cursor *cursor = alloc_cursor(depth + 2); /* +1 for new depth */
10.29 if (!cursor)
10.30@@ -171,7 +171,7 @@ error:
10.31 return err;
10.32 }
10.33
10.34-int purge_inum(BTREE, inum_t inum)
10.35+int purge_inum(struct btree *btree, inum_t inum)
10.36 {
10.37 int err = -ENOENT, depth = btree->root.depth;
10.38 struct cursor *cursor = alloc_cursor(depth + 1);
11.1--- a/user/kernel/super.c Wed Dec 03 12:59:43 2008 +0900
11.2+++ b/user/kernel/super.c Tue Dec 02 23:12:28 2008 -0800
11.3@@ -15,7 +15,7 @@
11.4
11.5 #include "tux3.h"
11.6
11.7-static int unpack_sb(SB, struct disksuper *super, int silent)
11.8+static int unpack_sb(struct sb *sb, struct disksuper *super, int silent)
11.9 {
11.10 if (memcmp(super->magic, (char[])SB_MAGIC, sizeof(super->magic))) {
11.11 if (!silent)
11.12@@ -51,7 +51,7 @@ static int unpack_sb(SB, struct disksupe
11.13 return 0;
11.14 }
11.15
11.16-static void pack_sb(SB, struct disksuper *super)
11.17+static void pack_sb(struct sb *sb, struct disksuper *super)
11.18 {
11.19 super->blockbits = to_be_u16(sb->blockbits);
11.20 super->volblocks = to_be_u64(sb->volblocks);
12.1--- a/user/kernel/tux3.h Wed Dec 03 12:59:43 2008 +0900
12.2+++ b/user/kernel/tux3.h Tue Dec 02 23:12:28 2008 -0800
12.3@@ -146,7 +146,7 @@ static inline void *decode48(void *at, u
12.4 }
12.5
12.6 /* Tux3 disk format */
12.7-#define SB_MAGIC_SIZE 8
12.8+#define SB_MAGIC_SIZE 8
12.9 #define SB_MAGIC { 't', 'u', 'x', '3', 0xdd, 0x08, 0x09, 0x06 } /* date of latest incompatible sb format */
12.10 /*
12.11 * disk format revision history
12.12@@ -162,7 +162,6 @@ static inline void *decode48(void *at, u
12.13 #define MAX_FILESIZE (1LL << MAX_FILESIZE_BITS)
12.14 #define MAX_EXTENT (1 << 6)
12.15 #define SB_LOC (1 << 12)
12.16-#define SB struct sb *sb
12.17
12.18 /* Special inode numbers */
12.19 #define TUX_BITMAP_INO 0
12.20@@ -444,21 +443,19 @@ static inline void inc_dleaf_groups(stru
12.21
12.22 typedef void vleaf;
12.23
12.24-#define BTREE struct btree *btree
12.25-
12.26 struct btree_ops {
12.27- int (*leaf_sniff)(BTREE, vleaf *leaf);
12.28- int (*leaf_init)(BTREE, vleaf *leaf);
12.29- tuxkey_t (*leaf_split)(BTREE, tuxkey_t key, vleaf *from, vleaf *into);
12.30- void *(*leaf_resize)(BTREE, tuxkey_t key, vleaf *leaf, unsigned size);
12.31- void (*leaf_dump)(BTREE, vleaf *leaf);
12.32- unsigned (*leaf_need)(BTREE, vleaf *leaf);
12.33- unsigned (*leaf_free)(BTREE, vleaf *leaf);
12.34+ int (*leaf_sniff)(struct btree *btree, vleaf *leaf);
12.35+ int (*leaf_init)(struct btree *btree, vleaf *leaf);
12.36+ tuxkey_t (*leaf_split)(struct btree *btree, tuxkey_t key, vleaf *from, vleaf *into);
12.37+ void *(*leaf_resize)(struct btree *btree, tuxkey_t key, vleaf *leaf, unsigned size);
12.38+ void (*leaf_dump)(struct btree *btree, vleaf *leaf);
12.39+ unsigned (*leaf_need)(struct btree *btree, vleaf *leaf);
12.40+ unsigned (*leaf_free)(struct btree *btree, vleaf *leaf);
12.41 /* return value: 1 - modified, 0 - not modified, < 0 - error */
12.42- int (*leaf_chop)(BTREE, tuxkey_t key, vleaf *leaf);
12.43- void (*leaf_merge)(BTREE, vleaf *into, vleaf *from);
12.44- block_t (*balloc)(SB);
12.45- void (*bfree)(SB, block_t block);
12.46+ int (*leaf_chop)(struct btree *btree, tuxkey_t key, vleaf *leaf);
12.47+ void (*leaf_merge)(struct btree *btree, vleaf *into, vleaf *from);
12.48+ block_t (*balloc)(struct sb *sb);
12.49+ void (*bfree)(struct sb *sb, block_t block);
12.50 };
12.51
12.52 /*
12.53@@ -506,8 +503,8 @@ struct tux_iattr {
12.54 };
12.55
12.56 void hexdump(void *data, unsigned size);
12.57-block_t balloc(SB);
12.58-void bfree(SB, block_t block);
12.59+block_t balloc(struct sb *sb);
12.60+void bfree(struct sb *sb, block_t block);
12.61
12.62 enum atkind {
12.63 MIN_ATTR = 6,
12.64@@ -604,20 +601,20 @@ static inline struct inode *buffer_inode
12.65 }
12.66
12.67 /* balloc.c */
12.68-block_t balloc_extent(SB, unsigned blocks);
12.69+block_t balloc_extent(struct sb *sb, unsigned blocks);
12.70
12.71 /* btree.c */
12.72 void release_cursor(struct cursor *cursor);
12.73 struct cursor *alloc_cursor(int);
12.74 void free_cursor(struct cursor *cursor);
12.75-int probe(BTREE, tuxkey_t key, struct cursor *cursor);
12.76-int advance(BTREE, struct cursor *cursor);
12.77+int probe(struct btree *btree, tuxkey_t key, struct cursor *cursor);
12.78+int advance(struct btree *btree, struct cursor *cursor);
12.79 tuxkey_t next_key(struct cursor *cursor, int depth);
12.80-void show_tree_range(BTREE, tuxkey_t start, unsigned count);
12.81-int tree_chop(BTREE, struct delete_info *info, millisecond_t deadline);
12.82+void show_tree_range(struct btree *btree, tuxkey_t start, unsigned count);
12.83+int tree_chop(struct btree *btree, struct delete_info *info, millisecond_t deadline);
12.84 int btree_leaf_split(struct btree *btree, struct cursor *cursor, tuxkey_t key);
12.85 void *tree_expand(struct btree *btree, tuxkey_t key, unsigned newsize, struct cursor *cursor);
12.86-struct btree new_btree(SB, struct btree_ops *ops);
12.87+struct btree new_btree(struct sb *sb, struct btree_ops *ops);
12.88
12.89 /* dir.c */
12.90 loff_t tux_create_entry(struct inode *dir, const char *name, int len, inum_t inum, unsigned mode);
12.91@@ -627,8 +624,8 @@ extern const struct inode_operations tux
12.92 extern const struct inode_operations tux_dir_iops;
12.93
12.94 /* dtree.c */
12.95-unsigned dleaf_free(BTREE, vleaf *leaf);
12.96-void dleaf_dump(BTREE, vleaf *vleaf);
12.97+unsigned dleaf_free(struct btree *btree, vleaf *leaf);
12.98+void dleaf_dump(struct btree *btree, vleaf *vleaf);
12.99 extern struct btree_ops dtree_ops;
12.100 int dwalk_probe(struct dleaf *leaf, unsigned blocksize, struct dwalk *walk, tuxkey_t key);
12.101 tuxkey_t dwalk_index(struct dwalk *walk);
12.102@@ -649,9 +646,9 @@ void *decode_attrs(struct inode *inode,
12.103 void *decode_attrs(struct inode *inode, void *attrs, unsigned size);
12.104
12.105 /* ileaf.c */
12.106-void *ileaf_lookup(BTREE, inum_t inum, struct ileaf *leaf, unsigned *result);
12.107-inum_t find_empty_inode(BTREE, struct ileaf *leaf, inum_t goal);
12.108-int ileaf_purge(BTREE, inum_t inum, struct ileaf *leaf);
12.109+void *ileaf_lookup(struct btree *btree, inum_t inum, struct ileaf *leaf, unsigned *result);
12.110+inum_t find_empty_inode(struct btree *btree, struct ileaf *leaf, inum_t goal);
12.111+int ileaf_purge(struct btree *btree, inum_t inum, struct ileaf *leaf);
12.112 extern struct btree_ops itable_ops;
12.113
12.114 /* inode.c */
13.1--- a/user/kernel/xattr.c Wed Dec 03 12:59:43 2008 +0900
13.2+++ b/user/kernel/xattr.c Tue Dec 02 23:12:28 2008 -0800
13.3@@ -55,7 +55,7 @@ static int unatom(struct inode *atable,
13.4 static int unatom(struct inode *atable, atom_t atom, char *name, unsigned size)
13.5 {
13.6 unsigned offset;
13.7- SB = tux_sb(atable->i_sb);
13.8+ struct sb *sb = tux_sb(atable->i_sb);
13.9 struct buffer_head *buffer = blockread_unatom(atable, atom, &offset);
13.10 if (!buffer)
13.11 return -ENOMEM;
13.12@@ -83,7 +83,7 @@ static int unatom(struct inode *atable,
13.13
13.14 void dump_atoms(struct inode *atable)
13.15 {
13.16- SB = tux_sb(atable->i_sb);
13.17+ struct sb *sb = tux_sb(atable->i_sb);
13.18 unsigned blocks = (sb->atomgen + (sb->blockmask >> 1)) >> (sb->blockbits - 1);
13.19 for (unsigned j = 0; j < blocks; j++) {
13.20 unsigned block = sb->atomref_base + 2 * j;
13.21@@ -113,7 +113,7 @@ eek:
13.22 return;
13.23 }
13.24
13.25-void show_freeatoms(SB)
13.26+void show_freeatoms(struct sb *sb)
13.27 {
13.28 struct inode *atable = sb->atable;
13.29 atom_t atom = sb->freeatom;
13.30@@ -136,7 +136,7 @@ eek:
13.31
13.32 atom_t get_freeatom(struct inode *atable)
13.33 {
13.34- SB = tux_sb(atable->i_sb);
13.35+ struct sb *sb = tux_sb(atable->i_sb);
13.36 atom_t atom = sb->freeatom;
13.37 if (!atom)
13.38 return sb->atomgen++;
13.39@@ -157,7 +157,7 @@ eek:
13.40
13.41 int use_atom(struct inode *atable, atom_t atom, int use)
13.42 {
13.43- SB = tux_sb(atable->i_sb);
13.44+ struct sb *sb = tux_sb(atable->i_sb);
13.45 unsigned shift = sb->blockbits - 1;
13.46 unsigned block = sb->atomref_base + 2 * (atom >> shift);
13.47 unsigned offset = atom & ~(-1 << shift), kill = 0;
13.48@@ -439,7 +439,7 @@ void *encode_xattrs(struct inode *inode,
13.49
13.50 unsigned decode_xsize(struct inode *inode, void *attrs, unsigned size)
13.51 {
13.52- SB = tux_sb(inode->i_sb);
13.53+ struct sb *sb = tux_sb(inode->i_sb);
13.54 unsigned total = 0, bytes;
13.55 void *limit = attrs + size;
13.56 while (attrs < limit - 1) {
14.1--- a/user/super.c Wed Dec 03 12:59:43 2008 +0900
14.2+++ b/user/super.c Tue Dec 02 23:12:28 2008 -0800
14.3@@ -17,7 +17,7 @@
14.4
14.5 #include "kernel/super.c"
14.6
14.7-int load_sb(SB)
14.8+int load_sb(struct sb *sb)
14.9 {
14.10 struct disksuper *super = &sb->super;
14.11 int err = diskread(sb->devmap->dev->fd, super, sizeof(*super), SB_LOC);
14.12@@ -29,14 +29,14 @@ int load_sb(SB)
14.13 return 0;
14.14 }
14.15
14.16-int save_sb(SB)
14.17+int save_sb(struct sb *sb)
14.18 {
14.19 struct disksuper *super = &sb->super;
14.20 pack_sb(sb, super);
14.21 return diskwrite(sb->devmap->dev->fd, super, sizeof(*super), SB_LOC);
14.22 }
14.23
14.24-int sync_super(SB)
14.25+int sync_super(struct sb *sb)
14.26 {
14.27 int err;
14.28 printf("sync bitmap\n");
14.29@@ -57,7 +57,7 @@ int sync_super(SB)
14.30 return 0;
14.31 }
14.32
14.33-int make_tux3(SB, int fd)
14.34+int make_tux3(struct sb *sb, int fd)
14.35 {
14.36 int err = 0;
14.37 trace("create bitmap");
15.1--- a/user/tux3.h Wed Dec 03 12:59:43 2008 +0900
15.2+++ b/user/tux3.h Tue Dec 02 23:12:28 2008 -0800
15.3@@ -56,12 +56,12 @@ static inline void reset_bit(unsigned ch
15.4 #include "kernel/tux3.h"
15.5
15.6 /* wrappers for buffer cache */
15.7-static inline struct buffer_head *sb_getblk(SB, block_t block)
15.8+static inline struct buffer_head *sb_getblk(struct sb *sb, block_t block)
15.9 {
15.10 return blockget(sb->devmap, block);
15.11 }
15.12
15.13-static inline struct buffer_head *sb_bread(SB, block_t block)
15.14+static inline struct buffer_head *sb_bread(struct sb *sb, block_t block)
15.15 {
15.16 return blockread(sb->devmap, block);
15.17 }
16.1--- a/user/tux3graph.c Wed Dec 03 12:59:43 2008 +0900
16.2+++ b/user/tux3graph.c Tue Dec 02 23:12:28 2008 -0800
16.3@@ -90,7 +90,7 @@ static void write_link(struct graph_info
16.4 }
16.5 }
16.6
16.7-typedef void (*draw_leaf_t)(struct graph_info *, BTREE, struct buffer_head *);
16.8+typedef void (*draw_leaf_t)(struct graph_info *, struct btree *btree, struct buffer_head *);
16.9
16.10 static void draw_sb(struct graph_info *gi, struct sb *sb)
16.11 {
16.12@@ -168,7 +168,7 @@ static void draw_bnode(struct graph_info
16.13 }
16.14 }
16.15
16.16-static void draw_cursor(struct graph_info *gi, BTREE, struct cursor *cursor)
16.17+static void draw_cursor(struct graph_info *gi, struct btree *btree, struct cursor *cursor)
16.18 {
16.19 int level;
16.20 for (level = 0; level < btree->root.depth; level++)
16.21@@ -201,7 +201,7 @@ eek:
16.22 return -EIO;
16.23 }
16.24
16.25-static void draw_tree(struct graph_info *gi, BTREE, draw_leaf_t draw_leaf)
16.26+static void draw_tree(struct graph_info *gi, struct btree *btree, draw_leaf_t draw_leaf)
16.27 {
16.28 struct cursor *cursor;
16.29 struct buffer_head *buffer;
16.30@@ -234,9 +234,9 @@ static void draw_tree(struct graph_info
16.31 write_link(gi);
16.32 }
16.33
16.34-typedef void (*draw_data_t)(struct graph_info *, BTREE);
16.35+typedef void (*draw_data_t)(struct graph_info *, struct btree *btree);
16.36
16.37-static void draw_bitmap(struct graph_info *gi, BTREE)
16.38+static void draw_bitmap(struct graph_info *gi, struct btree *btree)
16.39 {
16.40 fprintf(gi->f,
16.41 "subgraph cluster_%s {\n"
16.42@@ -250,7 +250,7 @@ static void draw_bitmap(struct graph_inf
16.43 gi->lname, gi->lname, gi->lname);
16.44 }
16.45
16.46-static void draw_vtable(struct graph_info *gi, BTREE)
16.47+static void draw_vtable(struct graph_info *gi, struct btree *btree)
16.48 {
16.49 fprintf(gi->f,
16.50 "subgraph cluster_%s {\n"
16.51@@ -262,7 +262,7 @@ static void draw_vtable(struct graph_inf
16.52 gi->lname, gi->lname, gi->lname);
16.53 }
16.54
16.55-static void draw_atable(struct graph_info *gi, BTREE)
16.56+static void draw_atable(struct graph_info *gi, struct btree *btree)
16.57 {
16.58 fprintf(gi->f,
16.59 "subgraph cluster_%s {\n"
16.60@@ -274,7 +274,7 @@ static void draw_atable(struct graph_inf
16.61 gi->lname, gi->lname, gi->lname);
16.62 }
16.63
16.64-static void draw_dir(struct graph_info *gi, BTREE)
16.65+static void draw_dir(struct graph_info *gi, struct btree *btree)
16.66 {
16.67 fprintf(gi->f,
16.68 "subgraph cluster_%s {\n"
16.69@@ -289,7 +289,7 @@ static void draw_dir(struct graph_info *
16.70 gi->lname, gi->lname, gi->lname);
16.71 }
16.72
16.73-static void draw_file(struct graph_info *gi, BTREE)
16.74+static void draw_file(struct graph_info *gi, struct btree *btree)
16.75 {
16.76 fprintf(gi->f,
16.77 "subgraph cluster_%s {\n"
16.78@@ -301,7 +301,7 @@ static void draw_file(struct graph_info
16.79 gi->lname, gi->lname, gi->lname);
16.80 }
16.81
16.82-static inline struct group *dleaf_groups_ptr(BTREE, struct dleaf *dleaf)
16.83+static inline struct group *dleaf_groups_ptr(struct btree *btree, struct dleaf *dleaf)
16.84 {
16.85 return (void *)dleaf + btree->sb->blocksize;
16.86 }
16.87@@ -357,7 +357,7 @@ static inline struct diskextent *dleaf_e
16.88 return extents + ex;
16.89 }
16.90
16.91-static void draw_dleaf(struct graph_info *gi, BTREE, struct buffer_head *buffer)
16.92+static void draw_dleaf(struct graph_info *gi, struct btree *btree, struct buffer_head *buffer)
16.93 {
16.94 struct dleaf *leaf = bufdata(buffer);
16.95 block_t blocknr = buffer->index;
16.96@@ -455,7 +455,7 @@ static void draw_dleaf(struct graph_info
16.97 dleaf_name, gi->filedata, gi->subgraph, gi->filedata);
16.98 }
16.99
16.100-static inline be_u16 *ileaf_dict(BTREE, struct ileaf *ileaf)
16.101+static inline be_u16 *ileaf_dict(struct btree *btree, struct ileaf *ileaf)
16.102 {
16.103 return (void *)ileaf + btree->sb->blocksize;
16.104 }
16.105@@ -473,7 +473,7 @@ static inline u16 ileaf_attr_size(be_u16
16.106 return size;
16.107 }
16.108
16.109-static void draw_ileaf(struct graph_info *gi, BTREE, struct buffer_head *buffer)
16.110+static void draw_ileaf(struct graph_info *gi, struct btree *btree, struct buffer_head *buffer)
16.111 {
16.112 struct ileaf *ileaf = bufdata(buffer);
16.113 block_t blocknr = buffer->index;
17.1--- a/user/xattr.c Wed Dec 03 12:59:43 2008 +0900
17.2+++ b/user/xattr.c Tue Dec 02 23:12:28 2008 -0800
17.3@@ -42,7 +42,7 @@ int main(int argc, char *argv[])
17.4 ftruncate(dev->fd, 1 << 24);
17.5 map_t *map = new_map(dev, NULL);
17.6 init_buffers(dev, 1 << 20);
17.7- SB = &(struct sb){
17.8+ struct sb *sb = &(struct sb){
17.9 .version = 0, .atable = map->inode,
17.10 .blockbits = dev->bits,
17.11 .blocksize = 1 << dev->bits,