aboutsummaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/btrfs/inode.c')
-rw-r--r--fs/btrfs/inode.c300
1 files changed, 143 insertions, 157 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 9327f45434e8..9d0eaa57d4ee 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -393,7 +393,10 @@ again:
393 (BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))) { 393 (BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS))) {
394 WARN_ON(pages); 394 WARN_ON(pages);
395 pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS); 395 pages = kzalloc(sizeof(struct page *) * nr_pages, GFP_NOFS);
396 BUG_ON(!pages); 396 if (!pages) {
397 /* just bail out to the uncompressed code */
398 goto cont;
399 }
397 400
398 if (BTRFS_I(inode)->force_compress) 401 if (BTRFS_I(inode)->force_compress)
399 compress_type = BTRFS_I(inode)->force_compress; 402 compress_type = BTRFS_I(inode)->force_compress;
@@ -424,6 +427,7 @@ again:
424 will_compress = 1; 427 will_compress = 1;
425 } 428 }
426 } 429 }
430cont:
427 if (start == 0) { 431 if (start == 0) {
428 trans = btrfs_join_transaction(root); 432 trans = btrfs_join_transaction(root);
429 BUG_ON(IS_ERR(trans)); 433 BUG_ON(IS_ERR(trans));
@@ -820,7 +824,7 @@ static noinline int cow_file_range(struct inode *inode,
820 } 824 }
821 825
822 BUG_ON(disk_num_bytes > 826 BUG_ON(disk_num_bytes >
823 btrfs_super_total_bytes(&root->fs_info->super_copy)); 827 btrfs_super_total_bytes(root->fs_info->super_copy));
824 828
825 alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); 829 alloc_hint = get_extent_allocation_hint(inode, start, num_bytes);
826 btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); 830 btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0);
@@ -1792,12 +1796,12 @@ static int btrfs_finish_ordered_io(struct inode *inode, u64 start, u64 end)
1792 } 1796 }
1793 ret = 0; 1797 ret = 0;
1794out: 1798out:
1795 if (nolock) { 1799 if (root != root->fs_info->tree_root)
1796 if (trans)
1797 btrfs_end_transaction_nolock(trans, root);
1798 } else {
1799 btrfs_delalloc_release_metadata(inode, ordered_extent->len); 1800 btrfs_delalloc_release_metadata(inode, ordered_extent->len);
1800 if (trans) 1801 if (trans) {
1802 if (nolock)
1803 btrfs_end_transaction_nolock(trans, root);
1804 else
1801 btrfs_end_transaction(trans, root); 1805 btrfs_end_transaction(trans, root);
1802 } 1806 }
1803 1807
@@ -1931,89 +1935,6 @@ void btrfs_run_delayed_iputs(struct btrfs_root *root)
1931 up_read(&root->fs_info->cleanup_work_sem); 1935 up_read(&root->fs_info->cleanup_work_sem);
1932} 1936}
1933 1937
1934/*
1935 * calculate extra metadata reservation when snapshotting a subvolume
1936 * contains orphan files.
1937 */
1938void btrfs_orphan_pre_snapshot(struct btrfs_trans_handle *trans,
1939 struct btrfs_pending_snapshot *pending,
1940 u64 *bytes_to_reserve)
1941{
1942 struct btrfs_root *root;
1943 struct btrfs_block_rsv *block_rsv;
1944 u64 num_bytes;
1945 int index;
1946
1947 root = pending->root;
1948 if (!root->orphan_block_rsv || list_empty(&root->orphan_list))
1949 return;
1950
1951 block_rsv = root->orphan_block_rsv;
1952
1953 /* orphan block reservation for the snapshot */
1954 num_bytes = block_rsv->size;
1955
1956 /*
1957 * after the snapshot is created, COWing tree blocks may use more
1958 * space than it frees. So we should make sure there is enough
1959 * reserved space.
1960 */
1961 index = trans->transid & 0x1;
1962 if (block_rsv->reserved + block_rsv->freed[index] < block_rsv->size) {
1963 num_bytes += block_rsv->size -
1964 (block_rsv->reserved + block_rsv->freed[index]);
1965 }
1966
1967 *bytes_to_reserve += num_bytes;
1968}
1969
1970void btrfs_orphan_post_snapshot(struct btrfs_trans_handle *trans,
1971 struct btrfs_pending_snapshot *pending)
1972{
1973 struct btrfs_root *root = pending->root;
1974 struct btrfs_root *snap = pending->snap;
1975 struct btrfs_block_rsv *block_rsv;
1976 u64 num_bytes;
1977 int index;
1978 int ret;
1979
1980 if (!root->orphan_block_rsv || list_empty(&root->orphan_list))
1981 return;
1982
1983 /* refill source subvolume's orphan block reservation */
1984 block_rsv = root->orphan_block_rsv;
1985 index = trans->transid & 0x1;
1986 if (block_rsv->reserved + block_rsv->freed[index] < block_rsv->size) {
1987 num_bytes = block_rsv->size -
1988 (block_rsv->reserved + block_rsv->freed[index]);
1989 ret = btrfs_block_rsv_migrate(&pending->block_rsv,
1990 root->orphan_block_rsv,
1991 num_bytes);
1992 BUG_ON(ret);
1993 }
1994
1995 /* setup orphan block reservation for the snapshot */
1996 block_rsv = btrfs_alloc_block_rsv(snap);
1997 BUG_ON(!block_rsv);
1998
1999 btrfs_add_durable_block_rsv(root->fs_info, block_rsv);
2000 snap->orphan_block_rsv = block_rsv;
2001
2002 num_bytes = root->orphan_block_rsv->size;
2003 ret = btrfs_block_rsv_migrate(&pending->block_rsv,
2004 block_rsv, num_bytes);
2005 BUG_ON(ret);
2006
2007#if 0
2008 /* insert orphan item for the snapshot */
2009 WARN_ON(!root->orphan_item_inserted);
2010 ret = btrfs_insert_orphan_item(trans, root->fs_info->tree_root,
2011 snap->root_key.objectid);
2012 BUG_ON(ret);
2013 snap->orphan_item_inserted = 1;
2014#endif
2015}
2016
2017enum btrfs_orphan_cleanup_state { 1938enum btrfs_orphan_cleanup_state {
2018 ORPHAN_CLEANUP_STARTED = 1, 1939 ORPHAN_CLEANUP_STARTED = 1,
2019 ORPHAN_CLEANUP_DONE = 2, 1940 ORPHAN_CLEANUP_DONE = 2,
@@ -2099,9 +2020,6 @@ int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode)
2099 } 2020 }
2100 spin_unlock(&root->orphan_lock); 2021 spin_unlock(&root->orphan_lock);
2101 2022
2102 if (block_rsv)
2103 btrfs_add_durable_block_rsv(root->fs_info, block_rsv);
2104
2105 /* grab metadata reservation from transaction handle */ 2023 /* grab metadata reservation from transaction handle */
2106 if (reserve) { 2024 if (reserve) {
2107 ret = btrfs_orphan_reserve_metadata(trans, inode); 2025 ret = btrfs_orphan_reserve_metadata(trans, inode);
@@ -2168,6 +2086,7 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
2168 struct btrfs_key key, found_key; 2086 struct btrfs_key key, found_key;
2169 struct btrfs_trans_handle *trans; 2087 struct btrfs_trans_handle *trans;
2170 struct inode *inode; 2088 struct inode *inode;
2089 u64 last_objectid = 0;
2171 int ret = 0, nr_unlink = 0, nr_truncate = 0; 2090 int ret = 0, nr_unlink = 0, nr_truncate = 0;
2172 2091
2173 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED)) 2092 if (cmpxchg(&root->orphan_cleanup_state, 0, ORPHAN_CLEANUP_STARTED))
@@ -2219,41 +2138,49 @@ int btrfs_orphan_cleanup(struct btrfs_root *root)
2219 * crossing root thing. we store the inode number in the 2138 * crossing root thing. we store the inode number in the
2220 * offset of the orphan item. 2139 * offset of the orphan item.
2221 */ 2140 */
2141
2142 if (found_key.offset == last_objectid) {
2143 printk(KERN_ERR "btrfs: Error removing orphan entry, "
2144 "stopping orphan cleanup\n");
2145 ret = -EINVAL;
2146 goto out;
2147 }
2148
2149 last_objectid = found_key.offset;
2150
2222 found_key.objectid = found_key.offset; 2151 found_key.objectid = found_key.offset;
2223 found_key.type = BTRFS_INODE_ITEM_KEY; 2152 found_key.type = BTRFS_INODE_ITEM_KEY;
2224 found_key.offset = 0; 2153 found_key.offset = 0;
2225 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); 2154 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL);
2226 if (IS_ERR(inode)) { 2155 ret = PTR_RET(inode);
2227 ret = PTR_ERR(inode); 2156 if (ret && ret != -ESTALE)
2228 goto out; 2157 goto out;
2229 }
2230 2158
2231 /* 2159 /*
2232 * add this inode to the orphan list so btrfs_orphan_del does 2160 * Inode is already gone but the orphan item is still there,
2233 * the proper thing when we hit it 2161 * kill the orphan item.
2234 */
2235 spin_lock(&root->orphan_lock);
2236 list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list);
2237 spin_unlock(&root->orphan_lock);
2238
2239 /*
2240 * if this is a bad inode, means we actually succeeded in
2241 * removing the inode, but not the orphan record, which means
2242 * we need to manually delete the orphan since iput will just
2243 * do a destroy_inode
2244 */ 2162 */
2245 if (is_bad_inode(inode)) { 2163 if (ret == -ESTALE) {
2246 trans = btrfs_start_transaction(root, 0); 2164 trans = btrfs_start_transaction(root, 1);
2247 if (IS_ERR(trans)) { 2165 if (IS_ERR(trans)) {
2248 ret = PTR_ERR(trans); 2166 ret = PTR_ERR(trans);
2249 goto out; 2167 goto out;
2250 } 2168 }
2251 btrfs_orphan_del(trans, inode); 2169 ret = btrfs_del_orphan_item(trans, root,
2170 found_key.objectid);
2171 BUG_ON(ret);
2252 btrfs_end_transaction(trans, root); 2172 btrfs_end_transaction(trans, root);
2253 iput(inode);
2254 continue; 2173 continue;
2255 } 2174 }
2256 2175
2176 /*
2177 * add this inode to the orphan list so btrfs_orphan_del does
2178 * the proper thing when we hit it
2179 */
2180 spin_lock(&root->orphan_lock);
2181 list_add(&BTRFS_I(inode)->i_orphan, &root->orphan_list);
2182 spin_unlock(&root->orphan_lock);
2183
2257 /* if we have links, this was a truncate, lets do that */ 2184 /* if we have links, this was a truncate, lets do that */
2258 if (inode->i_nlink) { 2185 if (inode->i_nlink) {
2259 if (!S_ISREG(inode->i_mode)) { 2186 if (!S_ISREG(inode->i_mode)) {
@@ -2687,7 +2614,16 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir,
2687 u64 ino = btrfs_ino(inode); 2614 u64 ino = btrfs_ino(inode);
2688 u64 dir_ino = btrfs_ino(dir); 2615 u64 dir_ino = btrfs_ino(dir);
2689 2616
2690 trans = btrfs_start_transaction(root, 10); 2617 /*
2618 * 1 for the possible orphan item
2619 * 1 for the dir item
2620 * 1 for the dir index
2621 * 1 for the inode ref
2622 * 1 for the inode ref in the tree log
2623 * 2 for the dir entries in the log
2624 * 1 for the inode
2625 */
2626 trans = btrfs_start_transaction(root, 8);
2691 if (!IS_ERR(trans) || PTR_ERR(trans) != -ENOSPC) 2627 if (!IS_ERR(trans) || PTR_ERR(trans) != -ENOSPC)
2692 return trans; 2628 return trans;
2693 2629
@@ -2710,7 +2646,8 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir,
2710 return ERR_PTR(-ENOMEM); 2646 return ERR_PTR(-ENOMEM);
2711 } 2647 }
2712 2648
2713 trans = btrfs_start_transaction(root, 0); 2649 /* 1 for the orphan item */
2650 trans = btrfs_start_transaction(root, 1);
2714 if (IS_ERR(trans)) { 2651 if (IS_ERR(trans)) {
2715 btrfs_free_path(path); 2652 btrfs_free_path(path);
2716 root->fs_info->enospc_unlink = 0; 2653 root->fs_info->enospc_unlink = 0;
@@ -2815,6 +2752,12 @@ static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir,
2815 err = 0; 2752 err = 0;
2816out: 2753out:
2817 btrfs_free_path(path); 2754 btrfs_free_path(path);
2755 /* Migrate the orphan reservation over */
2756 if (!err)
2757 err = btrfs_block_rsv_migrate(trans->block_rsv,
2758 &root->fs_info->global_block_rsv,
2759 trans->bytes_reserved);
2760
2818 if (err) { 2761 if (err) {
2819 btrfs_end_transaction(trans, root); 2762 btrfs_end_transaction(trans, root);
2820 root->fs_info->enospc_unlink = 0; 2763 root->fs_info->enospc_unlink = 0;
@@ -2829,6 +2772,9 @@ static void __unlink_end_trans(struct btrfs_trans_handle *trans,
2829 struct btrfs_root *root) 2772 struct btrfs_root *root)
2830{ 2773{
2831 if (trans->block_rsv == &root->fs_info->global_block_rsv) { 2774 if (trans->block_rsv == &root->fs_info->global_block_rsv) {
2775 btrfs_block_rsv_release(root, trans->block_rsv,
2776 trans->bytes_reserved);
2777 trans->block_rsv = &root->fs_info->trans_block_rsv;
2832 BUG_ON(!root->fs_info->enospc_unlink); 2778 BUG_ON(!root->fs_info->enospc_unlink);
2833 root->fs_info->enospc_unlink = 0; 2779 root->fs_info->enospc_unlink = 0;
2834 } 2780 }
@@ -3220,6 +3166,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from)
3220 pgoff_t index = from >> PAGE_CACHE_SHIFT; 3166 pgoff_t index = from >> PAGE_CACHE_SHIFT;
3221 unsigned offset = from & (PAGE_CACHE_SIZE-1); 3167 unsigned offset = from & (PAGE_CACHE_SIZE-1);
3222 struct page *page; 3168 struct page *page;
3169 gfp_t mask = btrfs_alloc_write_mask(mapping);
3223 int ret = 0; 3170 int ret = 0;
3224 u64 page_start; 3171 u64 page_start;
3225 u64 page_end; 3172 u64 page_end;
@@ -3232,7 +3179,7 @@ static int btrfs_truncate_page(struct address_space *mapping, loff_t from)
3232 3179
3233 ret = -ENOMEM; 3180 ret = -ENOMEM;
3234again: 3181again:
3235 page = find_or_create_page(mapping, index, GFP_NOFS); 3182 page = find_or_create_page(mapping, index, mask);
3236 if (!page) { 3183 if (!page) {
3237 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); 3184 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE);
3238 goto out; 3185 goto out;
@@ -3465,6 +3412,8 @@ void btrfs_evict_inode(struct inode *inode)
3465{ 3412{
3466 struct btrfs_trans_handle *trans; 3413 struct btrfs_trans_handle *trans;
3467 struct btrfs_root *root = BTRFS_I(inode)->root; 3414 struct btrfs_root *root = BTRFS_I(inode)->root;
3415 struct btrfs_block_rsv *rsv, *global_rsv;
3416 u64 min_size = btrfs_calc_trunc_metadata_size(root, 1);
3468 unsigned long nr; 3417 unsigned long nr;
3469 int ret; 3418 int ret;
3470 3419
@@ -3492,22 +3441,55 @@ void btrfs_evict_inode(struct inode *inode)
3492 goto no_delete; 3441 goto no_delete;
3493 } 3442 }
3494 3443
3444 rsv = btrfs_alloc_block_rsv(root);
3445 if (!rsv) {
3446 btrfs_orphan_del(NULL, inode);
3447 goto no_delete;
3448 }
3449 rsv->size = min_size;
3450 global_rsv = &root->fs_info->global_block_rsv;
3451
3495 btrfs_i_size_write(inode, 0); 3452 btrfs_i_size_write(inode, 0);
3496 3453
3454 /*
3455 * This is a bit simpler than btrfs_truncate since
3456 *
3457 * 1) We've already reserved our space for our orphan item in the
3458 * unlink.
3459 * 2) We're going to delete the inode item, so we don't need to update
3460 * it at all.
3461 *
3462 * So we just need to reserve some slack space in case we add bytes when
3463 * doing the truncate.
3464 */
3497 while (1) { 3465 while (1) {
3498 trans = btrfs_join_transaction(root); 3466 ret = btrfs_block_rsv_refill(root, rsv, min_size);
3499 BUG_ON(IS_ERR(trans)); 3467
3500 trans->block_rsv = root->orphan_block_rsv; 3468 /*
3469 * Try and steal from the global reserve since we will
3470 * likely not use this space anyway, we want to try as
3471 * hard as possible to get this to work.
3472 */
3473 if (ret)
3474 ret = btrfs_block_rsv_migrate(global_rsv, rsv, min_size);
3501 3475
3502 ret = btrfs_block_rsv_check(trans, root,
3503 root->orphan_block_rsv, 0, 5);
3504 if (ret) { 3476 if (ret) {
3505 BUG_ON(ret != -EAGAIN); 3477 printk(KERN_WARNING "Could not get space for a "
3506 ret = btrfs_commit_transaction(trans, root); 3478 "delete, will truncate on mount %d\n", ret);
3507 BUG_ON(ret); 3479 btrfs_orphan_del(NULL, inode);
3508 continue; 3480 btrfs_free_block_rsv(root, rsv);
3481 goto no_delete;
3482 }
3483
3484 trans = btrfs_start_transaction(root, 0);
3485 if (IS_ERR(trans)) {
3486 btrfs_orphan_del(NULL, inode);
3487 btrfs_free_block_rsv(root, rsv);
3488 goto no_delete;
3509 } 3489 }
3510 3490
3491 trans->block_rsv = rsv;
3492
3511 ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0); 3493 ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0);
3512 if (ret != -EAGAIN) 3494 if (ret != -EAGAIN)
3513 break; 3495 break;
@@ -3516,14 +3498,17 @@ void btrfs_evict_inode(struct inode *inode)
3516 btrfs_end_transaction(trans, root); 3498 btrfs_end_transaction(trans, root);
3517 trans = NULL; 3499 trans = NULL;
3518 btrfs_btree_balance_dirty(root, nr); 3500 btrfs_btree_balance_dirty(root, nr);
3519
3520 } 3501 }
3521 3502
3503 btrfs_free_block_rsv(root, rsv);
3504
3522 if (ret == 0) { 3505 if (ret == 0) {
3506 trans->block_rsv = root->orphan_block_rsv;
3523 ret = btrfs_orphan_del(trans, inode); 3507 ret = btrfs_orphan_del(trans, inode);
3524 BUG_ON(ret); 3508 BUG_ON(ret);
3525 } 3509 }
3526 3510
3511 trans->block_rsv = &root->fs_info->trans_block_rsv;
3527 if (!(root == root->fs_info->tree_root || 3512 if (!(root == root->fs_info->tree_root ||
3528 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)) 3513 root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID))
3529 btrfs_return_ino(root, btrfs_ino(inode)); 3514 btrfs_return_ino(root, btrfs_ino(inode));
@@ -5647,8 +5632,7 @@ again:
5647 if (test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) { 5632 if (test_bit(BTRFS_ORDERED_NOCOW, &ordered->flags)) {
5648 ret = btrfs_ordered_update_i_size(inode, 0, ordered); 5633 ret = btrfs_ordered_update_i_size(inode, 0, ordered);
5649 if (!ret) 5634 if (!ret)
5650 ret = btrfs_update_inode(trans, root, inode); 5635 err = btrfs_update_inode(trans, root, inode);
5651 err = ret;
5652 goto out; 5636 goto out;
5653 } 5637 }
5654 5638
@@ -6393,6 +6377,7 @@ static int btrfs_truncate(struct inode *inode)
6393 struct btrfs_trans_handle *trans; 6377 struct btrfs_trans_handle *trans;
6394 unsigned long nr; 6378 unsigned long nr;
6395 u64 mask = root->sectorsize - 1; 6379 u64 mask = root->sectorsize - 1;
6380 u64 min_size = btrfs_calc_trunc_metadata_size(root, 1);
6396 6381
6397 ret = btrfs_truncate_page(inode->i_mapping, inode->i_size); 6382 ret = btrfs_truncate_page(inode->i_mapping, inode->i_size);
6398 if (ret) 6383 if (ret)
@@ -6440,19 +6425,23 @@ static int btrfs_truncate(struct inode *inode)
6440 rsv = btrfs_alloc_block_rsv(root); 6425 rsv = btrfs_alloc_block_rsv(root);
6441 if (!rsv) 6426 if (!rsv)
6442 return -ENOMEM; 6427 return -ENOMEM;
6443 btrfs_add_durable_block_rsv(root->fs_info, rsv); 6428 rsv->size = min_size;
6444 6429
6430 /*
6431 * 1 for the truncate slack space
6432 * 1 for the orphan item we're going to add
6433 * 1 for the orphan item deletion
6434 * 1 for updating the inode.
6435 */
6445 trans = btrfs_start_transaction(root, 4); 6436 trans = btrfs_start_transaction(root, 4);
6446 if (IS_ERR(trans)) { 6437 if (IS_ERR(trans)) {
6447 err = PTR_ERR(trans); 6438 err = PTR_ERR(trans);
6448 goto out; 6439 goto out;
6449 } 6440 }
6450 6441
6451 /* 6442 /* Migrate the slack space for the truncate to our reserve */
6452 * Reserve space for the truncate process. Truncate should be adding 6443 ret = btrfs_block_rsv_migrate(&root->fs_info->trans_block_rsv, rsv,
6453 * space, but if there are snapshots it may end up using space. 6444 min_size);
6454 */
6455 ret = btrfs_truncate_reserve_metadata(trans, root, rsv);
6456 BUG_ON(ret); 6445 BUG_ON(ret);
6457 6446
6458 ret = btrfs_orphan_add(trans, inode); 6447 ret = btrfs_orphan_add(trans, inode);
@@ -6461,21 +6450,6 @@ static int btrfs_truncate(struct inode *inode)
6461 goto out; 6450 goto out;
6462 } 6451 }
6463 6452
6464 nr = trans->blocks_used;
6465 btrfs_end_transaction(trans, root);
6466 btrfs_btree_balance_dirty(root, nr);
6467
6468 /*
6469 * Ok so we've already migrated our bytes over for the truncate, so here
6470 * just reserve the one slot we need for updating the inode.
6471 */
6472 trans = btrfs_start_transaction(root, 1);
6473 if (IS_ERR(trans)) {
6474 err = PTR_ERR(trans);
6475 goto out;
6476 }
6477 trans->block_rsv = rsv;
6478
6479 /* 6453 /*
6480 * setattr is responsible for setting the ordered_data_close flag, 6454 * setattr is responsible for setting the ordered_data_close flag,
6481 * but that is only tested during the last file release. That 6455 * but that is only tested during the last file release. That
@@ -6497,20 +6471,30 @@ static int btrfs_truncate(struct inode *inode)
6497 btrfs_add_ordered_operation(trans, root, inode); 6471 btrfs_add_ordered_operation(trans, root, inode);
6498 6472
6499 while (1) { 6473 while (1) {
6474 ret = btrfs_block_rsv_refill(root, rsv, min_size);
6475 if (ret) {
6476 /*
6477 * This can only happen with the original transaction we
6478 * started above, every other time we shouldn't have a
6479 * transaction started yet.
6480 */
6481 if (ret == -EAGAIN)
6482 goto end_trans;
6483 err = ret;
6484 break;
6485 }
6486
6500 if (!trans) { 6487 if (!trans) {
6501 trans = btrfs_start_transaction(root, 3); 6488 /* Just need the 1 for updating the inode */
6489 trans = btrfs_start_transaction(root, 1);
6502 if (IS_ERR(trans)) { 6490 if (IS_ERR(trans)) {
6503 err = PTR_ERR(trans); 6491 err = PTR_ERR(trans);
6504 goto out; 6492 goto out;
6505 } 6493 }
6506
6507 ret = btrfs_truncate_reserve_metadata(trans, root,
6508 rsv);
6509 BUG_ON(ret);
6510
6511 trans->block_rsv = rsv;
6512 } 6494 }
6513 6495
6496 trans->block_rsv = rsv;
6497
6514 ret = btrfs_truncate_inode_items(trans, root, inode, 6498 ret = btrfs_truncate_inode_items(trans, root, inode,
6515 inode->i_size, 6499 inode->i_size,
6516 BTRFS_EXTENT_DATA_KEY); 6500 BTRFS_EXTENT_DATA_KEY);
@@ -6525,7 +6509,7 @@ static int btrfs_truncate(struct inode *inode)
6525 err = ret; 6509 err = ret;
6526 break; 6510 break;
6527 } 6511 }
6528 6512end_trans:
6529 nr = trans->blocks_used; 6513 nr = trans->blocks_used;
6530 btrfs_end_transaction(trans, root); 6514 btrfs_end_transaction(trans, root);
6531 trans = NULL; 6515 trans = NULL;
@@ -6607,9 +6591,9 @@ struct inode *btrfs_alloc_inode(struct super_block *sb)
6607 ei->last_sub_trans = 0; 6591 ei->last_sub_trans = 0;
6608 ei->logged_trans = 0; 6592 ei->logged_trans = 0;
6609 ei->delalloc_bytes = 0; 6593 ei->delalloc_bytes = 0;
6610 ei->reserved_bytes = 0;
6611 ei->disk_i_size = 0; 6594 ei->disk_i_size = 0;
6612 ei->flags = 0; 6595 ei->flags = 0;
6596 ei->csum_bytes = 0;
6613 ei->index_cnt = (u64)-1; 6597 ei->index_cnt = (u64)-1;
6614 ei->last_unlink_trans = 0; 6598 ei->last_unlink_trans = 0;
6615 6599
@@ -6655,6 +6639,8 @@ void btrfs_destroy_inode(struct inode *inode)
6655 WARN_ON(inode->i_data.nrpages); 6639 WARN_ON(inode->i_data.nrpages);
6656 WARN_ON(BTRFS_I(inode)->outstanding_extents); 6640 WARN_ON(BTRFS_I(inode)->outstanding_extents);
6657 WARN_ON(BTRFS_I(inode)->reserved_extents); 6641 WARN_ON(BTRFS_I(inode)->reserved_extents);
6642 WARN_ON(BTRFS_I(inode)->delalloc_bytes);
6643 WARN_ON(BTRFS_I(inode)->csum_bytes);
6658 6644
6659 /* 6645 /*
6660 * This can happen where we create an inode, but somebody else also 6646 * This can happen where we create an inode, but somebody else also