From 832427bdbad9c2e7ad9635ddc1cad05563d9d16a Mon Sep 17 00:00:00 2001 From: Chris Mason Date: Tue, 22 May 2007 10:07:10 -0400 Subject: cleanup warnings found with -O2 --- Makefile | 2 +- btrfsck.c | 66 ++++++++++++++++++++++++++++++++++++++--------------------- btrfsctl.c | 8 ++++++-- extent-tree.c | 2 +- inode-map.c | 2 +- random-test.c | 2 +- 6 files changed, 53 insertions(+), 29 deletions(-) diff --git a/Makefile b/Makefile index ff7e09ef..2ca356f2 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC=gcc -CFLAGS = -g -Wall -Werror +CFLAGS = -O2 -g -Wall -fno-strict-aliasing -Werror headers = radix-tree.h ctree.h disk-io.h kerncompat.h print-tree.h list.h \ transaction.h ioctl.h objects = ctree.o disk-io.o radix-tree.o extent-tree.o print-tree.o \ diff --git a/btrfsck.c b/btrfsck.c index 07ec8b6c..bdb8b301 100644 --- a/btrfsck.c +++ b/btrfsck.c @@ -18,12 +18,12 @@ static u64 btree_space_waste = 0; struct extent_record { struct btrfs_disk_key parent_key; - struct btrfs_disk_key node_key; u64 start; u64 nr; u64 owner; u32 refs; u32 extent_item_refs; + int checked; }; static int check_node(struct btrfs_root *root, @@ -98,6 +98,17 @@ static int check_leaf(struct btrfs_root *root, return 0; } +static int maybe_free_extent_rec(struct radix_tree_root *extent_radix, + struct extent_record *rec) +{ + if (rec->checked && rec->extent_item_refs == rec->refs && + rec->refs > 0) { + radix_tree_delete(extent_radix, rec->start); + free(rec); + } + return 0; +} + static int check_block(struct btrfs_root *root, struct radix_tree_root *extent_radix, struct btrfs_buffer *buf) @@ -113,18 +124,16 @@ static int check_block(struct btrfs_root *root, } else { ret = check_node(root, &rec->parent_key, &buf->node); } - if (!ret && rec->extent_item_refs == rec->refs && rec->refs > 0) { - radix_tree_delete(extent_radix, rec->start); - free(rec); - return ret; - } + rec->checked = 1; + if (!ret) + maybe_free_extent_rec(extent_radix, rec); return ret; } static int add_extent_rec(struct radix_tree_root *extent_radix, struct btrfs_disk_key *parent_key, u64 ref, u64 start, u64 nr, u64 owner, - u32 extent_item_refs, int inc_ref) + u32 extent_item_refs, int inc_ref, int set_checked) { struct extent_record *rec; int ret = 0; @@ -143,6 +152,9 @@ static int add_extent_rec(struct radix_tree_root *extent_radix, } rec->extent_item_refs = extent_item_refs; } + if (set_checked) + rec->checked = 1; + maybe_free_extent_rec(extent_radix, rec); return ret; } rec = malloc(sizeof(*rec)); @@ -151,6 +163,7 @@ static int add_extent_rec(struct radix_tree_root *extent_radix, rec->start = start; rec->nr = nr; rec->owner = owner; + rec->checked = 0; if (inc_ref) rec->refs = 1; @@ -170,6 +183,8 @@ static int add_extent_rec(struct radix_tree_root *extent_radix, ret = radix_tree_insert(extent_radix, start, rec); BUG_ON(ret); blocks_used += nr; + if (set_checked) + rec->checked = 1; return ret; } @@ -185,14 +200,17 @@ static int add_pending(struct radix_tree_root *pending, static int pick_next_pending(struct radix_tree_root *pending, struct radix_tree_root *reada, struct radix_tree_root *nodes, - u64 last, unsigned long *bits, int bits_nr) + u64 last, unsigned long *bits, int bits_nr, + int *reada_bits) { unsigned long node_start = last; int ret; ret = find_first_radix_bit(reada, bits, 0, 1); - if (ret && ret > 16) { + if (ret) { + *reada_bits = 1; return ret; } + *reada_bits = 0; if (node_start > 8) node_start -= 8; ret = find_first_radix_bit(nodes, bits, node_start, bits_nr); @@ -237,21 +255,23 @@ static int run_next_block(struct btrfs_root *root, struct btrfs_leaf *leaf; struct btrfs_node *node; struct btrfs_disk_key *disk_key; + int reada_bits; u64 last_block = 0; - ret = pick_next_pending(pending, reada, nodes, *last, bits, bits_nr); + ret = pick_next_pending(pending, reada, nodes, *last, bits, + bits_nr, &reada_bits); if (ret == 0) { return 1; } - for(i = 0; i < ret; i++) { - u64 offset; - if (test_radix_bit(reada, bits[i])) - continue; - set_radix_bit(reada, bits[i]); - btrfs_map_bh_to_logical(root, &reada_buf, bits[i]); - offset = reada_buf.dev_blocknr * root->blocksize; - last_block = bits[i]; - readahead(reada_buf.fd, offset, root->blocksize); + if (!reada_bits) { + for(i = 0; i < ret; i++) { + u64 offset; + set_radix_bit(reada, bits[i]); + btrfs_map_bh_to_logical(root, &reada_buf, bits[i]); + offset = reada_buf.dev_blocknr * root->blocksize; + last_block = bits[i]; + readahead(reada_buf.fd, offset, root->blocksize); + } } *last = bits[0]; blocknr = bits[0]; @@ -282,7 +302,7 @@ static int run_next_block(struct btrfs_root *root, found.objectid, found.offset, btrfs_extent_owner(ei), - btrfs_extent_refs(ei), 0); + btrfs_extent_refs(ei), 0, 0); continue; } if (btrfs_disk_key_type(disk_key) == @@ -314,7 +334,7 @@ static int run_next_block(struct btrfs_root *root, btrfs_file_extent_disk_blocknr(fi), btrfs_file_extent_disk_num_blocks(fi), btrfs_disk_key_objectid(&leaf->items[i].key), - 0, 1); + 0, 1, 1); BUG_ON(ret); } } else { @@ -327,7 +347,7 @@ static int run_next_block(struct btrfs_root *root, &node->ptrs[i].key, blocknr, ptr, 1, btrfs_header_owner(&node->header), - 0, 1); + 0, 1, 0); BUG_ON(ret); if (level > 1) { add_pending(nodes, seen, ptr); @@ -357,7 +377,7 @@ static int add_root_to_pending(struct btrfs_buffer *buf, else add_pending(pending, seen, buf->blocknr); add_extent_rec(extent_radix, NULL, 0, buf->blocknr, 1, - btrfs_header_owner(&buf->node.header), 0, 1); + btrfs_header_owner(&buf->node.header), 0, 1, 0); return 0; } diff --git a/btrfsctl.c b/btrfsctl.c index 01fd95aa..3710bc6a 100644 --- a/btrfsctl.c +++ b/btrfsctl.c @@ -33,11 +33,11 @@ int main(int ac, char **av) int fd; int ret; struct btrfs_ioctl_vol_args args; - char *name; + char *name = NULL; int i; struct stat st; DIR *dirstream; - unsigned long command; + unsigned long command = 0; for (i = 1; i < ac - 1; i++) { if (strcmp(av[i], "-s") == 0) { @@ -65,6 +65,10 @@ int main(int ac, char **av) command = BTRFS_IOC_ADD_DISK; } } + if (command == 0) { + fprintf(stderr, "no valid commands given\n"); + exit(1); + } fname = av[ac - 1]; printf("fname is %s\n", fname); ret = stat(fname, &st); diff --git a/extent-tree.c b/extent-tree.c index 97b69754..82952ef9 100644 --- a/extent-tree.c +++ b/extent-tree.c @@ -402,7 +402,7 @@ static int find_free_extent(struct btrfs_trans_handle *trans, struct btrfs_root int ret; u64 hole_size = 0; int slot = 0; - u64 last_block; + u64 last_block = 0; u64 test_block; int start_found; struct btrfs_leaf *l; diff --git a/inode-map.c b/inode-map.c index 330b3626..46223038 100644 --- a/inode-map.c +++ b/inode-map.c @@ -18,7 +18,7 @@ int btrfs_find_free_objectid(struct btrfs_trans_handle *trans, int ret; u64 hole_size = 0; int slot = 0; - u64 last_ino; + u64 last_ino = 0; int start_found; struct btrfs_leaf *l; struct btrfs_key search_key; diff --git a/random-test.c b/random-test.c index 3a38ae7a..90fca13f 100644 --- a/random-test.c +++ b/random-test.c @@ -261,7 +261,7 @@ static int fill_radix(struct btrfs_root *root, struct radix_tree_root *radix) { struct btrfs_path path; struct btrfs_key key; - unsigned long found; + unsigned long found = 0; int ret; int slot; int i; -- cgit v1.2.3