diff options
-rw-r--r-- | fs/btrfs/tree-log.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 61a37fdff73c..d6359af9789d 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "print-tree.h" | 26 | #include "print-tree.h" |
27 | #include "backref.h" | 27 | #include "backref.h" |
28 | #include "hash.h" | 28 | #include "hash.h" |
29 | #include "inode-map.h" | ||
29 | 30 | ||
30 | /* magic values for the inode_only field in btrfs_log_inode: | 31 | /* magic values for the inode_only field in btrfs_log_inode: |
31 | * | 32 | * |
@@ -5523,6 +5524,23 @@ again: | |||
5523 | path); | 5524 | path); |
5524 | } | 5525 | } |
5525 | 5526 | ||
5527 | if (!ret && wc.stage == LOG_WALK_REPLAY_ALL) { | ||
5528 | struct btrfs_root *root = wc.replay_dest; | ||
5529 | |||
5530 | btrfs_release_path(path); | ||
5531 | |||
5532 | /* | ||
5533 | * We have just replayed everything, and the highest | ||
5534 | * objectid of fs roots probably has changed in case | ||
5535 | * some inode_item's got replayed. | ||
5536 | * | ||
5537 | * root->objectid_mutex is not acquired as log replay | ||
5538 | * could only happen during mount. | ||
5539 | */ | ||
5540 | ret = btrfs_find_highest_objectid(root, | ||
5541 | &root->highest_objectid); | ||
5542 | } | ||
5543 | |||
5526 | key.offset = found_key.offset - 1; | 5544 | key.offset = found_key.offset - 1; |
5527 | wc.replay_dest->log_root = NULL; | 5545 | wc.replay_dest->log_root = NULL; |
5528 | free_extent_buffer(log->node); | 5546 | free_extent_buffer(log->node); |