]> git.karo-electronics.de Git - linux-beck.git/commitdiff
Btrfs: uuids
authorChris Mason <chris.mason@oracle.com>
Thu, 5 Apr 2007 18:28:50 +0000 (14:28 -0400)
committerDavid Woodhouse <dwmw2@hera.kernel.org>
Thu, 5 Apr 2007 18:28:50 +0000 (14:28 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/TODO
fs/btrfs/ctree.c
fs/btrfs/super.c

index db986c46a554c2e80fa5a9313749008be095031e..ea4c38c790b41e9dfeeff277c5471a48600c3684 100644 (file)
@@ -3,7 +3,6 @@
 * Add block mapping tree (simple dm layer)
 * Make allocator smarter
 * add a block group to struct inode
-* Make directory hashing work on 32 bit
 * Make sure nobh stuff is working properly for cows
 * Do actual block accounting
 * Check compat and incompat flags on the inode
index 864ee423b300b3300a91b396ea5dd5750c4cb26f..39b551564fcf4e9333fa48af47e241f17bc5fbdc 100644 (file)
@@ -200,6 +200,10 @@ static int check_leaf(struct btrfs_root *root, struct btrfs_path *path,
 static int check_block(struct btrfs_root *root, struct btrfs_path *path,
                        int level)
 {
+       struct btrfs_node *node = btrfs_buffer_node(path->nodes[level]);
+       if (memcmp(node->header.fsid, root->fs_info->disk_super->fsid,
+                  sizeof(node->header.fsid)))
+               BUG();
        if (level == 0)
                return check_leaf(root, path, level);
        return check_node(root, path, level);
@@ -687,6 +691,8 @@ static int insert_new_root(struct btrfs_trans_handle *trans, struct btrfs_root
        btrfs_set_header_parentid(&c->header,
              btrfs_header_parentid(btrfs_buffer_header(root->node)));
        lower = btrfs_buffer_node(path->nodes[level-1]);
+       memcpy(c->header.fsid, root->fs_info->disk_super->fsid,
+              sizeof(c->header.fsid));
        if (btrfs_is_leaf(lower))
                lower_key = &((struct btrfs_leaf *)lower)->items[0].key;
        else
@@ -780,6 +786,8 @@ static int split_node(struct btrfs_trans_handle *trans, struct btrfs_root
        btrfs_set_header_generation(&split->header, trans->transid);
        btrfs_set_header_parentid(&split->header,
              btrfs_header_parentid(btrfs_buffer_header(root->node)));
+       memcpy(split->header.fsid, root->fs_info->disk_super->fsid,
+              sizeof(split->header.fsid));
        mid = (c_nritems + 1) / 2;
        btrfs_memcpy(root, split, split->ptrs, c->ptrs + mid,
                     (c_nritems - mid) * sizeof(struct btrfs_key_ptr));
@@ -1139,6 +1147,8 @@ static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root
        btrfs_set_header_level(&right->header, 0);
        btrfs_set_header_parentid(&right->header,
              btrfs_header_parentid(btrfs_buffer_header(root->node)));
+       memcpy(right->header.fsid, root->fs_info->disk_super->fsid,
+              sizeof(right->header.fsid));
        if (mid <= slot) {
                if (nritems == 1 ||
                    leaf_space_used(l, mid, nritems - mid) + space_needed >
@@ -1229,6 +1239,8 @@ static int split_leaf(struct btrfs_trans_handle *trans, struct btrfs_root
        btrfs_set_header_level(&right->header, 0);
        btrfs_set_header_parentid(&right->header,
              btrfs_header_parentid(btrfs_buffer_header(root->node)));
+       memcpy(right->header.fsid, root->fs_info->disk_super->fsid,
+              sizeof(right->header.fsid));
        btrfs_cpu_key_to_disk(&disk_key, ins_key);
        btrfs_set_header_nritems(&right->header, 0);
        wret = insert_ptr(trans, root, path,
index d4ee78046b867d67d1c3e23e87516acab9e4f27c..32224ffdcecd0babaf2f598dac3cc5eaa09274b1 100644 (file)
@@ -483,10 +483,8 @@ static int btrfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
                if (btrfs_disk_key_objectid(&item->key) != key.objectid)
                        break;
                if (btrfs_disk_key_offset(&item->key) >
-                   root->fs_info->highest_inode) {
-printk("stopping at highest inode %Lu\n", root->fs_info->highest_inode);
+                   root->fs_info->highest_inode)
                        break;
-               }
                if (btrfs_disk_key_type(&item->key) != BTRFS_DIR_INDEX_KEY)
                        continue;
                if (btrfs_disk_key_offset(&item->key) < filp->f_pos)