summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/btrfs/transaction.c1
-rw-r--r--include/trace/events/btrfs.h22
2 files changed, 23 insertions, 0 deletions
diff --git a/fs/btrfs/transaction.c b/fs/btrfs/transaction.c
index b98cb7b0630a..277953906b91 100644
--- a/fs/btrfs/transaction.c
+++ b/fs/btrfs/transaction.c
@@ -2731,6 +2731,7 @@ void __cold __btrfs_abort_transaction(struct btrfs_trans_handle *trans,
WRITE_ONCE(trans->aborted, error);
WRITE_ONCE(trans->transaction->aborted, error);
+ trace_btrfs_transaction_abort(trans);
if (first_hit) {
btrfs_err(fs_info, "Transaction %llu aborted (error %d)",
trans->transid, error);
diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
index 4e077abd6704..cb9b6188fcdd 100644
--- a/include/trace/events/btrfs.h
+++ b/include/trace/events/btrfs.h
@@ -201,6 +201,28 @@ TRACE_EVENT(btrfs_transaction_commit,
__entry->in_fsync)
);
+TRACE_EVENT(btrfs_transaction_abort,
+
+ TP_PROTO(const struct btrfs_trans_handle *trans),
+
+ TP_ARGS(trans),
+
+ TP_STRUCT__entry_btrfs(
+ __field( u64, generation )
+ __field( bool, in_fsync )
+ __field( int, error )
+ ),
+
+ TP_fast_assign_btrfs(trans->fs_info,
+ __entry->generation = trans->transid;
+ __entry->in_fsync = trans->in_fsync;
+ __entry->error = trans->aborted;
+ ),
+
+ TP_printk_btrfs("gen=%llu in_fsync=%d error=%d", __entry->generation,
+ __entry->in_fsync, __entry->error)
+);
+
DECLARE_EVENT_CLASS(btrfs__inode,
TP_PROTO(const struct inode *inode),