X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=random-test.c;h=d5f830a91a4e952598e6cf4d496fee2c1d680d1b;hb=6d3fea8f46568ae9f54bd50f9de2aeeb76e0cd23;hp=07e71f23676d4e77fce181c75abbacdebb691a8c;hpb=38ef945266758856bf11e385eadaa0872b6d8b30;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/random-test.c b/random-test.c index 07e71f2..d5f830a 100644 --- a/random-test.c +++ b/random-test.c @@ -1,3 +1,21 @@ +/* + * Copyright (C) 2007 Oracle. All rights reserved. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public + * License v2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 021110-1307, USA. + */ + #include #include #include @@ -19,13 +37,13 @@ static int setup_key(struct radix_tree_root *root, struct btrfs_key *key, int ret; key->flags = 0; - btrfs_set_key_type(key, BTRFS_STRING_ITEM_KEY); + key->type = BTRFS_STRING_ITEM_KEY; key->offset = 0; again: ret = radix_tree_gang_lookup(root, (void **)res, num, 2); if (exists) { if (ret == 0) - return -1; + return -EEXIST; num = res[0]; } else if (ret != 0 && num == res[0]) { num++; @@ -61,7 +79,7 @@ static int ins_one(struct btrfs_trans_handle *trans, struct btrfs_root *root, return ret; error: printf("failed to insert %llu\n", (unsigned long long)key.objectid); - return -1; + return ret; } static int insert_dup(struct btrfs_trans_handle *trans, struct btrfs_root @@ -80,7 +98,7 @@ static int insert_dup(struct btrfs_trans_handle *trans, struct btrfs_root if (ret != -EEXIST) { printf("insert on %llu gave us %d\n", (unsigned long long)key.objectid, ret); - return 1; + return ret; } return 0; } @@ -100,7 +118,7 @@ static int del_one(struct btrfs_trans_handle *trans, struct btrfs_root *root, if (ret) goto error; ret = btrfs_del_item(trans, root, &path); - btrfs_release_path(root, &path); + btrfs_release_path(&path); if (ret != 0) goto error; ptr = radix_tree_delete(radix, key.objectid); @@ -109,7 +127,7 @@ static int del_one(struct btrfs_trans_handle *trans, struct btrfs_root *root, return 0; error: printf("failed to delete %llu\n", (unsigned long long)key.objectid); - return -1; + return ret; } static int lookup_item(struct btrfs_trans_handle *trans, struct btrfs_root @@ -123,13 +141,13 @@ static int lookup_item(struct btrfs_trans_handle *trans, struct btrfs_root if (ret < 0) return 0; ret = btrfs_search_slot(trans, root, &key, &path, 0, 1); - btrfs_release_path(root, &path); + btrfs_release_path(&path); if (ret) goto error; return 0; error: printf("unable to find key %llu\n", (unsigned long long)key.objectid); - return -1; + return ret; } static int lookup_enoent(struct btrfs_trans_handle *trans, struct btrfs_root @@ -143,14 +161,14 @@ static int lookup_enoent(struct btrfs_trans_handle *trans, struct btrfs_root if (ret < 0) return ret; ret = btrfs_search_slot(trans, root, &key, &path, 0, 0); - btrfs_release_path(root, &path); + btrfs_release_path(&path); if (ret <= 0) goto error; return 0; error: printf("able to find key that should not exist %llu\n", (unsigned long long)key.objectid); - return -1; + return -EEXIST; } static int empty_tree(struct btrfs_trans_handle *trans, struct btrfs_root @@ -166,18 +184,18 @@ static int empty_tree(struct btrfs_trans_handle *trans, struct btrfs_root key.offset = 0; key.flags = 0; - btrfs_set_key_type(&key, BTRFS_STRING_ITEM_KEY); + key.type = BTRFS_STRING_ITEM_KEY; key.objectid = (unsigned long)-1; while(nr-- >= 0) { btrfs_init_path(&path); ret = btrfs_search_slot(trans, root, &key, &path, -1, 1); if (ret < 0) { - btrfs_release_path(root, &path); + btrfs_release_path(&path); return ret; } if (ret != 0) { if (path.slots[0] == 0) { - btrfs_release_path(root, &path); + btrfs_release_path(&path); break; } path.slots[0] -= 1; @@ -191,9 +209,9 @@ static int empty_tree(struct btrfs_trans_handle *trans, struct btrfs_root fprintf(stderr, "failed to remove %lu from tree\n", found); - return -1; + return ret; } - btrfs_release_path(root, &path); + btrfs_release_path(&path); ptr = radix_tree_delete(radix, found); if (!ptr) goto error; @@ -203,7 +221,7 @@ static int empty_tree(struct btrfs_trans_handle *trans, struct btrfs_root return 0; error: fprintf(stderr, "failed to delete from the radix %lu\n", found); - return -1; + return -ENOENT; } static int fill_tree(struct btrfs_trans_handle *trans, struct btrfs_root *root, @@ -270,19 +288,19 @@ static int fill_radix(struct btrfs_root *root, struct radix_tree_root *radix) key.offset = 0; key.flags = 0; - btrfs_set_key_type(&key, BTRFS_STRING_ITEM_KEY); + key.type = BTRFS_STRING_ITEM_KEY; key.objectid = (unsigned long)-1; while(1) { btrfs_init_path(&path); ret = btrfs_search_slot(NULL, root, &key, &path, 0, 0); if (ret < 0) { - btrfs_release_path(root, &path); + btrfs_release_path(&path); return ret; } slot = path.slots[0]; if (ret != 0) { if (slot == 0) { - btrfs_release_path(root, &path); + btrfs_release_path(&path); break; } slot -= 1; @@ -301,7 +319,7 @@ static int fill_radix(struct btrfs_root *root, struct radix_tree_root *radix) radix_tree_preload_end(); } - btrfs_release_path(root, &path); + btrfs_release_path(&path); key.objectid = found - 1; if (key.objectid > found) break; @@ -338,6 +356,10 @@ int main(int ac, char **av) struct btrfs_trans_handle *trans; radix_tree_init(); root = open_ctree("dbfile", &super); + if (!root) { + fprintf(stderr, "Open ctree failed\n"); + exit(1); + } fill_radix(root, &radix); signal(SIGTERM, sigstopper); @@ -358,6 +380,7 @@ int main(int ac, char **av) } printf("initial fill\n"); trans = btrfs_start_transaction(root, 1); + BUG_ON(IS_ERR(trans)); ret = fill_tree(trans, root, &radix, init_fill_count); printf("starting run\n"); if (ret) { @@ -380,13 +403,17 @@ int main(int ac, char **av) btrfs_header_nritems(&root->node->node.header)); close_ctree(root, &super); root = open_ctree("dbfile", &super); + if (!root) { + fprintf(stderr, "Open ctree failed\n"); + goto out; + } } while(count--) { ret = ops[op](trans, root, &radix); if (ret) { fprintf(stderr, "op %d failed %d:%d\n", op, i, iterations); - btrfs_print_tree(root, root->node); + btrfs_print_tree(root, root->node, 1); fprintf(stderr, "op %d failed %d:%d\n", op, i, iterations); err = ret; @@ -402,6 +429,6 @@ int main(int ac, char **av) } out: close_ctree(root, &super); - return err; + return !!err; }