Btrfs: Update the highest objectid in a root after log replay is done
authorChris Mason <chris.mason@oracle.com>
Thu, 11 Sep 2008 19:51:21 +0000 (15:51 -0400)
committerChris Mason <chris.mason@oracle.com>
Thu, 25 Sep 2008 15:04:07 +0000 (11:04 -0400)
Signed-off-by: Chris Mason <chris.mason@oracle.com>
fs/btrfs/inode.c
fs/btrfs/tree-log.c

index b4dbb5c..073fdd7 100644 (file)
@@ -2239,8 +2239,9 @@ static int btrfs_set_inode_index(struct inode *dir, struct inode *inode,
 
        if (BTRFS_I(dir)->index_cnt == (u64)-1) {
                ret = btrfs_set_inode_index_count(dir);
-               if (ret)
+               if (ret) {
                        return ret;
+               }
        }
 
        *index = BTRFS_I(dir)->index_cnt;
index 13d7ee8..3f4b139 100644 (file)
@@ -1027,6 +1027,7 @@ static noinline int fixup_inode_link_count(struct btrfs_trans_handle *trans,
                inode->i_nlink = nlink;
                btrfs_update_inode(trans, root, inode);
        }
+       BTRFS_I(inode)->index_cnt = (u64)-1;
 
        return 0;
 }
@@ -2714,6 +2715,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
        struct btrfs_key tmp_key;
        struct btrfs_root *log;
        struct btrfs_fs_info *fs_info = log_root_tree->fs_info;
+       u64 highest_inode;
        struct walk_control wc = {
                .process_func = process_one_buffer,
                .stage = 0,
@@ -2772,6 +2774,11 @@ again:
                                                      path);
                        BUG_ON(ret);
                }
+               ret = btrfs_find_highest_inode(wc.replay_dest, &highest_inode);
+               if (ret == 0) {
+                       wc.replay_dest->highest_inode = highest_inode;
+                       wc.replay_dest->last_inode_alloc = highest_inode;
+               }
 
                key.offset = found_key.offset - 1;
                free_extent_buffer(log->node);