Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37520953
en ru br
Репозитории ALT

Группа :: Система/Ядро и оборудование
Пакет: tux3

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: tux3-0.0-alt1.patch
Скачать


 user/Makefile                     |   2 +-
 user/buffer.c                     |  23 +++--
 user/filemap.c                    |   3 +-
 user/inode.c                      |   3 +-
 user/kernel/Makefile              |   3 -
 user/kernel/balloc.c              |  37 +++++---
 user/kernel/btree.c               | 117 +++++++++++++++---------
 user/kernel/commit.c              |   4 +-
 user/kernel/commit_flusher_hack.c |  13 ++-
 user/kernel/dir.c                 |  26 ++++--
 user/kernel/dleaf.c               | 182 ++++++++++++++++++++++++++------------
 user/kernel/dleaf2.c              |  85 ++++++++----------
 user/kernel/filemap.c             |  56 ++++++++----
 user/kernel/iattr.c               |  31 ++++---
 user/kernel/ileaf.c               |  93 +++++++++++++------
 user/kernel/inode.c               |  34 +++----
 user/kernel/log.c                 |  15 ++--
 user/kernel/namei.c               |   3 +-
 user/kernel/orphan.c              |  12 ++-
 user/kernel/utility.c             |   4 +-
 user/kernel/xattr.c               | 120 +++++++++++++++++--------
 user/options.c                    |   4 +-
 user/super.c                      |   5 +-
 user/tux3.c                       |  11 ++-
 user/tux3_dump.c                  |  12 ++-
 user/tux3_graph.c                 |  31 ++++---
 user/walk.c                       |   7 +-
 27 files changed, 597 insertions(+), 339 deletions(-)
diff --git a/user/Makefile b/user/Makefile
index a276dcd..6d825b6 100644
--- a/user/Makefile
+++ b/user/Makefile
@@ -12,7 +12,7 @@ ifeq ($(ARCH),i686)
 CFLAGS	+= -m32
 endif
 
-CFLAGS	+= -std=gnu99 -Wall -g -rdynamic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
+CFLAGS	+= -Wall -g -rdynamic -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64
 CFLAGS	+= -I$(TOPDIR)
 # gcc warning options
 CFLAGS	+= -Wall -Wextra -Werror
