WARN_ON(btrfs_header_level(eb) != 0);
        WARN_ON(btrfs_header_nritems(eb) != 0);
 
-       ret = btrfs_free_extent(trans, fs_info->tree_root,
-                               eb->start, eb->len,
-                               BTRFS_TREE_LOG_OBJECTID, 0, 0, 0, 1);
+       ret = btrfs_free_reserved_extent(fs_info->tree_root,
+                               eb->start, eb->len);
        BUG_ON(ret);
 
        free_extent_buffer(eb);
 
                return 0;
        }
        /* if metadata always pin */
-       if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID)
+       if (owner_objectid < BTRFS_FIRST_FREE_OBJECTID) {
+               if (root->root_key.objectid == BTRFS_TREE_LOG_OBJECTID) {
+                       /* btrfs_free_reserved_extent */
+                       set_extent_dirty(&root->fs_info->free_space_cache,
+                                bytenr, bytenr + num_bytes - 1, GFP_NOFS);
+                       return 0;
+               }
                pin = 1;
+       }
 
        /* if data pin when any transaction has committed this */
        if (ref_generation != trans->transid)
                                     min_alloc_size, empty_size, hint_byte,
                                     search_end, ins, data);
        BUG_ON(ret);
-       ret = __btrfs_alloc_reserved_extent(trans, root, root_objectid,
-                                           ref_generation, owner,
-                                           owner_offset, ins);
-       BUG_ON(ret);
+       if (root_objectid != BTRFS_TREE_LOG_OBJECTID) {
+               ret = __btrfs_alloc_reserved_extent(trans, root, root_objectid,
+                                                   ref_generation, owner,
+                                                   owner_offset, ins);
+               BUG_ON(ret);
 
+       }
        maybe_unlock_mutex(root);
        return ret;
 }
 
 
                                WARN_ON(root_owner !=
                                        BTRFS_TREE_LOG_OBJECTID);
-                               ret = btrfs_free_extent(trans, root, bytenr,
-                                                       blocksize, root_owner,
-                                                       root_gen, 0, 0, 1);
+                               ret = btrfs_free_reserved_extent(root,
+                                                        bytenr, blocksize);
                                BUG_ON(ret);
                        }
                        free_extent_buffer(next);
                        BUG_ON(ret);
                }
                WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
-               ret = btrfs_free_extent(trans, root, bytenr, blocksize,
-                                         root_owner, root_gen, 0, 0, 1);
+               ret = btrfs_free_reserved_extent(root, bytenr, blocksize);
                BUG_ON(ret);
        }
        free_extent_buffer(path->nodes[*level]);
                                }
 
                                WARN_ON(root_owner != BTRFS_TREE_LOG_OBJECTID);
-                               ret = btrfs_free_extent(trans, root,
+                               ret = btrfs_free_reserved_extent(root,
                                                path->nodes[*level]->start,
-                                               path->nodes[*level]->len,
-                                               root_owner, root_gen, 0, 0, 1);
+                                               path->nodes[*level]->len);
                                BUG_ON(ret);
                        }
                        free_extent_buffer(path->nodes[*level]);
                        }
                        WARN_ON(log->root_key.objectid !=
                                BTRFS_TREE_LOG_OBJECTID);
-                       ret = btrfs_free_extent(trans, log,
-                                               next->start, next->len,
-                                               log->root_key.objectid,
-                                               btrfs_header_generation(next),
-                                               0, 0, 1);
+                       ret = btrfs_free_reserved_extent(log, next->start,
+                                                        next->len);
                        BUG_ON(ret);
                }
        }