Browse Source

Btrfs: Update the highest objectid in a root after log replay is done

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Chris Mason 16 years ago
parent
commit
8d5bf1cb35
2 changed files with 9 additions and 1 deletions
  1. 2 1
      fs/btrfs/inode.c
  2. 7 0
      fs/btrfs/tree-log.c

+ 2 - 1
fs/btrfs/inode.c

@@ -2239,8 +2239,9 @@ static int btrfs_set_inode_index(struct inode *dir, struct inode *inode,
 
 
 	if (BTRFS_I(dir)->index_cnt == (u64)-1) {
 	if (BTRFS_I(dir)->index_cnt == (u64)-1) {
 		ret = btrfs_set_inode_index_count(dir);
 		ret = btrfs_set_inode_index_count(dir);
-		if (ret)
+		if (ret) {
 			return ret;
 			return ret;
+		}
 	}
 	}
 
 
 	*index = BTRFS_I(dir)->index_cnt;
 	*index = BTRFS_I(dir)->index_cnt;

+ 7 - 0
fs/btrfs/tree-log.c

@@ -1027,6 +1027,7 @@ static noinline int fixup_inode_link_count(struct btrfs_trans_handle *trans,
 		inode->i_nlink = nlink;
 		inode->i_nlink = nlink;
 		btrfs_update_inode(trans, root, inode);
 		btrfs_update_inode(trans, root, inode);
 	}
 	}
+	BTRFS_I(inode)->index_cnt = (u64)-1;
 
 
 	return 0;
 	return 0;
 }
 }
@@ -2714,6 +2715,7 @@ int btrfs_recover_log_trees(struct btrfs_root *log_root_tree)
 	struct btrfs_key tmp_key;
 	struct btrfs_key tmp_key;
 	struct btrfs_root *log;
 	struct btrfs_root *log;
 	struct btrfs_fs_info *fs_info = log_root_tree->fs_info;
 	struct btrfs_fs_info *fs_info = log_root_tree->fs_info;
+	u64 highest_inode;
 	struct walk_control wc = {
 	struct walk_control wc = {
 		.process_func = process_one_buffer,
 		.process_func = process_one_buffer,
 		.stage = 0,
 		.stage = 0,
@@ -2772,6 +2774,11 @@ again:
 						      path);
 						      path);
 			BUG_ON(ret);
 			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;
 		key.offset = found_key.offset - 1;
 		free_extent_buffer(log->node);
 		free_extent_buffer(log->node);