* orphan must not get deleted.
                         * find_dead_roots already ran before us, so if this
                         * is a snapshot deletion, we should find the root
-                        * in the dead_roots list
+                        * in the fs_roots radix tree.
                         */
-                       spin_lock(&fs_info->trans_lock);
-                       list_for_each_entry(dead_root, &fs_info->dead_roots,
-                                           root_list) {
-                               if (dead_root->root_key.objectid ==
-                                   found_key.objectid) {
-                                       is_dead_root = 1;
-                                       break;
-                               }
-                       }
-                       spin_unlock(&fs_info->trans_lock);
+
+                       spin_lock(&fs_info->fs_roots_radix_lock);
+                       dead_root = radix_tree_lookup(&fs_info->fs_roots_radix,
+                                                        (unsigned long)found_key.objectid);
+                       if (dead_root && btrfs_root_refs(&dead_root->root_item) == 0)
+                               is_dead_root = 1;
+                       spin_unlock(&fs_info->fs_roots_radix_lock);
+
                        if (is_dead_root) {
                                /* prevent this orphan from being found again */
                                key.offset = found_key.objectid - 1;