aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/send.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/send.c')
-rw-r--r--fs/btrfs/send.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index 094cc1444a90..5be83b5a1b43 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -3340,7 +3340,8 @@ static void free_pending_move(struct send_ctx *sctx, struct pending_dir_move *m)
3340 kfree(m); 3340 kfree(m);
3341} 3341}
3342 3342
3343static void tail_append_pending_moves(struct pending_dir_move *moves, 3343static void tail_append_pending_moves(struct send_ctx *sctx,
3344 struct pending_dir_move *moves,
3344 struct list_head *stack) 3345 struct list_head *stack)
3345{ 3346{
3346 if (list_empty(&moves->list)) { 3347 if (list_empty(&moves->list)) {
@@ -3351,6 +3352,10 @@ static void tail_append_pending_moves(struct pending_dir_move *moves,
3351 list_add_tail(&moves->list, stack); 3352 list_add_tail(&moves->list, stack);
3352 list_splice_tail(&list, stack); 3353 list_splice_tail(&list, stack);
3353 } 3354 }
3355 if (!RB_EMPTY_NODE(&moves->node)) {
3356 rb_erase(&moves->node, &sctx->pending_dir_moves);
3357 RB_CLEAR_NODE(&moves->node);
3358 }
3354} 3359}
3355 3360
3356static int apply_children_dir_moves(struct send_ctx *sctx) 3361static int apply_children_dir_moves(struct send_ctx *sctx)
@@ -3365,7 +3370,7 @@ static int apply_children_dir_moves(struct send_ctx *sctx)
3365 return 0; 3370 return 0;
3366 3371
3367 INIT_LIST_HEAD(&stack); 3372 INIT_LIST_HEAD(&stack);
3368 tail_append_pending_moves(pm, &stack); 3373 tail_append_pending_moves(sctx, pm, &stack);
3369 3374
3370 while (!list_empty(&stack)) { 3375 while (!list_empty(&stack)) {
3371 pm = list_first_entry(&stack, struct pending_dir_move, list); 3376 pm = list_first_entry(&stack, struct pending_dir_move, list);
@@ -3376,7 +3381,7 @@ static int apply_children_dir_moves(struct send_ctx *sctx)
3376 goto out; 3381 goto out;
3377 pm = get_pending_dir_moves(sctx, parent_ino); 3382 pm = get_pending_dir_moves(sctx, parent_ino);
3378 if (pm) 3383 if (pm)
3379 tail_append_pending_moves(pm, &stack); 3384 tail_append_pending_moves(sctx, pm, &stack);
3380 } 3385 }
3381 return 0; 3386 return 0;
3382 3387