Commit 65a246c5ffe3b487a001de025816326939e63362
Committed by
Chris Mason
1 parent
b0b802d7e3
Exists in
master
and in
7 other branches
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 | } |
fs/btrfs/tree-log.c
... | ... | @@ -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); |
fs/btrfs/volumes.c
... | ... | @@ -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 |