Btrfs: don't delete ordered roots from list during cleanup
authorJosef Bacik <jbacik@fusionio.com>
Fri, 27 Sep 2013 20:36:02 +0000 (16:36 -0400)
committerChris Mason <chris.mason@fusionio.com>
Tue, 12 Nov 2013 02:53:49 +0000 (21:53 -0500)
During transaction cleanup after an abort we are just removing roots from the
ordered roots list which is incorrect.  We have a BUG_ON() to make sure that the
root is still part of the ordered roots list when we put our ordered extent
which we were tripping in this case.  So do like we do everywhere else and just
move it to the tail of the ordered roots list and allow the normal cleanup to
take care of stuff.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fusionio.com>
Signed-off-by: Chris Mason <chris.mason@fusionio.com>
fs/btrfs/disk-io.c

index 113cd43530bacc0b35c501ed1e0ef606fda18924..01a26e2eb310c4a72a0cd70353992c39dad566b7 100644 (file)
@@ -3836,7 +3836,8 @@ static void btrfs_destroy_all_ordered_extents(struct btrfs_fs_info *fs_info)
        while (!list_empty(&splice)) {
                root = list_first_entry(&splice, struct btrfs_root,
                                        ordered_root);
-               list_del_init(&root->ordered_root);
+               list_move_tail(&root->ordered_root,
+                              &fs_info->ordered_roots);
 
                btrfs_destroy_ordered_extents(root);