summaryrefslogtreecommitdiff
path: root/transaction.h
diff options
context:
space:
mode:
authorDavid Sterba <dsterba@suse.com>2017-08-28 16:54:12 +0200
committerDavid Sterba <dsterba@suse.com>2017-09-08 16:15:05 +0200
commit6db6afd9937e37d61a14f9eeb1db5e37cefed1a6 (patch)
tree0cea287281c92f5bc895efaf18ba07e9223ef744 /transaction.h
parent448999d84ddc2eaf36938176fb5091d2c2029e2f (diff)
btrfs-progs: return errors from btrfs_start_transaction
Now that all callers will catch errors, we can return them from the function. Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to 'transaction.h')
-rw-r--r--transaction.h17
1 files changed, 14 insertions, 3 deletions
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;