Btrfs: Chunk relocation fine tuning, and add a few printks to show progress
authorChris Mason <chris.mason@oracle.com>
Fri, 9 May 2008 15:46:48 +0000 (11:46 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:03 +0000 (11:04 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/extent-tree.c
fs/btrfs/volumes.c

index db996f0edf0b5b3feeb6c3ca47f16afb50f8cac4..df95fb660d4904f3ff38a9d642204ffb2c61966b 100644 (file)
@@ -2493,7 +2493,7 @@ static int find_root_for_ref(struct btrfs_root *root,
                                        btrfs_file_extent_disk_bytenr(leaf,
                                                               file_extent);
                       }
-               } else if (ret == 0) {
+               } else if (!file_key) {
                        if (path->nodes[level])
                                found_bytenr = path->nodes[level]->start;
                }
@@ -2797,14 +2797,25 @@ int btrfs_shrink_extent_tree(struct btrfs_root *root, u64 shrink_start)
        root = root->fs_info->extent_root;
        path->reada = 2;
 
+       printk("btrfs relocating block group %llu flags %llu\n",
+              (unsigned long long)shrink_start,
+              (unsigned long long)shrink_block_group->flags);
+
 again:
        if (btrfs_block_group_used(&shrink_block_group->item) > 0) {
+               u64 calc;
+
                trans = btrfs_start_transaction(root, 1);
                new_alloc_flags = update_block_group_flags(root,
                                                   shrink_block_group->flags);
+               if (new_alloc_flags != shrink_block_group->flags) {
+                       calc =
+                            btrfs_block_group_used(&shrink_block_group->item);
+               } else {
+                       calc = shrink_block_group->key.offset;
+               }
                do_chunk_alloc(trans, root->fs_info->extent_root,
-                       btrfs_block_group_used(&shrink_block_group->item) +
-                       2 * 1024 * 1024, new_alloc_flags);
+                              calc + 2 * 1024 * 1024, new_alloc_flags);
                btrfs_end_transaction(trans, root);
        }
        shrink_block_group->ro = 1;
@@ -2888,6 +2899,9 @@ next:
        btrfs_release_path(root, path);
 
        if (total_found > 0) {
+               printk("btrfs relocate found %llu last extent was %llu\n",
+                      (unsigned long long)total_found,
+                      (unsigned long long)found_key.objectid);
                trans = btrfs_start_transaction(tree_root, 1);
                btrfs_commit_transaction(trans, tree_root);
 
index aa001b08ced09eee2be669cbddd1ee5ef37d6c5d..b5d7bd1915b47d4f048eb200027ca3360939fe03 100644 (file)
@@ -1011,6 +1011,8 @@ int btrfs_relocate_chunk(struct btrfs_root *root,
        int ret;
        int i;
 
+       printk("btrfs relocating chunk %llu\n",
+              (unsigned long long)chunk_offset);
        root = root->fs_info->chunk_root;
        extent_root = root->fs_info->extent_root;
        em_tree = &root->fs_info->mapping_tree.map_tree;