extent-tree.c (c31f8830f0dfd31e7e196b85ca1b39aef8b77d57) extent-tree.c (55c69072d6bd5be170a85467f64a20963cddf490)
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 1198 unchanged lines hidden (view full) ---

1207 buf = btrfs_find_tree_block(root, bytenr, num_bytes);
1208 if (buf) {
1209 if (btrfs_buffer_uptodate(buf)) {
1210 u64 transid =
1211 root->fs_info->running_transaction->transid;
1212 u64 header_transid =
1213 btrfs_header_generation(buf);
1214 if (header_transid == transid) {
1/*
2 * Copyright (C) 2007 Oracle. All rights reserved.
3 *
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public
6 * License v2 as published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful,

--- 1198 unchanged lines hidden (view full) ---

1207 buf = btrfs_find_tree_block(root, bytenr, num_bytes);
1208 if (buf) {
1209 if (btrfs_buffer_uptodate(buf)) {
1210 u64 transid =
1211 root->fs_info->running_transaction->transid;
1212 u64 header_transid =
1213 btrfs_header_generation(buf);
1214 if (header_transid == transid) {
1215 clean_tree_block(NULL, root, buf);
1215 free_extent_buffer(buf);
1216 return 1;
1217 }
1218 }
1219 free_extent_buffer(buf);
1220 }
1221 update_pinned_extents(root, bytenr, num_bytes, 1);
1222 } else {

--- 21 unchanged lines hidden (view full) ---

1244 struct extent_buffer *leaf;
1245 int ret;
1246 struct btrfs_extent_item *ei;
1247 u32 refs;
1248
1249 key.objectid = bytenr;
1250 btrfs_set_key_type(&key, BTRFS_EXTENT_ITEM_KEY);
1251 key.offset = num_bytes;
1216 free_extent_buffer(buf);
1217 return 1;
1218 }
1219 }
1220 free_extent_buffer(buf);
1221 }
1222 update_pinned_extents(root, bytenr, num_bytes, 1);
1223 } else {

--- 21 unchanged lines hidden (view full) ---

1245 struct extent_buffer *leaf;
1246 int ret;
1247 struct btrfs_extent_item *ei;
1248 u32 refs;
1249
1250 key.objectid = bytenr;
1251 btrfs_set_key_type(&key, BTRFS_EXTENT_ITEM_KEY);
1252 key.offset = num_bytes;
1252
1253 path = btrfs_alloc_path();
1254 if (!path)
1255 return -ENOMEM;
1256
1257 path->reada = 0;
1258 ret = lookup_extent_backref(trans, extent_root, path,
1259 bytenr, root_objectid,
1260 ref_generation,

--- 382 unchanged lines hidden (view full) ---

1643 if (new_hint < btrfs_super_total_bytes(&info->super_copy))
1644 hint_byte = new_hint;
1645
1646 WARN_ON(num_bytes < root->sectorsize);
1647 ret = find_free_extent(trans, root, num_bytes, empty_size,
1648 search_start, search_end, hint_byte, ins,
1649 trans->alloc_exclude_start,
1650 trans->alloc_exclude_nr, data);
1253 path = btrfs_alloc_path();
1254 if (!path)
1255 return -ENOMEM;
1256
1257 path->reada = 0;
1258 ret = lookup_extent_backref(trans, extent_root, path,
1259 bytenr, root_objectid,
1260 ref_generation,

--- 382 unchanged lines hidden (view full) ---

1643 if (new_hint < btrfs_super_total_bytes(&info->super_copy))
1644 hint_byte = new_hint;
1645
1646 WARN_ON(num_bytes < root->sectorsize);
1647 ret = find_free_extent(trans, root, num_bytes, empty_size,
1648 search_start, search_end, hint_byte, ins,
1649 trans->alloc_exclude_start,
1650 trans->alloc_exclude_nr, data);
1651if (ret)
1652printk("find free extent returns %d\n", ret);
1653 BUG_ON(ret);
1654 if (ret)
1655 return ret;
1656
1657 /* block accounting for super block */
1658 super_used = btrfs_super_bytes_used(&info->super_copy);
1659 btrfs_set_super_bytes_used(&info->super_copy, super_used + num_bytes);
1660

--- 98 unchanged lines hidden (view full) ---

1759 }
1760 buf = btrfs_find_create_tree_block(root, ins.objectid, blocksize);
1761 if (!buf) {
1762 btrfs_free_extent(trans, root, ins.objectid, blocksize,
1763 root->root_key.objectid, ref_generation,
1764 0, 0, 0);
1765 return ERR_PTR(-ENOMEM);
1766 }
1651 BUG_ON(ret);
1652 if (ret)
1653 return ret;
1654
1655 /* block accounting for super block */
1656 super_used = btrfs_super_bytes_used(&info->super_copy);
1657 btrfs_set_super_bytes_used(&info->super_copy, super_used + num_bytes);
1658

--- 98 unchanged lines hidden (view full) ---

1757 }
1758 buf = btrfs_find_create_tree_block(root, ins.objectid, blocksize);
1759 if (!buf) {
1760 btrfs_free_extent(trans, root, ins.objectid, blocksize,
1761 root->root_key.objectid, ref_generation,
1762 0, 0, 0);
1763 return ERR_PTR(-ENOMEM);
1764 }
1765 btrfs_set_header_generation(buf, trans->transid);
1766 clean_tree_block(trans, root, buf);
1767 wait_on_tree_block_writeback(root, buf);
1767 btrfs_set_buffer_uptodate(buf);
1768 btrfs_set_buffer_uptodate(buf);
1769
1770 if (PageDirty(buf->first_page)) {
1771 printk("page %lu dirty\n", buf->first_page->index);
1772 WARN_ON(1);
1773 }
1774
1768 set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
1769 buf->start + buf->len - 1, GFP_NOFS);
1770 set_extent_bits(&BTRFS_I(root->fs_info->btree_inode)->extent_tree,
1771 buf->start, buf->start + buf->len - 1,
1772 EXTENT_CSUM, GFP_NOFS);
1773 buf->flags |= EXTENT_CSUM;
1774 btrfs_set_buffer_defrag(buf);
1775 trans->blocks_used++;

--- 902 unchanged lines hidden ---
1775 set_extent_dirty(&trans->transaction->dirty_pages, buf->start,
1776 buf->start + buf->len - 1, GFP_NOFS);
1777 set_extent_bits(&BTRFS_I(root->fs_info->btree_inode)->extent_tree,
1778 buf->start, buf->start + buf->len - 1,
1779 EXTENT_CSUM, GFP_NOFS);
1780 buf->flags |= EXTENT_CSUM;
1781 btrfs_set_buffer_defrag(buf);
1782 trans->blocks_used++;

--- 902 unchanged lines hidden ---