|
@@ -93,7 +93,8 @@
|
|
|
*/
|
|
|
#define LOG_WALK_PIN_ONLY 0
|
|
|
#define LOG_WALK_REPLAY_INODES 1
|
|
|
-#define LOG_WALK_REPLAY_ALL 2
|
|
|
+#define LOG_WALK_REPLAY_DIR_INDEX 2
|
|
|
+#define LOG_WALK_REPLAY_ALL 3
|
|
|
|
|
|
static int btrfs_log_inode(struct btrfs_trans_handle *trans,
|
|
|
struct btrfs_root *root, struct inode *inode,
|
|
@@ -2027,6 +2028,15 @@ static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,
|
|
|
if (ret)
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ if (key.type == BTRFS_DIR_INDEX_KEY &&
|
|
|
+ wc->stage == LOG_WALK_REPLAY_DIR_INDEX) {
|
|
|
+ ret = replay_one_dir_item(wc->trans, root, path,
|
|
|
+ eb, i, &key);
|
|
|
+ if (ret)
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
if (wc->stage < LOG_WALK_REPLAY_ALL)
|
|
|
continue;
|
|
|
|
|
@@ -2048,8 +2058,7 @@ static int replay_one_buffer(struct btrfs_root *log, struct extent_buffer *eb,
|
|
|
eb, i, &key);
|
|
|
if (ret)
|
|
|
break;
|
|
|
- } else if (key.type == BTRFS_DIR_ITEM_KEY ||
|
|
|
- key.type == BTRFS_DIR_INDEX_KEY) {
|
|
|
+ } else if (key.type == BTRFS_DIR_ITEM_KEY) {
|
|
|
ret = replay_one_dir_item(wc->trans, root, path,
|
|
|
eb, i, &key);
|
|
|
if (ret)
|