Btrfs: Add support for online device removal
[safe/jmp/linux-2.6] / fs / btrfs / tree-defrag.c
index 3994795..256af18 100644 (file)
@@ -78,6 +78,8 @@ static int defrag_walk_down(struct btrfs_trans_handle *trans,
                        break;
 
                if (*level == 1) {
+                       WARN_ON(btrfs_header_generation(path->nodes[*level]) !=
+                                                       trans->transid);
                        ret = btrfs_realloc_node(trans, root,
                                                 path->nodes[*level],
                                                 path->slots[*level],
@@ -99,6 +101,7 @@ static int defrag_walk_down(struct btrfs_trans_handle *trans,
                                path->slots[*level]++;
                                continue;
                        }
+                       btrfs_verify_block_csum(root, next);
                } else {
                        next = read_tree_block(root, bytenr,
                                       btrfs_level_size(root, *level - 1));
@@ -177,6 +180,9 @@ int btrfs_defrag_leaves(struct btrfs_trans_handle *trans,
        if (root->ref_cows == 0 && !is_extent)
                goto out;
 
+       if (btrfs_test_opt(root, SSD))
+               goto out;
+
        path = btrfs_alloc_path();
        if (!path)
                return -ENOMEM;