Commit 65a246c5ffe3b487a001de025816326939e63362

Authored by Tsutomu Itoh
Committed by Chris Mason
1 parent b0b802d7e3

Btrfs: return error code to caller when btrfs_del_item fails

The error code is returned instead of calling BUG_ON when
btrfs_del_item returns the error.

Signed-off-by: Tsutomu Itoh <t-itoh@jp.fujitsu.com>
Signed-off-by: Chris Mason <chris.mason@oracle.com>

Showing 4 changed files with 19 additions and 11 deletions Side-by-side Diff

fs/btrfs/file-item.c
... ... @@ -551,10 +551,10 @@
551 551 ret = btrfs_search_slot(trans, root, &key, path, -1, 1);
552 552 if (ret > 0) {
553 553 if (path->slots[0] == 0)
554   - goto out;
  554 + break;
555 555 path->slots[0]--;
556 556 } else if (ret < 0) {
557   - goto out;
  557 + break;
558 558 }
559 559  
560 560 leaf = path->nodes[0];
... ... @@ -579,7 +579,8 @@
579 579 /* delete the entire item, it is inside our range */
580 580 if (key.offset >= bytenr && csum_end <= end_byte) {
581 581 ret = btrfs_del_item(trans, root, path);
582   - BUG_ON(ret);
  582 + if (ret)
  583 + goto out;
583 584 if (key.offset == bytenr)
584 585 break;
585 586 } else if (key.offset < bytenr && csum_end > end_byte) {
586 587  
... ... @@ -633,9 +634,10 @@
633 634 }
634 635 btrfs_release_path(root, path);
635 636 }
  637 + ret = 0;
636 638 out:
637 639 btrfs_free_path(path);
638   - return 0;
  640 + return ret;
639 641 }
640 642  
641 643 int btrfs_csum_file_blocks(struct btrfs_trans_handle *trans,
fs/btrfs/root-tree.c
... ... @@ -385,7 +385,10 @@
385 385 *sequence = btrfs_root_ref_sequence(leaf, ref);
386 386  
387 387 ret = btrfs_del_item(trans, tree_root, path);
388   - BUG_ON(ret);
  388 + if (ret) {
  389 + err = ret;
  390 + goto out;
  391 + }
389 392 } else
390 393 err = -ENOENT;
391 394  
... ... @@ -397,6 +400,7 @@
397 400 goto again;
398 401 }
399 402  
  403 +out:
400 404 btrfs_free_path(path);
401 405 return err;
402 406 }
... ... @@ -1050,7 +1050,8 @@
1050 1050 break;
1051 1051  
1052 1052 ret = btrfs_del_item(trans, root, path);
1053   - BUG_ON(ret);
  1053 + if (ret)
  1054 + goto out;
1054 1055  
1055 1056 btrfs_release_path(root, path);
1056 1057 inode = read_one_inode(root, key.offset);
1057 1058  
... ... @@ -1068,8 +1069,10 @@
1068 1069 */
1069 1070 key.offset = (u64)-1;
1070 1071 }
  1072 + ret = 0;
  1073 +out:
1071 1074 btrfs_release_path(root, path);
1072   - return 0;
  1075 + return ret;
1073 1076 }
1074 1077  
1075 1078  
... ... @@ -2587,7 +2590,8 @@
2587 2590 break;
2588 2591  
2589 2592 ret = btrfs_del_item(trans, log, path);
2590   - BUG_ON(ret);
  2593 + if (ret)
  2594 + break;
2591 2595 btrfs_release_path(log, path);
2592 2596 }
2593 2597 btrfs_release_path(log, path);
... ... @@ -967,7 +967,6 @@
967 967 if (device->bytes_used > 0)
968 968 device->bytes_used -= btrfs_dev_extent_length(leaf, extent);
969 969 ret = btrfs_del_item(trans, root, path);
970   - BUG_ON(ret);
971 970  
972 971 out:
973 972 btrfs_free_path(path);
974 973  
... ... @@ -1770,10 +1769,9 @@
1770 1769 BUG_ON(ret);
1771 1770  
1772 1771 ret = btrfs_del_item(trans, root, path);
1773   - BUG_ON(ret);
1774 1772  
1775 1773 btrfs_free_path(path);
1776   - return 0;
  1774 + return ret;
1777 1775 }
1778 1776  
1779 1777 static int btrfs_del_sys_chunk(struct btrfs_root *root, u64 chunk_objectid, u64