diff --git a/user/buffer.c b/user/buffer.c
index c8c8273..7412330 100644
--- a/user/buffer.c
+++ b/user/buffer.c
@@ -98,7 +98,9 @@ void show_buffer_list(struct list_head *list)
 
 void show_dirty_buffers(map_t *map)
 {
-	for (int i = 0; i < BUFFER_DIRTY_STATES; i++) {
+	int i;
+
+	for (i = 0; i < BUFFER_DIRTY_STATES; i++) {
 		printf("map %p dirty [%d]: ", map, i);
 		show_buffer_list(tux3_dirty_buffers(map->inode, i));
 	}
@@ -538,12 +540,13 @@ void invalidate_buffers(map_t *map)
 static void destroy_buffers(void)
 {
 	struct buffer_head *buffer, *safe;
-	struct list_head *head;
+	int i;
 
 	/* If debug_buffer, buffer should already be freed */
 
-	for (int i = 0; i < BUFFER_STATES; i++) {
-		head = buffers + i;
+	for (i = 0; i < BUFFER_STATES; i++) {
+		struct list_head *head = buffers + i;
+
 		if (!debug_buffer) {
 			list_for_each_entry_safe(buffer, safe, head, link) {
 				list_del(&buffer->lru);
@@ -634,9 +637,11 @@ error:
 
 void init_buffers(struct dev *dev, unsigned poolsize, int debug)
 {
+	int i;
+
 	debug_buffer = debug;
 	INIT_LIST_HEAD(&lru_buffers);
-	for (int i = 0; i < BUFFER_STATES; i++)
+	for (i = 0; i < BUFFER_STATES; i++)
 		INIT_LIST_HEAD(buffers + i);
 
 	unsigned bufsize = 1 << dev->bits;
@@ -681,19 +686,23 @@ int dev_errio(int rw, struct bufvec *bufvec)
 
 map_t *new_map(struct dev *dev, blockio_t *io)
 {
+	int i;
 	map_t *map = malloc(sizeof(*map)); // error???
+
 	*map = (map_t){
 		.dev	= dev,
 		.io	= io ? io : dev_blockio
 	};
-	for (int i = 0; i < BUFFER_BUCKETS; i++)
+	for (i = 0; i < BUFFER_BUCKETS; i++)
 		INIT_HLIST_HEAD(&map->hash[i]);
 	return map;
 }
 
 void free_map(map_t *map)
 {
-	for (int i = 0; i < BUFFER_BUCKETS; i++) {
+	int i;
+
+	for (i = 0; i < BUFFER_BUCKETS; i++) {
 		struct hlist_head *bucket = &map->hash[i];
 		struct buffer_head *buffer;
 		struct hlist_node *n;
diff --git a/user/filemap.c b/user/filemap.c
index 2b49c7d..fd0d1c3 100644
--- a/user/filemap.c
+++ b/user/filemap.c
@@ -124,6 +124,7 @@ static int filemap_extent_io(enum map_mode mode, int rw, struct bufvec *bufvec)
 	struct inode *inode = bufvec_inode(bufvec);
 	block_t block, index = bufvec_contig_index(bufvec);
 	int err;
+	int i;
 
 	/* FIXME: now assuming buffer is only 1 for MAP_READ */
 	assert(mode != MAP_READ || bufvec_contig_count(bufvec) == 1);
@@ -151,7 +152,7 @@ static int filemap_extent_io(enum map_mode mode, int rw, struct bufvec *bufvec)
 		return segs;
 	assert(segs);
 
-	for (int i = 0; i < segs; i++) {
+	for (i = 0; i < segs; i++) {
 		block = seg[i].block;
 		count = seg[i].count;
 
diff --git a/user/inode.c b/user/inode.c
index 444bbc5..dc8dda7 100644
--- a/user/inode.c
+++ b/user/inode.c
@@ -29,9 +29,10 @@ static unsigned long hash(inum_t inum)
 
 void inode_leak_check(void)
 {
+	int i;
 	int leaks = 0;
 
-	for (int i = 0; i < HASH_SIZE; i++) {
+	for (i = 0; i < HASH_SIZE; i++) {
 		struct hlist_head *head = inode_hashtable + i;
 		struct inode *inode;
 		hlist_for_each_entry(inode, head, i_hash) {
diff --git a/user/kernel/Makefile b/user/kernel/Makefile
index 93229a1..aba11fe 100644
--- a/user/kernel/Makefile
+++ b/user/kernel/Makefile
@@ -10,8 +10,5 @@ obj-$(CONFIG_TUX3) += tux3.o
 tux3-objs += balloc.o btree.o buffer.o commit.o dir.o dleaf.o dleaf2.o \
 	filemap.o iattr.o ileaf.o inode.o log.o namei.o orphan.o replay.o \
 	super.o utility.o writeback.o xattr.o
-EXTRA_CFLAGS += -Werror -std=gnu99 -Wno-declaration-after-statement
-#EXTRA_CFLAGS += -DTUX3_FLUSHER=TUX3_FLUSHER_SYNC
-#EXTRA_CFLAGS += -DTUX3_FLUSHER=TUX3_FLUSHER_ASYNC_OWN
 EXTRA_CFLAGS += -DTUX3_FLUSHER=TUX3_FLUSHER_ASYNC_HACK
 endif
diff --git a/user/kernel/balloc.c b/user/kernel/balloc.c
index cc642d0..bf5d2c1 100644
--- a/user/kernel/balloc.c
+++ b/user/kernel/balloc.c
@@ -145,11 +145,13 @@ static int countmap_used(struct sb *sb, block_t group)
 #ifndef __KERNEL__
 void countmap_dump(struct sb *sb, block_t start, block_t count)
 {
+	block_t group;
 	unsigned groupbits = sb->groupbits, groupsize = 1 << groupbits;
 
-	for (block_t group = start; group < count; group++) {
+	for (group = start; group < count; group++) {
 		block_t block = group << groupbits;
 		block_t blocks = min_t(block_t, sb->volblocks - block, groupsize);
+
 		__tux3_dbg("%Lu: %i used, ", group, countmap_used(sb, group));
 		bitmap_dump(sb->bitmap, block, blocks);
 	}
@@ -164,10 +166,12 @@ void countmap_dump(struct sb *sb, block_t start, block_t count)
 block_t count_range(struct inode *inode, block_t start, block_t count)
 {
 	unsigned char ones[256];
+	block_t block;
+	int i;
 
 	assert(!(start & 7));
 
-	for (int i = 0; i < sizeof(ones); i++)
+	for (i = 0; i < sizeof(ones); i++)
 		ones[i] = bytebits(i);
 
 	struct sb *sb = tux_sb(inode->i_sb);
@@ -178,15 +182,20 @@ block_t count_range(struct inode *inode, block_t start, block_t count)
 	block_t tail = (count + 7) >> 3, total = 0;
 	unsigned offset = (start & mapmask) >> 3;
 
-	for (block_t block = start >> mapshift; block < blocks; block++) {
+	for (block = start >> mapshift; block < blocks; block++) {
+		struct buffer_head *buffer;
+		unsigned char *p, *top;
+		unsigned bytes;
+
 		trace_off("count block %x/%x", block, blocks);
-		struct buffer_head *buffer = blockread(mapping(inode), block);
+		buffer = blockread(mapping(inode), block);
 		if (!buffer)
 			return -1;
-		unsigned bytes = sb->blocksize - offset;
+		bytes = sb->blocksize - offset;
 		if (bytes > tail)
 			bytes = tail;
-		unsigned char *p = bufdata(buffer) + offset, *top = p + bytes;
+		p = bufdata(buffer) + offset;
+		top = p + bytes;
 		while (p < top)
 			total += ones[*p++];
 		blockput(buffer);
@@ -199,6 +208,7 @@ block_t count_range(struct inode *inode, block_t start, block_t count)
 void bitmap_dump(struct inode *inode, block_t start, block_t count)
 {
 	enum { show_used = 0 };
+	block_t block;
 	struct sb *sb = tux_sb(inode->i_sb);
 	unsigned mapshift = sb->blockbits + 3;
 	unsigned mapsize = 1 << mapshift;
@@ -208,20 +218,27 @@ void bitmap_dump(struct inode *inode, block_t start, block_t count)
 	block_t tail = (count + bit + 7) >> 3, begin = -1;
 
 	__tux3_dbg("%s regions in %Lu/%Lu: ", show_used ? "used" : "free", start, count);
-	for (block_t block = start >> mapshift; block < blocks; block++) {
+	for (block = start >> mapshift; block < blocks; block++) {
+		unsigned bytes;
+		unsigned char *data, *p, *top;
 		struct buffer_head *buffer = blockread(mapping(inode), block);
+
 		assert(buffer);
-		unsigned bytes = sb->blocksize - offset;
+		bytes = sb->blocksize - offset;
 		if (bytes > tail)
 			bytes = tail;
-		unsigned char *data = bufdata(buffer), *p = data + offset, *top = p + bytes;
+		data = bufdata(buffer);
+		p = data + offset;
+		top = p + bytes;
 		for (; p < top; p++, bit = 0) {
+			int i, mask;
 			unsigned c = *p;
+
 			if ((!c && ((begin >= 0) ^ show_used)))
 				continue;
 			if (((c == 0xff) && ((begin < 0) ^ show_used)))
 				continue;
-			for (int i = bit, mask = 1 << bit; i < 8; i++, mask <<= 1) {
+			for (i = bit, mask = 1 << bit; i < 8; i++, mask <<= 1) {
 				if (!(c & mask) ^ (begin < 0) ^ show_used)
 					continue;
 				block_t found = i + ((p - data) << 3) + (block << mapshift);
diff --git a/user/kernel/btree.c b/user/kernel/btree.c
index 16d602a..10b11b4 100644
--- a/user/kernel/btree.c
+++ b/user/kernel/btree.c
@@ -52,12 +52,12 @@ static inline unsigned bcount(struct bnode *node)
 
 static struct buffer_head *new_block(struct btree *btree)
 {
-	block_t block;
+	struct buffer_head *buffer;
+	block_t block = balloc_one(btree->sb);
 
-	block = balloc_one(btree->sb);
 	if (block < 0)
 		return ERR_PTR(block);
-	struct buffer_head *buffer = vol_getblk(btree->sb, block);
+	buffer = vol_getblk(btree->sb, block);
 	if (!buffer)
 		return ERR_PTR(-ENOMEM); // ERR_PTR me!!! and bfree?
 	return buffer;
@@ -197,8 +197,10 @@ void release_cursor(struct cursor *cursor)
 /* unused */
 void show_cursor(struct cursor *cursor, int depth)
 {
+	int i;
+
 	__tux3_dbg(">>> cursor %p/%i:", cursor, depth);
-	for (int i = 0; i < depth; i++) {
+	for (i = 0; i < depth; i++) {
 		__tux3_dbg(" [%Lx/%i]",
 			   bufindex(cursor->path[i].buffer),
 			   bufcount(cursor->path[i].buffer));
@@ -208,18 +210,25 @@ void show_cursor(struct cursor *cursor, int depth)
 
 static void cursor_check(struct cursor *cursor)
 {
+	tuxkey_t key;
+	block_t block;
+	int i;
+
 	if (cursor->level == -1)
 		return;
-	tuxkey_t key = 0;
-	block_t block = cursor->btree->root.block;
+	key = 0;
+	block = cursor->btree->root.block;
+
+	for (i = 0; i <= cursor->level; i++) {
+		struct bnode *bnode;
+		struct index_entry *entry;
 
-	for (int i = 0; i <= cursor->level; i++) {
 		assert(bufindex(cursor->path[i].buffer) == block);
 		if (i == cursor->level)
 			break;
 
-		struct bnode *bnode = level_node(cursor, i);
-		struct index_entry *entry = cursor->path[i].next - 1;
+		bnode = level_node(cursor, i);
+		entry = cursor->path[i].next - 1;
 		assert(bnode->entries <= entry);
 		assert(entry < bnode->entries + bcount(bnode));
 		/*
@@ -248,11 +257,13 @@ struct cursor *alloc_cursor(struct btree *btree, int extra)
 	struct cursor *cursor = malloc(alloc_cursor_size(maxlevel + 1));
 
 	if (cursor) {
+		int i;
+
 		cursor->btree = btree;
 		cursor->level = -1;
 #ifdef CURSOR_DEBUG
 		cursor->maxlevel = maxlevel;
-		for (int i = 0; i <= maxlevel; i++) {
+		for (i = 0; i <= maxlevel; i++) {
 			cursor->path[i].buffer = FREE_BUFFER; /* for debug */
 			cursor->path[i].next = FREE_NEXT; /* for debug */
 		}
@@ -498,12 +509,15 @@ out:
 
 void show_tree_range(struct btree *btree, tuxkey_t start, unsigned count)
 {
+	struct cursor *cursor;
+	struct buffer_head *buffer;
+
 	__tux3_dbg("%i level btree at %Li:\n",
 		   btree->root.depth, btree->root.block);
 	if (!has_root(btree))
 		return;
 
-	struct cursor *cursor = alloc_cursor(btree, 0);
+	cursor = alloc_cursor(btree, 0);
 	if (!cursor) {
 		tux3_err(btree->sb, "out of memory");
 		return;
@@ -513,7 +527,6 @@ void show_tree_range(struct btree *btree, tuxkey_t start, unsigned count)
 		goto out;
 	}
 
-	struct buffer_head *buffer;
 	do {
 		buffer = cursor_leafbuf(cursor);
 		assert((btree->ops->leaf_sniff)(btree, bufdata(buffer)));
@@ -792,6 +805,7 @@ static int try_bnode_merge(struct sb *sb, struct buffer_head *intobuf,
  */
 int btree_chop(struct btree *btree, tuxkey_t start, u64 len)
 {
+	int i;
 	struct sb *sb = btree->sb;
 	struct btree_ops *ops = btree->ops;
 	struct buffer_head **prev, *leafprev = NULL;
@@ -950,7 +964,7 @@ chop_root:
 out:
 	if (leafprev)
 		blockput(leafprev);
-	for (int i = 0; i < btree->root.depth; i++) {
+	for (i = 0; i < btree->root.depth; i++) {
 		if (prev[i])
 			blockput(prev[i]);
 	}
@@ -1005,6 +1019,11 @@ static void bnode_split(struct bnode *src, unsigned pos, struct bnode *dst)
  */
 static int insert_leaf(struct cursor *cursor, tuxkey_t childkey, struct buffer_head *leafbuf, int keep)
 {
+	struct buffer_head *newbuf;
+	struct bnode *newroot;
+	block_t newrootblock;
+	block_t oldrootblock;
+	int left_node;
 	struct btree *btree = cursor->btree;
 	struct sb *sb = btree->sb;
 	int level = btree->root.depth;
@@ -1017,6 +1036,11 @@ static int insert_leaf(struct cursor *cursor, tuxkey_t childkey, struct buffer_h
 		cursor_push(cursor, leafbuf, NULL);
 	}
 	while (level--) {
+		struct buffer_head *newbuf;
+		struct bnode *newnode;
+		unsigned half;
+		u64 newkey;
+		int child_is_left;
 		struct path_level *at = &cursor->path[level];
 		struct buffer_head *parentbuf = at->buffer;
 		struct bnode *parent = bufdata(parentbuf);
@@ -1033,19 +1057,19 @@ static int insert_leaf(struct cursor *cursor, tuxkey_t childkey, struct buffer_h
 		}
 
 		/* split a full index node */
-		struct buffer_head *newbuf = new_node(btree);
+		newbuf = new_node(btree);
 		if (IS_ERR(newbuf))
 			return PTR_ERR(newbuf);
 
-		struct bnode *newnode = bufdata(newbuf);
-		unsigned half = bcount(parent) / 2;
-		u64 newkey = be64_to_cpu(parent->entries[half].key);
+		newnode = bufdata(newbuf);
+		half = bcount(parent) / 2;
+		newkey = be64_to_cpu(parent->entries[half].key);
 
 		bnode_split(parent, half, newnode);
 		log_bnode_split(sb, bufindex(parentbuf), half, bufindex(newbuf));
 
 		/* if the cursor is in the new node, use that as the parent */
-		int child_is_left = at->next <= parent->entries + half;
+		child_is_left = at->next <= parent->entries + half;
 		if (!child_is_left) {
 			struct index_entry *newnext;
 			mark_buffer_unify_non(parentbuf);
@@ -1077,14 +1101,14 @@ static int insert_leaf(struct cursor *cursor, tuxkey_t childkey, struct buffer_h
 
 	/* Make new root bnode */
 	trace("add tree level");
-	struct buffer_head *newbuf = new_node(btree);
+	newbuf = new_node(btree);
 	if (IS_ERR(newbuf))
 		return PTR_ERR(newbuf);
 
-	struct bnode *newroot = bufdata(newbuf);
-	block_t newrootblock = bufindex(newbuf);
-	block_t oldrootblock = btree->root.block;
-	int left_node = bufindex(cursor->path[0].buffer) != childblock;
+	newroot = bufdata(newbuf);
+	newrootblock = bufindex(newbuf);
+	oldrootblock = btree->root.block;
+	left_node = bufindex(cursor->path[0].buffer) != childblock;
 	bnode_init_root(newroot, 2, oldrootblock, childblock, childkey);
 	cursor_root_add(cursor, newbuf, newroot->entries + 1 + !left_node);
 	log_bnode_root(sb, newrootblock, 2, oldrootblock, childblock, childkey);
@@ -1117,18 +1141,21 @@ int btree_insert_leaf(struct cursor *cursor, tuxkey_t key, struct buffer_head *l
  */
 static int btree_leaf_split(struct cursor *cursor, tuxkey_t key, tuxkey_t hint)
 {
-	trace("split leaf");
-	struct btree *btree = cursor->btree;
+	struct btree *btree;
 	struct buffer_head *newbuf;
+	struct buffer_head *leafbuf;
+	tuxkey_t newkey;
+
+	trace("split leaf");
+	btree = cursor->btree;
 
 	newbuf = new_leaf(btree);
 	if (IS_ERR(newbuf))
 		return PTR_ERR(newbuf);
 	log_balloc(btree->sb, bufindex(newbuf), 1);
 
-	struct buffer_head *leafbuf = cursor_leafbuf(cursor);
-	tuxkey_t newkey = btree->ops->leaf_split(btree, hint, bufdata(leafbuf),
-						 bufdata(newbuf));
+	leafbuf = cursor_leafbuf(cursor);
+	newkey = btree->ops->leaf_split(btree, hint, bufdata(leafbuf), bufdata(newbuf));
 	assert(cursor_this_key(cursor) < newkey);
 	assert(newkey < cursor_next_key(cursor));
 	if (key < newkey)
@@ -1249,18 +1276,23 @@ void init_btree(struct btree *btree, struct sb *sb, struct root root, struct btr
 
 int alloc_empty_btree(struct btree *btree)
 {
+	struct buffer_head *leafbuf;
+	struct bnode *rootnode;
+	block_t rootblock;
+	block_t leafblock;
 	struct sb *sb = btree->sb;
 	struct buffer_head *rootbuf = new_node(btree);
+
 	if (IS_ERR(rootbuf))
 		goto error;
-	struct buffer_head *leafbuf = new_leaf(btree);
+	leafbuf = new_leaf(btree);
 	if (IS_ERR(leafbuf))
 		goto error_leafbuf;
 
 	assert(!has_root(btree));
-	struct bnode *rootnode = bufdata(rootbuf);
-	block_t rootblock = bufindex(rootbuf);
-	block_t leafblock = bufindex(leafbuf);
+	rootnode = bufdata(rootbuf);
+	rootblock = bufindex(rootbuf);
+	leafblock = bufindex(leafbuf);
 	trace("root at %Lx", rootblock);
 	trace("leaf at %Lx", leafblock);
 	bnode_init_root(rootnode, 1, leafblock, 0, 0);
@@ -1288,14 +1320,19 @@ error:
 /* FIXME: right? and this should be done by btree_chop()? */
 int free_empty_btree(struct btree *btree)
 {
+	struct sb *sb;
+	struct buffer_head *rootbuf;
+	struct bnode *rootnode;
+	block_t leaf;
+	struct buffer_head *leafbuf;
 	struct btree_ops *ops = btree->ops;
 
 	if (!has_root(btree))
 		return 0;
 
 	assert(btree->root.depth == 1);
-	struct sb *sb = btree->sb;
-	struct buffer_head *rootbuf = vol_bread(sb, btree->root.block);
+	sb = btree->sb;
+	rootbuf = vol_bread(sb, btree->root.block);
 	if (!rootbuf)
 		return -EIO;
 	assert(bnode_sniff(bufdata(rootbuf)));
@@ -1303,10 +1340,10 @@ int free_empty_btree(struct btree *btree)
 	btree->root = no_root;
 	tux3_mark_btree_dirty(btree);
 
-	struct bnode *rootnode = bufdata(rootbuf);
+	rootnode = bufdata(rootbuf);
 	assert(bcount(rootnode) == 1);
-	block_t leaf = be64_to_cpu(rootnode->entries[0].block);
-	struct buffer_head *leafbuf = vol_find_get_block(sb, leaf);
+	leaf = be64_to_cpu(rootnode->entries[0].block);
+	leafbuf = vol_find_get_block(sb, leaf);
 
 	if (leafbuf && !leaf_need_redirect(sb, leafbuf)) {
 		/*
@@ -1436,13 +1473,13 @@ static int replay_bnode_change(struct sb *sb, block_t bnodeblock,
 			       u64 val1, u64 val2,
 			       void (*change)(struct bnode *, u64, u64))
 {
-	struct buffer_head *bnodebuf;
+	struct bnode *bnode;
+	struct buffer_head *bnodebuf = vol_getblk(sb, bnodeblock);
 
-	bnodebuf = vol_getblk(sb, bnodeblock);
 	if (!bnodebuf)
 		return -ENOMEM;	/* FIXME: error code */
 
-	struct bnode *bnode = bufdata(bnodebuf);
+	bnode = bufdata(bnodebuf);
 	change(bnode, val1, val2);
 
 	mark_buffer_unify_non(bnodebuf);
diff --git a/user/kernel/commit.c b/user/kernel/commit.c
index b64e617..12bd2c9 100644
--- a/user/kernel/commit.c
+++ b/user/kernel/commit.c
@@ -350,8 +350,10 @@ static int apply_defered_bfree(struct sb *sb, u64 val)
 
 static int commit_delta(struct sb *sb)
 {
+	int err;
+
 	trace("commit %i logblocks", be32_to_cpu(sb->super.logcount));
-	int err = save_sb(sb);
+	err = save_sb(sb);
 	if (err)
 		return err;
 
diff --git a/user/kernel/commit_flusher_hack.c b/user/kernel/commit_flusher_hack.c
index 6e7d05a..7006e0d 100644
--- a/user/kernel/commit_flusher_hack.c
+++ b/user/kernel/commit_flusher_hack.c
@@ -155,6 +155,7 @@ static int tux3_has_old_data(struct bdi_writeback *wb)
 
 static long tux3_wb_check_old_data_flush(struct bdi_writeback *wb)
 {
+	struct wb_writeback_work work;
 	/* Hack: dirty_expire_interval is not exported to module */
 	unsigned long expired;
 
@@ -179,13 +180,11 @@ static long tux3_wb_check_old_data_flush(struct bdi_writeback *wb)
 		return 1;
 	}
 
-	struct wb_writeback_work work = {
-		.nr_pages	= 0,
-		.sync_mode	= WB_SYNC_NONE,
-		.for_kupdate	= 1,
-		.range_cyclic	= 1,
-		.reason		= WB_REASON_PERIODIC,
-	};
+	work.nr_pages = 0;
+	work.sync_mode = WB_SYNC_NONE;
+	work.for_kupdate = 1;
+	work.range_cyclic = 1;
+	work.reason = WB_REASON_PERIODIC;
 
 	return tux3_wb_writeback(wb, &work);
 }
diff --git a/user/kernel/dir.c b/user/kernel/dir.c
index 1c0cfb3..caf88f1 100644
--- a/user/kernel/dir.c
+++ b/user/kernel/dir.c
@@ -126,6 +126,7 @@ void tux_update_dirent(struct inode *dir, struct buffer_head *buffer,
 loff_t tux_alloc_entry(struct inode *dir, const char *name, unsigned len,
 		       loff_t *size, struct buffer_head **hold)
 {
+	tux_dirent *limit;
 	unsigned delta = tux3_get_current_delta();
 	struct sb *sb = tux_sb(dir->i_sb);
 	tux_dirent *entry;
@@ -141,7 +142,7 @@ loff_t tux_alloc_entry(struct inode *dir, const char *name, unsigned len,
 		if (!buffer)
 			return -EIO;
 		entry = bufdata(buffer);
-		tux_dirent *limit = bufdata(buffer) + blocksize - reclen;
+		limit = bufdata(buffer) + blocksize - reclen;
 		while (entry <= limit) {
 			if (entry->rec_len == 0) {
 				blockput(buffer);
@@ -265,6 +266,7 @@ error:
 tux_dirent *tux_find_entry(struct inode *dir, const char *name, unsigned len,
 			   struct buffer_head **result, loff_t size)
 {
+	tux_dirent *entry, *limit;
 	struct sb *sb = tux_sb(dir->i_sb);
 	unsigned reclen = TUX_REC_LEN(len);
 	block_t block, blocks = size >> sb->blockbits;
@@ -272,12 +274,13 @@ tux_dirent *tux_find_entry(struct inode *dir, const char *name, unsigned len,
 
 	for (block = 0; block < blocks; block++) {
 		struct buffer_head *buffer = blockread(mapping(dir), block);
+
 		if (!buffer) {
 			err = -EIO; // need ERR_PTR for blockread!!!
 			goto error;
 		}
-		tux_dirent *entry = bufdata(buffer);
-		tux_dirent *limit = (void *)entry + sb->blocksize - reclen;
+		entry = bufdata(buffer);
+		limit = (void *)entry + sb->blocksize - reclen;
 		while (entry <= limit) {
 			if (entry->rec_len == 0) {
 				blockput(buffer);
@@ -330,14 +333,18 @@ int tux_readdir(struct file *file, void *state, filldir_t filldir)
 	assert(!(dir->i_size & sb->blockmask));
 
 	for (block = pos >> blockbits ; block < blocks; block++) {
+		void *base;
+		tux_dirent *limit, *entry;
 		struct buffer_head *buffer = blockread(mapping(dir), block);
+
 		if (!buffer)
 			return -EIO;
-		void *base = bufdata(buffer);
+		base = bufdata(buffer);
 		if (revalidate) {
 			if (offset) {
-				tux_dirent *entry = base + offset;
 				tux_dirent *p = base + (offset & sb->blockmask);
+
+				entry = base + offset;
 				while (p < entry && p->rec_len)
 					p = next_entry(p);
 				offset = (void *)p - base;
@@ -346,8 +353,8 @@ int tux_readdir(struct file *file, void *state, filldir_t filldir)
 			file->f_version = dir->i_version;
 			revalidate = 0;
 		}
-		tux_dirent *limit = base + sb->blocksize - TUX_REC_LEN(1);
-		for (tux_dirent *entry = base + offset; entry <= limit; entry = next_entry(entry)) {
+		limit = base + sb->blocksize - TUX_REC_LEN(1);
+		for (entry = base + offset; entry <= limit; entry = next_entry(entry)) {
 			if (entry->rec_len == 0) {
 				blockput(buffer);
 				tux_zero_len_error(dir, block);
@@ -433,6 +440,7 @@ int tux_delete_dirent(struct inode *dir, struct buffer_head *buffer,
 
 int tux_dir_is_empty(struct inode *dir)
 {
+	tux_dirent *entry, *limit;
 	struct sb *sb = tux_sb(dir->i_sb);
 	block_t block, blocks = dir->i_size >> sb->blockbits;
 	__be64 self = cpu_to_be64(tux_inode(dir)->inum);
@@ -443,8 +451,8 @@ int tux_dir_is_empty(struct inode *dir)
 		if (!buffer)
 			return -EIO;
 
-		tux_dirent *entry = bufdata(buffer);
-		tux_dirent *limit = bufdata(buffer) + sb->blocksize - TUX_REC_LEN(1);
+		entry = bufdata(buffer);
+		limit = bufdata(buffer) + sb->blocksize - TUX_REC_LEN(1);
 		for (; entry <= limit; entry = next_entry(entry)) {
 			if (!entry->rec_len) {
 				blockput(buffer);
diff --git a/user/kernel/dleaf.c b/user/kernel/dleaf.c
index 5b4a5ed..b5cbce7 100644
--- a/user/kernel/dleaf.c
+++ b/user/kernel/dleaf.c
@@ -110,29 +110,44 @@ static int dleaf_can_free(struct btree *btree, void *vleaf)
 
 void dleaf_dump(struct btree *btree, void *vleaf)
 {
+	struct group *group;
+	unsigned blocksize;
+	struct dleaf *leaf;
+	struct group *gdict, *gbase;
+	struct entry *edict, *entry;
+	struct diskextent *extents;
+
 	if (!tux3_trace)
 		return;
 
-	unsigned blocksize = btree->sb->blocksize;
-	struct dleaf *leaf = vleaf;
-	struct group *gdict = (void *)leaf + blocksize, *gbase = --gdict - dleaf_groups(leaf);
-	struct entry *edict = (void *)(gbase + 1), *entry = edict;
-	struct diskextent *extents = leaf->table;
+	blocksize = btree->sb->blocksize;
+	leaf = vleaf;
+	gdict = (void *)leaf + blocksize;
+	gbase = --gdict - dleaf_groups(leaf);
+	edict = (void *)(gbase + 1);
+	entry = edict;
+	extents = leaf->table;
 
 	__tux3_dbg("%i entry groups:\n", dleaf_groups(leaf));
-	for (struct group *group = gdict; group > gbase; group--) {
+	for (group = gdict; group > gbase; group--) {
+		struct entry *ebase;
+
 		__tux3_dbg("  %ti/%i:", gdict - group, group_count(group));
 		//__tux3_dbg(" [%i]", extents - leaf->table);
-		struct entry *ebase = entry - group_count(group);
+		ebase = entry - group_count(group);
 		while (entry > ebase) {
+			unsigned offset;
+			int count;
+			int i;
+
 			--entry;
-			unsigned offset = entry == edict - 1 ? 0 : entry_limit(entry + 1);
-			int count = entry_limit(entry) - offset;
+			offset = entry == edict - 1 ? 0 : entry_limit(entry + 1);
+			count = entry_limit(entry) - offset;
 			__tux3_dbg(" %Lx =>", get_index(group, entry));
 			//__tux3_dbg(" %p (%i)", entry, entry_limit(entry));
 			if (count < 0)
 				__tux3_dbg(" <corrupt>");
-			else for (int i = 0; i < count; i++) {
+			else for (i = 0; i < count; i++) {
 				struct diskextent extent = extents[offset + i];
 				__tux3_dbg(" %Lx", extent_block(extent));
 				if (extent_count(extent))
@@ -149,17 +164,21 @@ void dleaf_dump(struct btree *btree, void *vleaf)
 
 static int dleaf_free2(struct dleaf *leaf, unsigned blocksize)
 {
+	struct group *group;
 	struct group *gdict = (void *)leaf + blocksize, *gstop = gdict - dleaf_groups(leaf);
 	struct entry *edict = (void *)gstop, *entry = edict;
 	struct diskextent *extents = leaf->table;
 
-	for (struct group *group = gdict; group-- > gstop;)
+	for (group = gdict; group-- > gstop;)
 		extents += entry_limit(entry -= group_count(group));
 	return (void *)entry - (void *)extents;
 }
 
 static int dleaf_check(struct dleaf *leaf, unsigned blocksize)
 {
+	struct group *group;
+	unsigned keyhi;
+	struct diskextent *exbase;
 	struct group *gdict = (void *)leaf + blocksize, *gstop = gdict - dleaf_groups(leaf);
 	struct entry *edict = (void *)gstop, *estop = edict;
 	struct diskextent *extents = leaf->table;
@@ -169,24 +188,30 @@ static int dleaf_check(struct dleaf *leaf, unsigned blocksize)
 	if (!dleaf_groups(leaf))
 		return 0;
 
-	unsigned keyhi = 0;
-	struct diskextent *exbase = leaf->table;
-	for (struct group *group = gdict - 1; group >= gstop; group--) {
+	keyhi = 0;
+	exbase = leaf->table;
+	for (group = gdict - 1; group >= gstop; group--) {
+		struct entry *entry;
+		unsigned limit, keylo;
+		struct diskextent *exstop;
+		block_t block;
+
 		assert(group_keyhi(group) >= keyhi);
 		assert(group_count(group) > 0);
 		assert(group_count(group) <= MAX_GROUP_ENTRIES);
 		keyhi = group_keyhi(group);
-		struct entry *entry = estop;
+		entry = estop;
 		estop -= group_count(group);
-		unsigned limit = 0, keylo = -1;
+		limit = 0;
+		keylo = -1;
 		while (--entry >= estop) {
 			assert((int)entry_keylo(entry) > (int)keylo);
 			assert(entry_limit(entry) > limit);
 			keylo = entry_keylo(entry);
 			limit = entry_limit(entry);
 		}
-		struct diskextent *exstop = exbase + entry_limit(estop);
-		block_t block = 0;
+		exstop = exbase + entry_limit(estop);
+		block = 0;
 		while (exbase < exstop) {
 			assert(extent_block(*exbase) != block);
 			exbase++;
@@ -214,6 +239,12 @@ eek:
 
 static int dleaf_split_at(void *from, void *into, int split, unsigned blocksize)
 {
+	struct group *group;
+	unsigned cut;
+	unsigned size;
+	struct group *gdict2;
+	struct entry *edict2;
+	unsigned encopy;
 	struct dleaf *leaf = from, *leaf2 = into;
 	unsigned groups = dleaf_groups(leaf), groups2;
 	struct group *gdict = from + blocksize, *gbase = gdict - groups;
@@ -225,7 +256,7 @@ static int dleaf_split_at(void *from, void *into, int split, unsigned blocksize)
 	if (!groups)
 		return 0;
 	assert(split < entries);
-	for (struct group *group = gdict - 1; group >= gbase; group--, grsplit++) {
+	for (group = gdict - 1; group >= gbase; group--, grsplit++) {
 		if (recount + group_count(group) > split)
 			break;
 		edict -= group_count(group);
@@ -234,18 +265,18 @@ static int dleaf_split_at(void *from, void *into, int split, unsigned blocksize)
 	}
 
 	/* have to split a group? */
-	unsigned cut = split - recount;
+	cut = split - recount;
 	if (cut)
 		exsplit += entry_limit(edict - cut);
 	edict = (void *)gbase; /* restore it */
 	trace("split %i entries at group %i, entry %x", entries, grsplit, cut);
 	trace("split extents at %i", exsplit);
 	/* copy extents */
-	unsigned size = from + be16_to_cpu(leaf->free) - (void *)(leaf->table + exsplit);
+	size = from + be16_to_cpu(leaf->free) - (void *)(leaf->table + exsplit);
 	memcpy(leaf2->table, leaf->table + exsplit, size);
 
 	/* copy groups */
-	struct group *gdict2 = (void *)leaf2 + blocksize;
+	gdict2 = (void *)leaf2 + blocksize;
 	set_dleaf_groups(leaf2, groups2 = (groups - grsplit));
 	veccopy(gdict2 - dleaf_groups(leaf2), gbase, dleaf_groups(leaf2));
 	inc_group_count(gdict2 - 1, -cut);
@@ -255,15 +286,18 @@ static int dleaf_split_at(void *from, void *into, int split, unsigned blocksize)
 		set_group_count(gdict - groups, cut);
 
 	/* copy entries */
-	struct entry *edict2 = (void *)(gdict2 - groups2);
+	edict2 = (void *)(gdict2 - groups2);
 
 	assert((struct entry *)((void *)leaf + be16_to_cpu(leaf->used)) == edict - entries);
 
-	unsigned encopy = entries - split;
+	encopy = entries - split;
 	veccopy(edict2 - encopy, ebase, encopy);
-	if (cut)
-		for (int i = 1; i <= group_count((gdict2 - 1)); i++)
+	if (cut) {
+		int i;
+
+		for (i = 1; i <= group_count((gdict2 - 1)); i++)
 			inc_entry_limit(edict2 - i, -entry_limit(edict - split));
+	}
 	vecmove(gdict - groups - split, edict - split, split);
 
 	/* clean up */
@@ -283,16 +317,26 @@ static int dleaf_split_at(void *from, void *into, int split, unsigned blocksize)
  */
 static tuxkey_t dleaf_split(struct btree *btree, tuxkey_t hint, void *from, void *into)
 {
+	unsigned blocksize;
+	struct group *gdict, *gbase;
+	struct entry *edict;
+	struct entry *ebase;
+	unsigned entries;
+	unsigned groups2;
+	struct group *gdict2;
 	struct dleaf *leaf = from, *leaf2 = into;
+
 	assert(dleaf_sniff(btree, from));
-	unsigned blocksize = btree->sb->blocksize;
-	struct group *gdict = from + blocksize, *gbase = gdict - dleaf_groups(leaf);
-	struct entry *edict = (void *)gbase;
-	struct entry *ebase = (void *)leaf + be16_to_cpu(leaf->used);
-	unsigned entries = edict - ebase;
+	blocksize = btree->sb->blocksize;
+	gdict = from + blocksize;
+	gbase = gdict - dleaf_groups(leaf);
+	edict = (void *)gbase;
+	ebase = (void *)leaf + be16_to_cpu(leaf->used);
+	entries = edict - ebase;
+
 	assert(entries >= 2);
-	unsigned groups2 = dleaf_split_at(from, into, entries / 2, blocksize);
-	struct group *gdict2 = (void *)leaf2 + blocksize;
+	groups2 = dleaf_split_at(from, into, entries / 2, blocksize);
+	gdict2 = (void *)leaf2 + blocksize;
 
 	return get_index(gdict2 - 1, (struct entry *)(gdict2 - groups2) - 1);
 }
@@ -306,6 +350,9 @@ static tuxkey_t dleaf_split(struct btree *btree, tuxkey_t hint, void *from, void
  */
 int dleaf_merge(struct btree *btree, void *vinto, void *vfrom)
 {
+	unsigned size;
+	unsigned addgroups;
+	struct entry *ebase2, *ebase;
 	struct dleaf *leaf = vinto, *from = vfrom;
 	struct group *gdict = (void *)leaf + btree->sb->blocksize;
 	struct group *gstop = gdict - dleaf_groups(leaf);
@@ -355,15 +402,15 @@ int dleaf_merge(struct btree *btree, void *vinto, void *vfrom)
 	}
 
 	/* append extents */
-	unsigned size = be16_to_cpu(from->free) - sizeof(struct dleaf);
+	size = be16_to_cpu(from->free) - sizeof(struct dleaf);
 	memcpy((void *)leaf + free, from->table, size);
 	leaf->free = cpu_to_be16(free + size);
 
 	/* make space and append groups except for possibly merged group */
 	assert(sizeof(struct group) == sizeof(struct entry));
-	unsigned addgroups = dleaf_groups(from) - can_merge_group;
-	struct entry *ebase2 = (void *)from + be16_to_cpu(from->used);
-	struct entry *ebase = (void *)leaf + be16_to_cpu(leaf->used);
+	addgroups = dleaf_groups(from) - can_merge_group;
+	ebase2 = (void *)from + be16_to_cpu(from->used);
+	ebase = (void *)leaf + be16_to_cpu(leaf->used);
 	vecmove(ebase - addgroups, ebase, edict - ebase);
 	veccopy(gstop - addgroups, gstop2, addgroups);
 	ebase -= addgroups;
@@ -475,6 +522,8 @@ unsigned dwalk_count(struct dwalk *walk)
 /* unused */
 void dwalk_dump(struct dwalk *walk)
 {
+	struct diskextent *entry_exbase;
+
 	if (walk->leaf->table == walk->exstop) {
 		trace_on("empty leaf");
 		return;
@@ -483,7 +532,6 @@ void dwalk_dump(struct dwalk *walk)
 		trace_on("end of extent");
 		return;
 	}
-	struct diskextent *entry_exbase;
 	if (walk->entry + 1 == walk->estop + group_count(walk->group))
 		entry_exbase = walk->exbase;
 	else
@@ -549,10 +597,11 @@ int dwalk_next(struct dwalk *walk)
 /* Back to the previous extent. (i.e. rewind the previous dwalk_next()) */
 int dwalk_back(struct dwalk *walk)
 {
+	struct diskextent *entry_exbase;
+
 	/* first extent of this dleaf, or empty dleaf */
 	if (dwalk_first(walk))
 		return 0;
-	struct diskextent *entry_exbase;
 
 	if (walk->entry + 1 == walk->estop + group_count(walk->group))
 		entry_exbase = walk->exbase;
@@ -581,8 +630,11 @@ int dwalk_back(struct dwalk *walk)
  */
 int dwalk_probe(struct dleaf *leaf, unsigned blocksize, struct dwalk *walk, tuxkey_t key)
 {
+	unsigned keylo, keyhi;
+
 	trace("probe for 0x%Lx", key);
-	unsigned keylo = key & 0xffffff, keyhi = key >> 24;
+	keylo = key & 0xffffff;
+	keyhi = key >> 24;
 
 	walk->leaf = leaf;
 	walk->gdict = (void *)leaf + blocksize;
@@ -655,8 +707,10 @@ probe_entry:
 int dwalk_mock(struct dwalk *walk, tuxkey_t index, struct diskextent extent)
 {
 	if (!dleaf_groups(walk->leaf) || walk->entry == walk->estop || dwalk_index(walk) != index) {
+		unsigned keylo, keyhi;
 		trace("add entry 0x%Lx", index);
-		unsigned keylo = index & 0xffffff, keyhi = index >> 24;
+		keylo = index & 0xffffff;
+		keyhi = index >> 24;
 		if (!walk->mock.groups || group_keyhi(&walk->mock.group) != keyhi || group_count(&walk->mock.group) >= MAX_GROUP_ENTRIES) {
 			trace("add group %i", walk->mock.groups);
 			walk->exbase += entry_limit(&walk->mock.entry);
@@ -678,6 +732,15 @@ int dwalk_mock(struct dwalk *walk, tuxkey_t index, struct diskextent extent)
 /* This copy extents >= this extent to another dleaf. */
 void dwalk_copy(struct dwalk *walk, struct dleaf *dest)
 {
+	struct group *gdict2;
+	unsigned groups2;
+	struct entry *ebase;
+	unsigned entries;
+	struct entry *edict2;
+	struct diskextent *exend, *entry_exbase;
+	unsigned limit_adjust, extents;
+	unsigned gcount2;
+	struct entry *entry2, *estop2;
 	struct dleaf *leaf = walk->leaf;
 	unsigned blocksize = (void *)walk->gdict - (void *)leaf;
 
@@ -689,14 +752,12 @@ void dwalk_copy(struct dwalk *walk, struct dleaf *dest)
 		return;
 	}
 
-	struct group *gdict2 = (void *)dest + blocksize;
-	unsigned groups2 = walk->group + 1 - walk->gstop;
-	struct entry *ebase = (void *)leaf + be16_to_cpu(leaf->used);
-	unsigned entries = (walk->entry + 1) - ebase;
-	struct entry *edict2 = (struct entry *)(gdict2 - groups2);
-	struct diskextent *exend = (void *)leaf + be16_to_cpu(leaf->free);
-	struct diskextent *entry_exbase;
-	unsigned limit_adjust, extents;
+	gdict2 = (void *)dest + blocksize;
+	groups2 = walk->group + 1 - walk->gstop;
+	ebase = (void *)leaf + be16_to_cpu(leaf->used);
+	entries = (walk->entry + 1) - ebase;
+	edict2 = (struct entry *)(gdict2 - groups2);
+	exend = (void *)leaf + be16_to_cpu(leaf->free);
 
 	if (walk->entry + 1 == walk->estop + group_count(walk->group)) {
 		entry_exbase = walk->exbase;
@@ -711,12 +772,13 @@ void dwalk_copy(struct dwalk *walk, struct dleaf *dest)
 	veccopy(edict2 - entries, ebase, entries);
 	veccopy(dest->table, entry_exbase, extents);
 
-	unsigned gcount2 = (walk->entry + 1) - walk->estop;
+	gcount2 = (walk->entry + 1) - walk->estop;
 	set_dleaf_groups(dest, groups2);
 	dest->free = cpu_to_be16((void *)(dest->table + extents) - (void *)dest);
 	dest->used = cpu_to_be16((void *)(edict2 - entries) - (void *)dest);
 	set_group_count(gdict2 - 1, gcount2);
-	struct entry *entry2 = edict2 - 1, *estop2 = edict2 - gcount2;
+	entry2 = edict2 - 1;
+	estop2 = edict2 - gcount2;
 	while (entry2 >= estop2) {
 		inc_entry_limit(entry2, -limit_adjust);
 		entry2--;
@@ -727,10 +789,14 @@ void dwalk_copy(struct dwalk *walk, struct dleaf *dest)
 /* This removes extents >= this extent. (cursor position is dwalk_end()). */
 void dwalk_chop(struct dwalk *walk)
 {
+	struct dleaf *leaf;
+	struct entry *ebase;
+	void *entry;
+
 	trace(" ");
 	if (dwalk_end(walk))
 		return;
-	struct dleaf *leaf = walk->leaf;
+	leaf = walk->leaf;
 
 	if (dwalk_first(walk)) {
 		unsigned blocksize = (void *)walk->gdict - (void *)leaf;
@@ -745,8 +811,8 @@ void dwalk_chop(struct dwalk *walk)
 	/* If extent is first extent on this group, remove this group too */
 	dwalk_back(walk);
 
-	struct entry *ebase = walk->estop + group_count(walk->group);
-	void *entry = walk->entry;
+	ebase = walk->estop + group_count(walk->group);
+	entry = walk->entry;
 	set_dleaf_groups(leaf, walk->gdict - walk->group);
 	set_group_count(walk->group, ebase - walk->entry);
 	entry += (void *)walk->group - (void *)walk->gstop;
@@ -779,8 +845,11 @@ int dwalk_add(struct dwalk *walk, tuxkey_t index, struct diskextent extent)
 
 	trace("group %ti/%i", walk->gstop + groups - 1 - walk->group, groups);
 	if (!groups || dwalk_index(walk) != index) {
+		unsigned keylo, keyhi;
+
 		trace("add entry 0x%Lx", index);
-		unsigned keylo = index & 0xffffff, keyhi = index >> 24;
+		keylo = index & 0xffffff;
+		keyhi = index >> 24;
 		if (!groups || group_keyhi(walk->group) != keyhi || group_count(walk->group) >= MAX_GROUP_ENTRIES) {
 			trace("add group %i", groups);
 			/* will it fit? */
@@ -838,6 +907,7 @@ static void dwalk_update(struct dwalk *walk, struct diskextent extent)
  */
 static int dleaf_chop(struct btree *btree, tuxkey_t start, u64 len, void *vleaf)
 {
+	struct dwalk rewind;
 	struct sb *sb = btree->sb;
 	struct dleaf *leaf = vleaf;
 	struct dwalk walk;
@@ -860,7 +930,7 @@ static int dleaf_chop(struct btree *btree, tuxkey_t start, u64 len, void *vleaf)
 		if (!dwalk_next(&walk))
 			goto out;
 	}
-	struct dwalk rewind = walk;
+	rewind = walk;
 	do {
 		defer_bfree(sb, &sb->defree, dwalk_block(&walk), dwalk_count(&walk));
 		log_bfree(sb, dwalk_block(&walk), dwalk_count(&walk));
diff --git a/user/kernel/dleaf2.c b/user/kernel/dleaf2.c
index ac6d6cb..6e12272 100644
--- a/user/kernel/dleaf2.c
+++ b/user/kernel/dleaf2.c
@@ -113,17 +113,15 @@ static int dleaf2_init(struct btree *btree, void *leaf)
 
 static int dleaf2_sniff(struct btree *btree, void *leaf)
 {
+	struct extent ex;
 	struct dleaf2 *dleaf = leaf;
-	if (dleaf->magic != cpu_to_be16(TUX3_MAGIC_DLEAF2))
-		return 1;
-	if (!dleaf->count)
+
+	if (dleaf->magic != cpu_to_be16(TUX3_MAGIC_DLEAF2) ||
+	    !dleaf->count)
 		return 1;
 	/* Last should be sentinel */
-	struct extent ex;
 	get_extent(dleaf->table + be16_to_cpu(dleaf->count) - 1, &ex);
-	if (ex.physical == 0)
-		return 1;
-	return 0;
+	return ex.physical == 0;
 }
 
 static int dleaf2_can_free(struct btree *btree, void *leaf)
@@ -132,25 +130,24 @@ static int dleaf2_can_free(struct btree *btree, void *leaf)
 	unsigned count = be16_to_cpu(dleaf->count);
 
 	assert(dleaf2_sniff(btree, dleaf));
-	if (count > 1)
-		return 0;
-	return 1;
+	return count <= 1;
 }
 
 static void __dleaf2_dump(struct btree *btree, struct dleaf2 *dleaf,
 			  const char *prefix)
 {
-	if (!tux3_trace)
-		return;
+	if (tux3_trace) {
+		unsigned i;
 
-	unsigned i;
-	__tux3_dbg("%sdleaf %p, magic %x, count %u\n", prefix,
-		   dleaf, be16_to_cpu(dleaf->magic), be16_to_cpu(dleaf->count));
-	for (i = 0; i < be16_to_cpu(dleaf->count); i++) {
-		struct extent ex;
-		get_extent(dleaf->table + i, &ex);
-		__tux3_dbg("  logical %Lu, physical %Lu, version %u\n",
-			   ex.logical, ex.physical, ex.version);
+		__tux3_dbg("%sdleaf %p, magic %x, count %u\n", prefix,
+			   dleaf, be16_to_cpu(dleaf->magic), be16_to_cpu(dleaf->count));
+		for (i = 0; i < be16_to_cpu(dleaf->count); i++) {
+			struct extent ex;
+
+			get_extent(dleaf->table + i, &ex);
+			__tux3_dbg("  logical %Lu, physical %Lu, version %u\n",
+				   ex.logical, ex.physical, ex.version);
+		}
 	}
 }
 
@@ -170,20 +167,20 @@ __dleaf2_lookup_index(struct btree *btree, struct dleaf2 *dleaf,
 	/* Paranoia check: last should be sentinel (hole) */
 	if (dleaf->count) {
 		struct extent ex;
+
 		get_extent(dleaf->table + be16_to_cpu(dleaf->count) - 1, &ex);
 		assert(ex.physical == 0);
 	}
 #endif
 	/* FIXME: binsearch here */
-	while (start < limit) {
+	for (; start < limit; start++) {
 		if (index == get_logical(start))
-			return start;
+			break;
 		else if (index < get_logical(start)) {
 			/* should have diskextent2 of bottom logical on leaf */
 			assert(dleaf->table < start);
 			return start - 1;
 		}
-		start++;
 	}
 
 	return start;
@@ -338,6 +335,7 @@ static int dleaf2_chop(struct btree *btree, tuxkey_t start, u64 len, void *leaf)
 		if (dex > dleaf->table) {
 			/* If previous is hole, use it as sentinel */
 			struct extent prev;
+
 			get_extent(dex - 1, &prev);
 			if (prev.physical == 0) {
 				dex--;
@@ -358,9 +356,8 @@ static int dleaf2_chop(struct btree *btree, tuxkey_t start, u64 len, void *leaf)
 	dleaf->count = cpu_to_be16((dex - dleaf->table) + 1 + need_sentinel);
 
 	block = ex.physical + (start - ex.logical);
-	dex++;
 
-	while (dex < dex_limit) {
+	for (dex++; dex < dex_limit; dex++) {
 		unsigned count;
 
 		/* Get next diskextent2 */
@@ -378,7 +375,6 @@ static int dleaf2_chop(struct btree *btree, tuxkey_t start, u64 len, void *leaf)
 		}
 		start = ex.logical;
 		block = ex.physical;
-		dex++;
 	}
 
 	return 1;
@@ -466,9 +462,8 @@ static int dleaf2_read(struct btree *btree, tuxkey_t key_bottom,
 		       void *leaf, struct btree_key_range *key)
 {
 	struct dleaf2 *dleaf = leaf;
-	unsigned len;
+	unsigned len = __dleaf2_read(btree, key_bottom, key_limit, dleaf, key, 0);
 
-	len = __dleaf2_read(btree, key_bottom, key_limit, dleaf, key, 0);
 	key->start += len;
 	key->len -= len;
 
@@ -487,18 +482,14 @@ static int dleaf2_pre_write(struct btree *btree, tuxkey_t key_bottom,
 	 * hole, allocate segment.
 	 */
 	if (rq->overwrite) {
-		unsigned len;
-		int last, hole_len;
-
-		len = __dleaf2_read(btree, key_bottom, key_limit, dleaf, key,1);
-		last = rq->seg_cnt;
+		int hole_len;
+		unsigned len = __dleaf2_read(btree, key_bottom, key_limit, dleaf, key,1);
+		int last = rq->seg_cnt;
 
 		/* Remove hole from seg[] */
-		hole_len = 0;
-		while (last > rq->seg_idx && !rq->seg[last - 1].block) {
+		for (hole_len = 0; last > rq->seg_idx && !rq->seg[last - 1].block; last--) {
 			len -= rq->seg[last - 1].count;
 			hole_len += rq->seg[last - 1].count;
-			last--;
 		}
 		key->start += len;
 		key->len = hole_len;
@@ -518,13 +509,12 @@ static int dleaf2_pre_write(struct btree *btree, tuxkey_t key_bottom,
 static void dleaf2_resize(struct dleaf2 *dleaf, struct diskextent2 *head,
 			  int diff)
 {
-	void *limit = dleaf->table + be16_to_cpu(dleaf->count);
-
-	if (diff == 0)
-		return;
+	if (diff != 0) {
+		void *limit = dleaf->table + be16_to_cpu(dleaf->count);
 
-	memmove(head + diff, head, limit - (void *)head);
-	be16_add_cpu(&dleaf->count, diff);
+		memmove(head + diff, head, limit - (void *)head);
+		be16_add_cpu(&dleaf->count, diff);
+	}
 }
 
 /* Initialize sentinel by bottom key */
@@ -541,6 +531,7 @@ static inline void dleaf2_init_sentinel(struct sb *sb, struct dleaf2 *dleaf,
 static tuxkey_t dleaf2_split_at_center(struct dleaf2 *dleaf)
 {
 	struct extent ex;
+
 	get_extent(dleaf->table + be16_to_cpu(dleaf->count) / 2, &ex);
 	return ex.logical;
 }
@@ -566,9 +557,7 @@ struct dex_info {
 static void find_start_dex(struct btree *btree, struct dleaf2 *dleaf,
 			   block_t key_start, struct dex_info *info)
 {
-	struct diskextent2 *dex_limit;
-
-	dex_limit = dleaf->table + be16_to_cpu(dleaf->count);
+	struct diskextent2 *dex_limit = dleaf->table + be16_to_cpu(dleaf->count);
 
 	info->start_block = 0;
 	info->start_count = 0;
@@ -596,10 +585,9 @@ static void find_start_dex(struct btree *btree, struct dleaf2 *dleaf,
 static void find_end_dex(struct btree *btree, struct dleaf2 *dleaf,
 			 block_t key_end, struct dex_info *info)
 {
-	struct diskextent2 *limit, *dex_limit;
+	struct diskextent2 *limit;
 	u16 dleaf_count = be16_to_cpu(dleaf->count);
-
-	dex_limit = dleaf->table + dleaf_count;
+	struct diskextent2 *dex_limit = dleaf->table + dleaf_count;
 
 	info->need_sentinel = 0;
 	info->end_block = 0;
@@ -745,6 +733,7 @@ static int dleaf2_write(struct btree *btree, tuxkey_t key_bottom,
 	free_len = seg_len;
 	if (info.start_count) {
 		unsigned count = min_t(block_t, free_len, info.start_count);
+
 		if (info.start_block)
 			rq->seg_free(btree, info.start_block, count);
 		free_len -= count;
diff --git a/user/kernel/filemap.c b/user/kernel/filemap.c
index db60c79..cf766a6 100644
--- a/user/kernel/filemap.c
+++ b/user/kernel/filemap.c
@@ -64,8 +64,10 @@ enum map_mode {
 /* userland only */
 void show_segs(struct block_segment seg[], unsigned segs)
 {
+	int i;
+
 	__tux3_dbg("%i segs: ", segs);
-	for (int i = 0; i < segs; i++)
+	for (i = 0; i < segs; i++)
 		__tux3_dbg("%Lx/%i ", seg[i].block, seg[i].count);
 	__tux3_dbg("\n");
 }
@@ -94,6 +96,16 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 		       struct block_segment seg[], unsigned seg_max,
 		       enum map_mode mode)
 {
+	struct dwalk *walk;
+	struct dleaf *leaf;
+	block_t limit;
+	block_t index, seg_start, block;
+	struct dwalk headwalk;
+	unsigned below, above;
+	block_t below_block, above_block;
+	tuxkey_t tailkey;
+	int i;
+	struct dleaf *tail;
 	struct sb *sb = tux_sb(inode->i_sb);
 	struct btree *btree = &tux_inode(inode)->btree;
 	struct cursor *cursor = NULL;
@@ -140,8 +152,8 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 	}
 
 	/* dwalk_end(walk) is true with this. */
-	struct dwalk *walk = &(struct dwalk){ };
-	struct dleaf *leaf = NULL;
+	walk = &(struct dwalk){};
+	leaf = NULL;
 	if (has_root(btree)) {
 		cursor = alloc_cursor(btree, 1); /* allows for depth increase */
 		if (!cursor) {
@@ -161,7 +173,7 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 		/* btree doesn't have root yet */
 	}
 
-	block_t limit = start + count;
+	limit = start + count;
 	if (cursor) {
 		assert(start >= cursor_this_key(cursor));
 		/* do not overlap next leaf */
@@ -170,8 +182,8 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 	}
 	trace("--- index %Lx, limit %Lx ---", start, limit);
 
-	block_t index = start, seg_start, block;
-	struct dwalk headwalk = *walk;
+	index = start;
+	headwalk = *walk;
 	if (!dwalk_end(walk) && dwalk_index(walk) < start)
 		seg_start = dwalk_index(walk);
 	else
@@ -184,9 +196,11 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 			ex_index = limit;
 
 		if (index < ex_index) {
+			unsigned gap;
+
 			/* There is hole */
 			ex_index = min(ex_index, limit);
-			unsigned gap = ex_index - index;
+			gap = ex_index - index;
 			index = ex_index;
 			seg[segs++] = (struct block_segment){
 				.count = gap,
@@ -205,7 +219,8 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 		}
 	}
 	assert(segs);
-	unsigned below = start - seg_start, above = index - min(index, limit);
+	below = start - seg_start;
+	above = index - min(index, limit);
 	seg[0].block += below;
 	seg[0].count -= below;
 	seg[segs - 1].count -= above;
@@ -214,13 +229,12 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 		goto out_release;
 
 	/* Save blocks before change seg[] for below or above. */
-	block_t below_block, above_block;
 	below_block = seg[0].block - below;
 	above_block = seg[segs - 1].block + seg[segs - 1].count;
 	if (mode == MAP_REDIRECT) {
 		/* Change the seg[] to redirect this region as one extent */
 		count = 0;
-		for (int i = 0; i < segs; i++) {
+		for (i = 0; i < segs; i++) {
 			/* Logging overwritten extents as free */
 			if (seg[i].state != BLOCK_SEG_HOLE)
 				map_bfree(inode, seg[i].block, seg[i].count);
@@ -231,7 +245,7 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 		seg[0].count = count;
 		seg[0].state = BLOCK_SEG_HOLE;
 	}
-	for (int i = 0; i < segs; i++) {
+	for (i = 0; i < segs; i++) {
 		int newsegs;
 		if (seg[i].state != BLOCK_SEG_HOLE)
 			continue;
@@ -277,8 +291,8 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 	dwalk_redirect(&headwalk, leaf, bufdata(cursor_leafbuf(cursor)));
 	leaf = bufdata(cursor_leafbuf(cursor));
 
-	struct dleaf *tail = NULL;
-	tuxkey_t tailkey = 0; // probably can just use limit instead
+	tail = NULL;
+	tailkey = 0; // probably can just use limit instead
 	if (!dwalk_end(walk)) {
 		tail = malloc(sb->blocksize); // error???
 		dleaf_init(btree, tail);
@@ -288,10 +302,12 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 	/* Go back to region start and pack in new seg */
 	dwalk_chop(&headwalk);
 	index = start;
-	for (int i = -!!below; i < segs + !!above; i++) {
+	for (i = -!!below; i < segs + !!above; i++) {
 		if (dleaf_free(btree, leaf) < DLEAF_MAX_EXTENT_SIZE) {
+			struct buffer_head *newbuf;
+
 			mark_buffer_dirty_non(cursor_leafbuf(cursor));
-			struct buffer_head *newbuf = new_leaf(btree);
+			newbuf = new_leaf(btree);
 			if (IS_ERR(newbuf)) {
 				segs = PTR_ERR(newbuf);
 				goto out_create;
@@ -327,10 +343,12 @@ static int map_region1(struct inode *inode, block_t start, unsigned count,
 	}
 	if (tail) {
 		if (!dleaf_merge(btree, leaf, tail)) {
+			struct buffer_head *newbuf;
+
 			mark_buffer_dirty_non(cursor_leafbuf(cursor));
 			assert(dleaf_groups(tail) >= 1);
 			/* Tail does not fit, add it as a new btree leaf */
-			struct buffer_head *newbuf = new_leaf(btree);
+			newbuf = new_leaf(btree);
 			if (IS_ERR(newbuf)) {
 				segs = PTR_ERR(newbuf);
 				goto out_create;
@@ -614,6 +632,8 @@ int tux3_filemap_redirect_io(int rw, struct bufvec *bufvec)
 
 static int filemap_extent_io(enum map_mode mode, int rw, struct bufvec *bufvec)
 {
+	int segs;
+	int i;
 	struct inode *inode = bufvec_inode(bufvec);
 	block_t block, index = bufvec_contig_index(bufvec);
 	unsigned count = bufvec_contig_count(bufvec);
@@ -623,12 +643,12 @@ static int filemap_extent_io(enum map_mode mode, int rw, struct bufvec *bufvec)
 	/* FIXME: For now, this is only for write */
 	assert(mode != MAP_READ);
 
-	int segs = map_region(inode, index, count, seg, ARRAY_SIZE(seg), mode);
+	segs = map_region(inode, index, count, seg, ARRAY_SIZE(seg), mode);
 	if (segs < 0)
 		return segs;
 	assert(segs);
 
-	for (int i = 0; i < segs; i++) {
+	for (i = 0; i < segs; i++) {
 		block = seg[i].block;
 		count = seg[i].count;
 
diff --git a/user/kernel/iattr.c b/user/kernel/iattr.c
index 1a87781..e8a6377 100644
--- a/user/kernel/iattr.c
+++ b/user/kernel/iattr.c
@@ -70,9 +70,10 @@ static inline fixed32 tuxtime(const struct timespec ts)
 
 static unsigned encode_asize(unsigned bits)
 {
+	int kind;
 	unsigned need = 0;
 
-	for (int kind = 0; kind < VAR_ATTRS; kind++)
+	for (kind = 0; kind < VAR_ATTRS; kind++)
 		if ((bits & (1 << kind)))
 			need += atsize[kind] + 2;
 	return need;
@@ -84,10 +85,11 @@ int attr_check(void *attrs, unsigned size)
 	void *limit = attrs + size;
 	unsigned head;
 
-	while (attrs < limit - 1)
-	{
+	while (attrs < limit - 1) {
+		unsigned kind;
+
 		attrs = decode16(attrs, &head);
-		unsigned kind = head >> 12;
+		kind = head >> 12;
 		if (kind >= MAX_ATTRS)
 			return 0;
 		if (attrs + atsize[kind] > limit)
@@ -99,10 +101,11 @@ int attr_check(void *attrs, unsigned size)
 
 void dump_attrs(struct inode *inode)
 {
+	int kind;
 	//tux3_dbg("present = %x", inode->present);
 	struct tux3_inode *tuxnode = tux_inode(inode);
 
-	for (int kind = 0; kind < MAX_ATTRS; kind++) {
+	for (kind = 0; kind < MAX_ATTRS; kind++) {
 		if (!(tux_inode(inode)->present & (1 << kind)))
 			continue;
 		switch (kind) {
@@ -142,13 +145,14 @@ void *encode_kind(void *attrs, unsigned kind, unsigned version)
 static void *encode_attrs(struct btree *btree, void *data, void *attrs,
 			  unsigned size)
 {
+	int kind;
 	struct sb *sb = btree->sb;
 	struct iattr_req_data *iattr_data = data;
 	struct tux3_iattr_data *idata = iattr_data->idata;
 	struct btree *attr_btree = iattr_data->btree;
 	void *limit = attrs + size - 3;
 
-	for (int kind = 0; kind < VAR_ATTRS; kind++) {
+	for (kind = 0; kind < VAR_ATTRS; kind++) {
 		if (!(idata->present & (1 << kind)))
 			continue;
 		if (attrs >= limit)
@@ -193,14 +197,19 @@ void *decode_kind(void *attrs, unsigned *kind, unsigned *version)
 
 static void *decode_attrs(struct inode *inode, void *attrs, unsigned size)
 {
-	trace_off("decode %u attr bytes", size);
-	struct sb *sb = tux_sb(inode->i_sb);
-	struct tux3_inode *tuxnode = tux_inode(inode);
-	struct root btree_root = no_root;
-	void *limit = attrs + size;
+	struct sb *sb;
+	struct tux3_inode *tuxnode;
+	struct root btree_root;
+	void *limit;
 	u64 v64;
 	u32 v32;
 
+	trace_off("decode %u attr bytes", size);
+	sb = tux_sb(inode->i_sb);
+	tuxnode = tux_inode(inode);
+	btree_root = no_root;
+	limit = attrs + size;
+
 	while (attrs < limit - 1) {
 		unsigned version, kind;
 		attrs = decode_kind(attrs, &kind, &version);
diff --git a/user/kernel/ileaf.c b/user/kernel/ileaf.c
index c12d4de..e244600 100644
--- a/user/kernel/ileaf.c
+++ b/user/kernel/ileaf.c
@@ -105,19 +105,26 @@ static int ileaf_can_free(struct btree *btree, void *leaf)
 
 static void ileaf_dump(struct btree *btree, void *vleaf)
 {
+	int i;
+	struct ileaf_attr_ops *attr_ops;
+	struct ileaf *leaf;
+	inum_t inum;
+	__be16 *dict;
+	unsigned offset;
+
 	if (!tux3_trace)
 		return;
 
-	struct ileaf_attr_ops *attr_ops = btree->ops->private_ops;
-	struct ileaf *leaf = vleaf;
-	inum_t inum = ibase(leaf);
-	__be16 *dict = ileaf_dict(btree, leaf);
-	unsigned offset = 0;
+	attr_ops = btree->ops->private_ops;
+	leaf = vleaf;
+	inum = ibase(leaf);
+	dict = ileaf_dict(btree, leaf);
+	offset = 0;
 
 	__tux3_dbg("ileaf 0x%Lx/%i (%x bytes free)",
 		   ibase(leaf), icount(leaf), ileaf_free(btree, leaf));
 
-	for (int i = 0; i < icount(leaf); i++, inum++) {
+	for (i = 0; i < icount(leaf); i++, inum++) {
 		int limit = __atdict(dict, i + 1), size = limit - offset;
 		if (!size)
 			continue;
@@ -142,9 +149,13 @@ static void ileaf_dump(struct btree *btree, void *vleaf)
 
 void *ileaf_lookup(struct btree *btree, inum_t inum, struct ileaf *leaf, unsigned *result)
 {
+	tuxkey_t at, size;
+	void *attrs;
+
 	assert(inum >= ibase(leaf));
-	tuxkey_t at = inum - ibase(leaf), size = 0;
-	void *attrs = NULL;
+	at = inum - ibase(leaf);
+	size = 0;
+	attrs = NULL;
 
 	trace("lookup inode 0x%Lx, %Lx + %Lx", inum, ibase(leaf), at);
 	if (at < icount(leaf)) {
@@ -159,9 +170,10 @@ void *ileaf_lookup(struct btree *btree, inum_t inum, struct ileaf *leaf, unsigne
 
 static int isinorder(struct btree *btree, struct ileaf *leaf)
 {
+	int i, offset, limit;
 	__be16 *dict = ileaf_dict(btree, leaf);
 
-	for (int i = 0, offset = 0, limit; i < icount(leaf); i++, offset = limit)
+	for (i = 0, offset = 0, limit; i < icount(leaf); i++, offset = limit)
 		if ((limit = __atdict(dict, i + 1)) < offset)
 			return 0;
 	return 1;
@@ -202,10 +214,22 @@ static void ileaf_trim(struct btree *btree, struct ileaf *leaf)
 static tuxkey_t ileaf_split(struct btree *btree, tuxkey_t hint,
 			    void *from, void *into)
 {
+	struct ileaf *leaf, *dest;
+	__be16 *dict, *destdict;
+	unsigned at;
+	unsigned split, free;
+	int i;
+#ifdef SPLIT_AT_INUM
+	inum_t round;
+#else
+	unsigned hi;
+#endif
+
 	assert(ileaf_sniff(btree, from));
-	struct ileaf *leaf = from, *dest = into;
-	__be16 *dict = ileaf_dict(btree, from);
-	__be16 *destdict = ileaf_dict(btree, into);
+	leaf = from;
+	dest = into;
+	dict = ileaf_dict(btree, from);
+	destdict = ileaf_dict(btree, into);
 
 #ifdef SPLIT_AT_INUM
 	/*
@@ -216,10 +240,11 @@ static tuxkey_t ileaf_split(struct btree *btree, tuxkey_t hint,
 		hint++;
 
 	trace("split at inum 0x%Lx", hint);
-	unsigned at = min_t(tuxkey_t, hint - ibase(leaf), icount(leaf));
+	at = min_t(tuxkey_t, hint - ibase(leaf), icount(leaf));
 #else
 	/* binsearch inum starting nearest middle of block */
-	unsigned at = 1, hi = icount(leaf);
+	at = 1;
+	hi = icount(leaf);
 	while (at < hi) {
 		int mid = (at + hi) / 2;
 		if (*(dict - mid) < (btree->sb->blocksize / 2))
@@ -229,18 +254,19 @@ static tuxkey_t ileaf_split(struct btree *btree, tuxkey_t hint,
 	}
 #endif
 	/* should trim leading empty inodes on copy */
-	unsigned split = atdict(dict, at), free = atdict(dict, icount(leaf));
+	split = atdict(dict, at);
+	free = atdict(dict, icount(leaf));
 	trace("split at %x of %x", at, icount(leaf));
 	trace("copy out %x bytes at %x", free - split, split);
 	assert(free >= split);
 	memcpy(dest->table, leaf->table + split, free - split);
 	dest->count = cpu_to_be16(icount(leaf) - at);
 	veccopy(destdict - icount(dest), dict - icount(leaf), icount(dest));
-	for (int i = 1; i <= icount(dest); i++)
+	for (i = 1; i <= icount(dest); i++)
 		add_idict(destdict - i, -split);
 #ifdef SPLIT_AT_INUM
 	/* round down to multiple of 64 above ibase */
-	inum_t round = hint & ~(inum_t)(btree->entries_per_leaf - 1);
+	round = hint & ~(inum_t)(btree->entries_per_leaf - 1);
 	dest->ibase = cpu_to_be64(round > ibase(leaf) + icount(leaf) ? round : hint);
 #else
 	dest->ibase = cpu_to_be64(ibase(leaf) + at);
@@ -253,6 +279,14 @@ static tuxkey_t ileaf_split(struct btree *btree, tuxkey_t hint,
 
 static int ileaf_merge(struct btree *btree, void *vinto, void *vfrom)
 {
+	tuxkey_t fromibase;
+	unsigned count;
+	int hole;
+	__be16 *dict, *fromdict;
+	int need_size;
+	unsigned limit;
+	__be16 __limit;
+	unsigned fromlimit;
 	struct ileaf *into = vinto, *from = vfrom;
 	unsigned fromcount = icount(from);
 
@@ -261,27 +295,27 @@ static int ileaf_merge(struct btree *btree, void *vinto, void *vfrom)
 		return 1;
 
 	assert(ibase(from) > ibase(into));
-	tuxkey_t fromibase = ibase(from);
-	unsigned count = icount(into);
-	int hole = fromibase - ibase(into) + count;
+	fromibase = ibase(from);
+	count = icount(into);
+	hole = fromibase - ibase(into) + count;
 
-	__be16 *dict = ileaf_dict(btree, into);
-	__be16 *fromdict = ileaf_dict(btree, from);
-	int need_size = hole * sizeof(*dict) + ileaf_need(btree, from);
+	dict = ileaf_dict(btree, into);
+	fromdict = ileaf_dict(btree, from);
+	need_size = hole * sizeof(*dict) + ileaf_need(btree, from);
 
 	if (ileaf_free(btree, into) < need_size)
 		return 0;
 
 	/* Fill hole of dict until from_ibase */
-	unsigned limit = atdict(dict, count);
-	__be16 __limit = cpu_to_be16(limit);
+	limit = atdict(dict, count);
+	__limit = cpu_to_be16(limit);
 	while (hole--) {
 		count++;
 		*(dict - count) = __limit;
 	}
 
 	/* Copy data from "from" */
-	unsigned fromlimit = atdict(fromdict, fromcount);
+	fromlimit = atdict(fromdict, fromcount);
 	memcpy(into->table + limit, from->table, fromlimit);
 
 	/* Adjust copying fromdict */
@@ -343,6 +377,7 @@ static int ileaf_chop(struct btree *btree, tuxkey_t start, u64 len, void *leaf)
 static void *ileaf_resize(struct btree *btree, tuxkey_t inum, void *vleaf,
 			  int newsize)
 {
+	void *attrs;
 	struct ileaf *ileaf = vleaf;
 	__be16 *dict = ileaf_dict(btree, ileaf);
 	unsigned count = icount(ileaf);
@@ -383,15 +418,17 @@ overflow:
 		ileaf->count = cpu_to_be16(count);
 	}
 
-	void *attrs = ileaf->table + offset;
+	attrs = ileaf->table + offset;
 	if (newsize != size) {
+		int diff;
 		/* Expand/Shrink attr space */
 		unsigned limit = __atdict(dict, count);
+
 		assert(limit >= offset + size);
 		memmove(attrs + newsize, attrs + size, limit - offset - size);
 
 		/* Adjust dict */
-		int diff = newsize - size;
+		diff = newsize - size;
 		at++;
 		while (at <= count) {
 			add_idict(dict - at, diff);
diff --git a/user/kernel/inode.c b/user/kernel/inode.c
index b31fea5..d73e086 100644
--- a/user/kernel/inode.c
+++ b/user/kernel/inode.c
@@ -414,6 +414,7 @@ static int check_present(struct inode *inode)
 
 static int open_inode(struct inode *inode)
 {
+	struct ileaf_req rq;
 	struct sb *sb = tux_sb(inode->i_sb);
 	struct btree *itree = itree_btree(sb);
 	int err;
@@ -427,13 +428,9 @@ static int open_inode(struct inode *inode)
 		goto out;
 
 	/* Read inode attribute from inode btree */
-	struct ileaf_req rq = {
-		.key = {
-			.start	= tux_inode(inode)->inum,
-			.len	= 1,
-		},
-		.data	= inode,
-	};
+	rq.key.start = tux_inode(inode)->inum;
+	rq.key.len = 1;
+	rq.data = inode;
 	err = btree_read(cursor, &rq.key);
 	if (!err) {
 		check_present(inode);
@@ -481,6 +478,9 @@ struct inode *tux3_ilookup(struct sb *sb, inum_t inum)
 static int save_inode(struct inode *inode, struct tux3_iattr_data *idata,
 		      unsigned delta)
 {
+	struct cursor *cursor;
+	struct iattr_req_data iattr_data;
+	struct ileaf_req rq;
 	struct sb *sb = tux_sb(inode->i_sb);
 	struct btree *itree = itree_btree(sb);
 	inum_t inum = tux_inode(inode)->inum;
@@ -499,7 +499,7 @@ static int save_inode(struct inode *inode, struct tux3_iattr_data *idata,
 		return err;
 #endif
 
-	struct cursor *cursor = alloc_cursor(itree, 1); /* +1 for new depth */
+	cursor = alloc_cursor(itree, 1); /* +1 for new depth */
 	if (!cursor)
 		return -ENOMEM;
 
@@ -513,18 +513,12 @@ static int save_inode(struct inode *inode, struct tux3_iattr_data *idata,
 	}
 
 	/* Write inode attributes to inode btree */
-	struct iattr_req_data iattr_data = {
-		.idata	= idata,
-		.btree	= &tux_inode(inode)->btree,
-		.inode	= inode,
-	};
-	struct ileaf_req rq = {
-		.key = {
-			.start	= inum,
-			.len	= 1,
-		},
-		.data		= &iattr_data,
-	};
+	iattr_data.idata = idata,
+	iattr_data.btree = &tux_inode(inode)->btree,
+	iattr_data.inode = inode,
+	rq.key.start = inum;
+	rq.key.len = 1;
+	rq.data = &iattr_data;
 	err = btree_write(cursor, &rq.key);
 	if (err)
 		goto error_release;
diff --git a/user/kernel/log.c b/user/kernel/log.c
index b96fa00..b5b763e 100644
--- a/user/kernel/log.c
+++ b/user/kernel/log.c
@@ -228,10 +228,12 @@ int tux3_logmap_io(int rw, struct bufvec *bufvec)
 
 static void log_intent(struct sb *sb, u8 intent)
 {
+	unsigned char *data;
+
 	/* Check whether array is uptodate */
 	BUILD_BUG_ON(ARRAY_SIZE(log_size) != LOG_TYPES);
 
-	unsigned char *data = log_begin(sb, 1);
+	data = log_begin(sb, 1);
 	*data++ = intent;
 	log_end(sb, data);
 }
@@ -526,9 +528,11 @@ int unstash(struct sb *sb, struct stash *stash, unstash_t actor)
 	if (flink_empty(head))
 		return 0;
 	while (1) {
+		u64 *vec, *top;
+
 		page = __flink_next_entry(head, struct page, private);
-		u64 *vec = page_address(page);
-		u64 *top = page_address(page) + PAGE_SIZE;
+		vec = page_address(page);
+		top = page_address(page) + PAGE_SIZE;
 
 		if (top == stash->top)
 			top = stash->pos;
@@ -551,16 +555,15 @@ int unstash(struct sb *sb, struct stash *stash, unstash_t actor)
  */
 int stash_walk(struct sb *sb, struct stash *stash, unstash_t actor)
 {
+	struct link *link, *first;
 	struct flink_head *head = &stash->head;
-	struct page *page;
 
 	if (flink_empty(head))
 		return 0;
 
-	struct link *link, *first;
 	link = first = flink_next(head);
 	do {
-		page = __link_entry(link, struct page, private);
+		struct page *page = __link_entry(link, struct page, private);
 		u64 *vec = page_address(page);
 		u64 *top = page_address(page) + PAGE_SIZE;
 
diff --git a/user/kernel/namei.c b/user/kernel/namei.c
index 6da96ae..b1bc6fd 100644
--- a/user/kernel/namei.c
+++ b/user/kernel/namei.c
@@ -187,11 +187,12 @@ static int tux3_symlink(struct inode *dir, struct dentry *dentry,
 
 static int tux3_unlink(struct inode *dir, struct dentry *dentry)
 {
+	int err;
 	struct inode *inode = dentry->d_inode;
 	struct sb *sb = tux_sb(inode->i_sb);
 
 	change_begin(sb);
-	int err = tux_del_dirent(dir, dentry);
+	err = tux_del_dirent(dir, dentry);
 	if (!err) {
 		tux3_iattrdirty(inode);
 		inode->i_ctime = dir->i_ctime;
diff --git a/user/kernel/orphan.c b/user/kernel/orphan.c
index 916bb4e..6e89b35 100644
--- a/user/kernel/orphan.c
+++ b/user/kernel/orphan.c
@@ -112,6 +112,7 @@ int tux3_unify_orphan_add(struct sb *sb, struct list_head *orphan_add)
 
 	down_write(&cursor->btree->lock);
 	while (!list_empty(orphan_add)) {
+		struct ileaf_req rq;
 		struct tux3_inode *tuxnode =orphan_list_entry(orphan_add->next);
 
 		trace("inum %Lu", tuxnode->inum);
@@ -122,12 +123,8 @@ int tux3_unify_orphan_add(struct sb *sb, struct list_head *orphan_add)
 			goto out;
 
 		/* Write orphan inum into orphan btree */
-		struct ileaf_req rq = {
-			.key = {
-				.start	= tuxnode->inum,
-				.len	= 1,
-			},
-		};
+		rq.key.start =tuxnode->inum;
+		rq.key.len = 1;
 		err = btree_write(cursor, &rq.key);
 		release_cursor(cursor);
 		if (err)
@@ -360,6 +357,7 @@ static int load_enum_inode(struct btree *btree, inum_t inum, void *attrs,
 /* Load orphan inode from sb->otree */
 static int load_otree_orphan_inode(struct replay *rp)
 {
+	struct cursor *cursor;
 	struct sb *sb = rp->sb;
 	struct btree *otree = otree_btree(sb);
 	struct ileaf_enumrate_cb cb = {
@@ -371,7 +369,7 @@ static int load_otree_orphan_inode(struct replay *rp)
 	if (!has_root(&sb->otree))
 		return 0;
 
-	struct cursor *cursor = alloc_cursor(otree, 0);
+	cursor = alloc_cursor(otree, 0);
 	if (!cursor)
 		return -ENOMEM;
 
diff --git a/user/kernel/utility.c b/user/kernel/utility.c
index 1c76fb5..555225b 100644
--- a/user/kernel/utility.c
+++ b/user/kernel/utility.c
@@ -6,8 +6,10 @@
 int vecio(int rw, struct block_device *dev, loff_t offset, unsigned vecs, struct bio_vec *vec,
 	bio_end_io_t endio, void *info)
 {
+	struct bio *bio;
+
 	BUG_ON(vecs > bio_get_nr_vecs(dev));
-	struct bio *bio = bio_alloc(GFP_NOIO, vecs);
+	bio = bio_alloc(GFP_NOIO, vecs);
 	if (!bio)
 		return -ENOMEM;
 	bio->bi_bdev = dev;
diff --git a/user/kernel/xattr.c b/user/kernel/xattr.c
index 4b0d841..46b823a 100644
--- a/user/kernel/xattr.c
+++ b/user/kernel/xattr.c
@@ -90,6 +90,8 @@ static struct buffer_head *blockread_unatom(struct inode *atable, atom_t atom,
 
 static loff_t unatom_dict_read(struct inode *atable, atom_t atom)
 {
+	loff_t where;
+	__be64 *unatom_dict;
 	struct buffer_head *buffer;
 	unsigned offset;
 
@@ -97,8 +99,8 @@ static loff_t unatom_dict_read(struct inode *atable, atom_t atom)
 	if (!buffer)
 		return -EIO;
 
-	__be64 *unatom_dict = bufdata(buffer);
-	loff_t where = be64_to_cpu(unatom_dict[offset]);
+	unatom_dict = bufdata(buffer);
+	where = be64_to_cpu(unatom_dict[offset]);
 	blockput(buffer);
 
 	return where;
@@ -106,6 +108,7 @@ static loff_t unatom_dict_read(struct inode *atable, atom_t atom)
 
 static loff_t unatom_dict_write(struct inode *atable, atom_t atom, loff_t where)
 {
+	__be64 *unatom_dict;
 	unsigned delta = tux3_get_current_delta();
 	struct buffer_head *buffer, *clone;
 	loff_t old;
@@ -127,7 +130,7 @@ static loff_t unatom_dict_write(struct inode *atable, atom_t atom, loff_t where)
 		return PTR_ERR(clone);
 	}
 
-	__be64 *unatom_dict = bufdata(clone);
+	unatom_dict = bufdata(clone);
 	old = be64_to_cpu(unatom_dict[offset]);
 	unatom_dict[offset] = cpu_to_be64(where);
 	mark_buffer_dirty_non(clone);
@@ -144,11 +147,13 @@ static int is_free_unatom(loff_t where)
 /* Convert atom to name */
 static int unatom(struct inode *atable, atom_t atom, char *name, unsigned size)
 {
+	tux_dirent *entry;
+	unsigned len;
 	struct sb *sb = tux_sb(atable->i_sb);
 	struct buffer_head *buffer;
 	int err;
-
 	loff_t where = unatom_dict_read(atable, atom);
+
 	if (where < 0) {
 		err = where;
 		goto error;
@@ -159,13 +164,13 @@ static int unatom(struct inode *atable, atom_t atom, char *name, unsigned size)
 		err = -EIO;
 		goto error;
 	}
-	tux_dirent *entry = bufdata(buffer) + (where & sb->blockmask);
+	entry = bufdata(buffer) + (where & sb->blockmask);
 	if (entry_atom(entry) != atom) {
 		tux3_fs_error(sb, "atom %x reverse entry broken", atom);
 		err = -EIO;
 		goto error_blockput;
 	}
-	unsigned len = entry->name_len;
+	len = entry->name_len;
 	if (size) {
 		if (len > size) {
 			err = -ERANGE;
@@ -186,6 +191,7 @@ error:
 /* Find free atom */
 static int get_freeatom(struct inode *atable, atom_t *atom)
 {
+	loff_t next;
 	struct sb *sb = tux_sb(atable->i_sb);
 	atom_t freeatom = sb->freeatom;
 
@@ -194,7 +200,7 @@ static int get_freeatom(struct inode *atable, atom_t *atom)
 		return 0;
 	}
 
-	loff_t next = unatom_dict_read(atable, freeatom);
+	next = unatom_dict_read(atable, freeatom);
 	if (next < 0)
 		return next;
 	if (!is_free_unatom(next)) {
@@ -298,6 +304,7 @@ static int update_refcount(struct sb *sb, struct buffer_head *buffer,
 /* Modify atom refcount */
 static int atomref(struct inode *atable, atom_t atom, int use)
 {
+	int low;
 	struct sb *sb = tux_sb(atable->i_sb);
 	unsigned shift = sb->blockbits - ATOMREF_BLKBITS;
 	unsigned block = sb->atomref_base + ATOMREF_SIZE * (atom >> shift);
@@ -311,7 +318,7 @@ static int atomref(struct inode *atable, atom_t atom, int use)
 		return -EIO;
 
 	refcount = bufdata(buffer);
-	int low = be16_to_cpu(refcount[offset]) + use;
+	low = be16_to_cpu(refcount[offset]) + use;
 	trace("inc atom %x by %d, offset %x[%x], low = %d",
 	      atom, use, block, offset, low);
 
@@ -321,12 +328,14 @@ static int atomref(struct inode *atable, atom_t atom, int use)
 		return err;
 
 	if (!low || (low & (-1 << 16))) {
+		int high;
+
 		buffer = blockread(mapping(atable), block + 1);
 		if (!buffer)
 			return -EIO;
 
 		refcount = bufdata(buffer);
-		int high = be16_to_cpu(refcount[offset]);
+		high = be16_to_cpu(refcount[offset]);
 		if (!low)
 			blockput(buffer);
 		else {
@@ -348,9 +357,12 @@ static int atomref(struct inode *atable, atom_t atom, int use)
 	}
 
 	if (kill) {
+		loff_t next, where;
+		tux_dirent *entry;
+
 		trace("delete atom %x", atom);
-		loff_t next = UNATOM_FREE_MAGIC | sb->freeatom;
-		loff_t where = unatom_dict_write(atable, atom, next);
+		next = UNATOM_FREE_MAGIC | sb->freeatom;
+		where = unatom_dict_write(atable, atom, next);
 		if (where < 0) {
 			/* FIXME: better set a flag that unatom broke
 			 * or something! */
@@ -365,7 +377,7 @@ static int atomref(struct inode *atable, atom_t atom, int use)
 			return -EIO;
 		}
 
-		tux_dirent *entry = bufdata(buffer) + (where & sb->blockmask);
+		entry = bufdata(buffer) + (where & sb->blockmask);
 		if (entry_atom(entry) == atom) {
 			/* FIXME: better set a flag that unatom broke
 			 * or something! */
@@ -388,27 +400,35 @@ static int atomref(struct inode *atable, atom_t atom, int use)
 /* userland only */
 void dump_atoms(struct inode *atable)
 {
+	unsigned j;
 	struct sb *sb = tux_sb(atable->i_sb);
 	unsigned blocks = (sb->atomgen + (sb->blockmask >> ATOMREF_BLKBITS))
 		>> (sb->blockbits - ATOMREF_BLKBITS);
 
-	for (unsigned j = 0; j < blocks; j++) {
+	for (j = 0; j < blocks; j++) {
+		__be16 *lorefs, *hirefs;
+		unsigned i;
 		unsigned block = sb->atomref_base + ATOMREF_SIZE * j;
 		struct buffer_head *lobuf, *hibuf;
+
 		if (!(lobuf = blockread(mapping(atable), block)))
 			goto eek;
 		if (!(hibuf = blockread(mapping(atable), block + 1))) {
 			blockput(lobuf);
 			goto eek;
 		}
-		__be16 *lorefs = bufdata(lobuf), *hirefs = bufdata(hibuf);
-		for (unsigned i = 0; i < (sb->blocksize >> ATOMREF_BLKBITS); i++) {
+		lorefs = bufdata(lobuf);
+		hirefs = bufdata(hibuf);
+		for (i = 0; i < (sb->blocksize >> ATOMREF_BLKBITS); i++) {
+			atom_t atom;
+			char name[100];
+			int len;
 			unsigned refs = (be16_to_cpu(hirefs[i]) << 16) | be16_to_cpu(lorefs[i]);
+
 			if (!refs)
 				continue;
-			atom_t atom = i;
-			char name[100];
-			int len = unatom(atable, atom, name, sizeof(name));
+			atom = i;
+			len = unatom(atable, atom, name, sizeof(name));
 			if (len < 0)
 				goto eek;
 			__tux3_dbg("%.*s: atom 0x%08x, ref %u\n",
@@ -430,8 +450,10 @@ void show_freeatoms(struct sb *sb)
 	atom_t atom = sb->freeatom;
 
 	while (atom) {
+		loff_t next;
+
 		tux3_dbg("free atom: %x", atom);
-		loff_t next = unatom_dict_read(atable, atom);
+		next = unatom_dict_read(atable, atom);
 		if (next < 0)
 			goto eek;
 		if (!is_free_unatom(next))
@@ -532,13 +554,15 @@ static inline struct xcache_entry *xcache_limit(struct xcache *xcache)
 
 int xcache_dump(struct inode *inode)
 {
+	struct xcache_entry *xattr;
+	struct xcache_entry *xlimit;
 	struct xcache *xcache = tux_inode(inode)->xcache;
 
 	if (!xcache)
 		return 0;
 
-	struct xcache_entry *xattr = xcache->xattrs;
-	struct xcache_entry *xlimit = xcache_limit(xcache);
+	xattr = xcache->xattrs;
+	xlimit = xcache_limit(xcache);
 
 	//__tux3_dbg("xattrs %p/%i", inode->xcache, inode->xcache->size);
 	while (xattr < xlimit) {
@@ -605,6 +629,7 @@ static inline int remove_old(struct xcache *xcache, struct xcache_entry *xattr)
 static int xcache_update(struct inode *inode, unsigned atom, const void *data,
 			 unsigned len, unsigned flags)
 {
+	unsigned more;
 	struct xcache *xcache = tux_inode(inode)->xcache;
 	struct xcache_entry *xattr = xcache_lookup(xcache, atom);
 	int use = 0;
@@ -624,7 +649,7 @@ static int xcache_update(struct inode *inode, unsigned atom, const void *data,
 	}
 
 	/* Insert new */
-	unsigned more = sizeof(*xattr) + len;
+	more = sizeof(*xattr) + len;
 	if (!xcache || xcache->size + more > xcache->maxsize) {
 		unsigned oldsize = xcache ? xcache->size : 0;
 		int err = expand_xcache(inode, oldsize + more);
@@ -678,6 +703,8 @@ int xcache_remove_all(struct inode *inode)
 int get_xattr(struct inode *inode, const char *name, unsigned len, void *data,
 	      unsigned size)
 {
+	struct xcache *xcache;
+	struct xcache_entry *xattr;
 	struct inode *atable = tux_sb(inode->i_sb)->atable;
 	atom_t atom;
 	int ret;
@@ -687,8 +714,8 @@ int get_xattr(struct inode *inode, const char *name, unsigned len, void *data,
 	if (ret)
 		goto out;
 
-	struct xcache *xcache = tux_inode(inode)->xcache;
-	struct xcache_entry *xattr = xcache_lookup(xcache, atom);
+	xcache = tux_inode(inode)->xcache;
+	xattr = xcache_lookup(xcache, atom);
 	if (IS_ERR(xattr)) {
 		ret = PTR_ERR(xattr);
 		goto out;
@@ -706,14 +733,15 @@ out:
 int set_xattr(struct inode *inode, const char *name, unsigned len,
 	      const void *data, unsigned size, unsigned flags)
 {
+	int err;
+	atom_t atom;
 	struct sb *sb = tux_sb(inode->i_sb);
 	struct inode *atable = sb->atable;
 
 	mutex_lock(&atable->i_mutex);
 	change_begin(sb);
 
-	atom_t atom;
-	int err = make_atom(atable, name, len, &atom);
+	err = make_atom(atable, name, len, &atom);
 	if (!err) {
 		err = xcache_update(inode, atom, data, size, flags);
 		if (err) {
@@ -729,6 +757,7 @@ int set_xattr(struct inode *inode, const char *name, unsigned len,
 
 int del_xattr(struct inode *inode, const char *name, unsigned len)
 {
+	atom_t atom;
 	struct sb *sb = tux_sb(inode->i_sb);
 	struct inode *atable = sb->atable;
 	int err;
@@ -736,18 +765,19 @@ int del_xattr(struct inode *inode, const char *name, unsigned len)
 	mutex_lock(&atable->i_mutex);
 	change_begin(sb);
 
-	atom_t atom;
 	err = find_atom(atable, name, len, &atom);
 	if (!err) {
+		int used;
 		struct xcache *xcache = tux_inode(inode)->xcache;
 		struct xcache_entry *xattr = xcache_lookup(xcache, atom);
+
 		if (IS_ERR(xattr)) {
 			err = PTR_ERR(xattr);
 			goto out;
 		}
 
 		tux3_xattrdirty(inode);
-		int used = remove_old(xcache, xattr);
+		used = remove_old(xcache, xattr);
 		if (used) {
 			tux3_mark_inode_dirty(inode);
 			/* FIXME: error check */
@@ -763,19 +793,24 @@ out:
 
 int list_xattr(struct inode *inode, char *text, size_t size)
 {
+	struct xcache *xcache;
+	struct xcache_entry *xattr;
+	struct xcache_entry *xlimit;
+	char *base, *top;
+	int err;
 	struct sb *sb = tux_sb(inode->i_sb);
 	struct inode *atable = sb->atable;
 
 	mutex_lock(&atable->i_mutex);
 
-	struct xcache *xcache = tux_inode(inode)->xcache;
+	xcache = tux_inode(inode)->xcache;
 	if (!xcache)
 		return 0;
 
-	struct xcache_entry *xattr = xcache->xattrs;
-	struct xcache_entry *xlimit = xcache_limit(xcache);
-	char *base = text, *top = text + size;
-	int err;
+	xattr = xcache->xattrs;
+	xlimit = xcache_limit(xcache);
+	base = text;
+	top = text + size;
 
 	while (xattr < xlimit) {
 		atom_t atom = xattr->atom;
@@ -823,14 +858,18 @@ error:
 
 unsigned encode_xsize(struct inode *inode)
 {
+	unsigned size, xatsize;
+	struct xcache_entry *xattr;
+	struct xcache_entry *xlimit;
 	struct xcache *xcache = tux_inode(inode)->xcache;
 
 	if (!xcache)
 		return 0;
 
-	unsigned size = 0, xatsize = atsize[XATTR_ATTR];
-	struct xcache_entry *xattr = xcache->xattrs;
-	struct xcache_entry *xlimit = xcache_limit(xcache);
+	size = 0;
+	xatsize = atsize[XATTR_ATTR];
+	xattr = xcache->xattrs;
+	xlimit = xcache_limit(xcache);
 
 	while (xattr < xlimit) {
 		size += 2 + xatsize + xattr->size;
@@ -842,14 +881,17 @@ unsigned encode_xsize(struct inode *inode)
 
 void *encode_xattrs(struct inode *inode, void *attrs, unsigned size)
 {
+	struct xcache_entry *xattr;
+	struct xcache_entry *xlimit;
+	void *limit;
 	struct xcache *xcache = tux_inode(inode)->xcache;
 
 	if (!xcache)
 		return attrs;
 
-	struct xcache_entry *xattr = xcache->xattrs;
-	struct xcache_entry *xlimit = xcache_limit(xcache);
-	void *limit = attrs + size - 3;
+	xattr = xcache->xattrs;
+	xlimit = xcache_limit(xcache);
+	limit = attrs + size - 3;
 
 	while (xattr < xlimit) {
 		if (attrs >= limit)
diff --git a/user/options.c b/user/options.c
index b97fa8e..96e3d73 100644
--- a/user/options.c
+++ b/user/options.c
@@ -161,8 +161,10 @@ int optspace(struct options *options, int argc, const char *argv[])
 
 int optcount(void *work, int opt)
 {
+	int i;
 	int count = 0;
-	for (int i = 0; i < ((struct optv *)work)->optc; i++)
+
+	for (i = 0; i < ((struct optv *)work)->optc; i++)
 		count += optindex(work, i) == opt;
 	return count;
 }
diff --git a/user/super.c b/user/super.c
index 2ab462e..9795a24 100644
--- a/user/super.c
+++ b/user/super.c
@@ -66,6 +66,7 @@ int put_super(struct sb *sb)
 /* Clear first and last block to get rid of other magic */
 static int clear_other_magic(struct sb *sb)
 {
+	int i;
 	struct {
 		loff_t loc;
 		unsigned len;
@@ -77,7 +78,7 @@ static int clear_other_magic(struct sb *sb)
 	unsigned maxlen = 0;
 	int err;
 
-	for (int i = 0; i < ARRAY_SIZE(area); i++)
+	for (i = 0; i < ARRAY_SIZE(area); i++)
 		maxlen = max(maxlen, area[i].len);
 
 	data = malloc(maxlen);
@@ -85,7 +86,7 @@ static int clear_other_magic(struct sb *sb)
 		return -ENOMEM;
 	memset(data, 0, maxlen);
 
-	for (int i = 0; i < ARRAY_SIZE(area); i++) {
+	for (i = 0; i < ARRAY_SIZE(area); i++) {
 		err = devio(WRITE, sb->dev, area[i].loc, data, area[i].len);
 		if (err)
 			break;
diff --git a/user/tux3.c b/user/tux3.c
index 9c1d0f2..cba8d52 100644
--- a/user/tux3.c
+++ b/user/tux3.c
@@ -110,8 +110,10 @@ static void command_options(int *argc, const char ***args,
 		struct options *options, int need, const char *progname,
 		const char *cmdname, const char *blurb, struct vars *vars)
 {
+	int i;
 	unsigned space = optspace(options, *argc, *args);
 	void *optv = malloc(space);
+
 	if (!optv)
 		strerror_exit(1, errno, "malloc");
 
@@ -119,7 +121,7 @@ static void command_options(int *argc, const char ***args,
 	if (optc < 0)
 		error_exit("%s!", opterror(optv));
 
-	for (int i = 0; i < optc; i++) {
+	for (i = 0; i < optc; i++) {
 		const char *value = optvalue(optv, i);
 		switch (options[optindex(optv, i)].terse[0]) {
 		case 'b':
@@ -151,6 +153,7 @@ static void command_options(int *argc, const char ***args,
 
 int main(int argc, char *argv[])
 {
+	int i;
 	const char *progname = optbasename(argv[0]);
 	const char **args = (const char **)argv;
 	const char *blurb = "<command> <volume>";
@@ -195,10 +198,12 @@ int main(int argc, char *argv[])
 
 	int verbose = 0;
 
-	for (int i = 0; i < optc; i++) {
+	for (i = 0; i < optc; i++) {
+		int j;
+
 		switch (options[optindex(optv, i)].terse[0]) {
 		case 'L':
-			for (int j = 0; j < ARRAY_SIZE(commands); j++)
+			for (j = 0; j < ARRAY_SIZE(commands); j++)
 				printf("%s ", commands[j]);
 			printf("\n");
 			exit(0);
diff --git a/user/tux3_dump.c b/user/tux3_dump.c
index 6a054d8..51bc3e9 100644
--- a/user/tux3_dump.c
+++ b/user/tux3_dump.c
@@ -183,9 +183,10 @@ static void stats_data_add(struct stats_btree *stats, block_t block,
 static struct stats_btree_level
 stats_levels_sum(struct stats_btree *stats, int depth)
 {
+	int i;
 	struct stats_btree_level sum = {};
 
-	for (int i = 0; i <= depth; i++) {
+	for (i = 0; i <= depth; i++) {
 		sum.block.blocks	+= stats->levels[i].block.blocks;
 		sum.block.empty		+= stats->levels[i].block.empty;
 		sum.block.bytes		+= stats->levels[i].block.bytes;
@@ -199,6 +200,7 @@ stats_levels_sum(struct stats_btree *stats, int depth)
 
 static void stats_btree_merge(struct stats_btree **a, struct stats_btree *b)
 {
+	int i;
 	/* No need to merge */
 	if (b == NULL)
 		return;
@@ -214,7 +216,7 @@ static void stats_btree_merge(struct stats_btree **a, struct stats_btree *b)
 			/* Copy (*a) to tmp */
 			tmp->depth_seek = (*a)->depth_seek;
 			tmp->data = (*a)->data;
-			for (int i = 0; i < (*a)->depth; i++)
+			for (i = 0; i < (*a)->depth; i++)
 				tmp->levels[i] = (*a)->levels[i];
 			/* Set leaf info to new depth */
 			tmp->levels[tmp->depth] = (*a)->levels[(*a)->depth];
@@ -225,7 +227,7 @@ static void stats_btree_merge(struct stats_btree **a, struct stats_btree *b)
 	}
 
 	/* Merge bnode => bnode, and leaf => leaf */
-	for (int i = 0; i <= b->depth; i++) {
+	for (i = 0; i <= b->depth; i++) {
 		int level = i < b->depth ? i : (*a)->depth;
 		struct stats_btree_level *la = &(*a)->levels[level];
 		struct stats_btree_level *lb = &b->levels[i];
@@ -274,7 +276,9 @@ static void stats_print_depth_seek(struct stats_seek *stats)
 static void stats_print_seeks(struct sb *sb, struct stats_btree *stats,
 			      int data, int dir)
 {
-	for (int i = 0; i <= stats->depth; i++) {
+	int i;
+
+	for (i = 0; i <= stats->depth; i++) {
 		char prefix[64];
 
 		if (i < stats->depth)
diff --git a/user/tux3_graph.c b/user/tux3_graph.c
index 5adfd7c..ace9e3b 100644
--- a/user/tux3_graph.c
+++ b/user/tux3_graph.c
@@ -239,11 +239,12 @@ static void draw_bitmap_data(struct graph_info *gi, struct btree *btree,
 			     struct buffer_head *leafbuf,
 			     block_t index, block_t block, unsigned count)
 {
+	unsigned i;
 	struct sb *sb = btree->sb;
 	struct inode *bitmap = sb->bitmap;
 	void *data;
 
-	for (unsigned i = 0; i < count; i++) {
+	for (i = 0; i < count; i++) {
 		unsigned idx, size = sb->blocksize * 8;
 		struct buffer_head *buffer;
 
@@ -309,10 +310,11 @@ static void draw_countmap_data(struct graph_info *gi, struct btree *btree,
 			     struct buffer_head *leafbuf,
 			     block_t index, block_t block, unsigned count)
 {
+	unsigned i;
 	struct sb *sb = btree->sb;
 	struct inode *countmap = sb->countmap;
 
-	for (unsigned i = 0; i < count; i++) {
+	for (i = 0; i < count; i++) {
 		unsigned size = sb->blocksize >> 1;
 		block_t group = (index + i) << (sb->blockbits - 1);
 		struct buffer_head *buffer;
@@ -460,11 +462,13 @@ static void draw_atable_data(struct graph_info *gi, struct btree *btree,
 {
 	static int start_atomref = 1, start_unatom = 1;
 
+	unsigned i;
 	struct sb *sb = btree->sb;
-	struct buffer_head *buffer, *hi_buf;
 
-	for (unsigned i = 0; i < count; i++) {
-		buffer = blockread(mapping(sb->atable), index + i);
+	for (i = 0; i < count; i++) {
+		struct buffer_head *hi_buf;
+		struct buffer_head *buffer = blockread(mapping(sb->atable), index + i);
+
 		assert(buffer);
 
 		if (index < sb->atomref_base) {
@@ -531,10 +535,11 @@ static void draw_dir_data(struct graph_info *gi, struct btree *btree,
 			  struct buffer_head *leafbuf,
 			  block_t index, block_t block, unsigned count)
 {
-	struct buffer_head *buffer;
+	unsigned i;
+
+	for (i = 0; i < count; i++) {
+		struct buffer_head *buffer = blockread(mapping(btree_inode(btree)), index + i);
 
-	for (unsigned i = 0; i < count; i++) {
-		buffer = blockread(mapping(btree_inode(btree)), index + i);
 		assert(buffer);
 
 		__draw_dir_data(gi, btree, leafbuf, buffer, block + i, 0);
@@ -635,8 +640,10 @@ static inline struct group *dleaf1_group_ptr(struct group *groups, int gr)
 static inline struct entry *dleaf1_entries(struct dleaf *dleaf,
 					   struct group *groups, int gr)
 {
+	int i;
 	struct entry *entries = (struct entry *)(groups - dleaf_groups(dleaf));
-	for (int i = 0; i < gr; i++)
+
+	for (i = 0; i < gr; i++)
 		entries -= group_count(dleaf1_group_ptr(groups, i));
 	return entries;
 }
@@ -692,6 +699,7 @@ static void draw_dleaf1(struct graph_info *gi, struct btree *btree,
 	const char *dleaf_name = get_dleaf_name(leafbuf);
 	struct diskextent *extents;
 	int gr;
+	int ent;
 
 	draw_dleaf_start(gi, leafbuf);
 
@@ -704,7 +712,8 @@ static void draw_dleaf1(struct graph_info *gi, struct btree *btree,
 	for (gr = 0; gr < dleaf_groups(dleaf); gr++) {
 		struct group *group = dleaf1_group_ptr(groups, gr);
 		struct entry *entries = dleaf1_entries(dleaf, groups, gr);
-		for (int ent = 0; ent < group_count(group); ent++) {
+
+		for (ent = 0; ent < group_count(group); ent++) {
 			int ex, ex_count = dleaf1_extent_count(entries, ent);
 			extents = dleaf1_extents(dleaf, groups, gr, ent);
 			for (ex = 0; ex < ex_count; ex++) {
@@ -759,7 +768,7 @@ static void draw_dleaf1(struct graph_info *gi, struct btree *btree,
 			"%s:gr%u:w -> %s:gr%uent%u:w;\n",
 			dleaf_name, gr,
 			dleaf_name, gr, 0);
-		for (int ent = 0; ent < group_count(group); ent++) {
+		for (ent = 0; ent < group_count(group); ent++) {
 			/* write link: dleaf:entry -> dleaf:extent */
 			fprintf(gi->fp,
 				"%s:gr%uent%u:w -> %s:gr%uent%uex%u:w;\n",
diff --git a/user/walk.c b/user/walk.c
index 384a4c8..ab7adf6 100644
--- a/user/walk.c
+++ b/user/walk.c
@@ -27,10 +27,11 @@ static void walk_extent(struct btree *btree, struct buffer_head *leafbuf,
 			walk_data_cb walk_data,
 			void *callback, void *data)
 {
-	struct buffer_head *buffer;
+	unsigned i;
+
+	for (i = 0; i < count; i++) {
+		struct buffer_head *buffer = blockread(mapping(btree_inode(btree)), index + i);
 
-	for (unsigned i = 0; i < count; i++) {
-		buffer = blockread(mapping(btree_inode(btree)), index + i);
 		assert(buffer);
 
 		walk_data(btree, leafbuf, buffer, block + i, callback, data);
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin