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 --- |