aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/tree-log.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index aaa2e2b67478..c91309dea8da 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -93,7 +93,8 @@
93 */ 93 */
94#define LOG_WALK_PIN_ONLY 0 94#define LOG_WALK_PIN_ONLY 0
95#define LOG_WALK_REPLAY_INODES 1 95#define LOG_WALK_REPLAY_INODES 1
96#define LOG_WALK_REPLAY_ALL 2 96#define LOG_WALK_REPLAY_DIR_INDEX 2
97#define LOG_WALK_REPLAY_ALL 3
97 98
98static int btrfs_log_inode(struct btrfs_trans_handle *trans, 99static int btrfs_log_inode(struct btrfs_trans_handle *trans,
99 struct btrfs_root *root, struct inode *inode, 100 struct btrfs_root *root, struct inode *inode,
@@ -2027,6 +2028,15 @@ static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,
2027 if (ret) 2028 if (ret)
2028 break; 2029 break;
2029 } 2030 }
2031
2032 if (key.type == BTRFS_DIR_INDEX_KEY &&
2033 wc->stage == LOG_WALK_REPLAY_DIR_INDEX) {
2034 ret = replay_one_dir_item(wc->trans, root, path,
2035 eb, i, &key);
2036 if (ret)
2037 break;
2038 }
2039
2030 if (wc->stage < LOG_WALK_REPLAY_ALL) 2040 if (wc->stage < LOG_WALK_REPLAY_ALL)
2031 continue; 2041 continue;
2032 2042
@@ -2048,8 +2058,7 @@ static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,
2048 eb, i, &key); 2058 eb, i, &key);
2049 if (ret) 2059 if (ret)
2050 break; 2060 break;
2051 } else if (key.type == BTRFS_DIR_ITEM_KEY || 2061 } else if (key.type == BTRFS_DIR_ITEM_KEY) {
2052 key.type == BTRFS_DIR_INDEX_KEY) {
2053 ret = replay_one_dir_item(wc->trans, root, path, 2062 ret = replay_one_dir_item(wc->trans, root, path,
2054 eb, i, &key); 2063 eb, i, &key);
2055 if (ret) 2064 if (ret)