diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/btrfs/tree-log.c | 15 |
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 | ||
98 | static int btrfs_log_inode(struct btrfs_trans_handle *trans, | 99 | static 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) |