diff --git a/transaction.h b/transaction.h index 0c41af51..738eebd1 100644 --- a/transaction.h +++ b/transaction.h @@ -22,6 +22,8 @@ #include "kerncompat.h" #include "ctree.h" +#include "messages.h" + struct btrfs_trans_handle { u64 transid; u64 alloc_exclude_start; @@ -37,9 +39,18 @@ btrfs_start_transaction(struct btrfs_root *root, int num_blocks) struct btrfs_fs_info *fs_info = root->fs_info; struct btrfs_trans_handle *h = malloc(sizeof(*h)); - BUG_ON(!h); - BUG_ON(root->commit_root); - BUG_ON(fs_info->running_transaction); + if (!h) + return ERR_PTR(-ENOMEM); + if (root->commit_root) { + error("commit_root aleady set when starting transaction"); + kfree(h); + return ERR_PTR(-EINVAL); + } + if (fs_info->running_transaction) { + error("attempt to start transaction over already running one"); + kfree(h); + return ERR_PTR(-EINVAL); + } fs_info->running_transaction = h; fs_info->generation++; h->transid = fs_info->generation;