mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-22 02:17:36 -04:00
btrfs: tracepoints: trace transaction states during commit phase
Currently the trace event is fired only when a transaction is fully complete (its state is TRANS_STATE_COMPLETED). However during a transaction commit we go through several states and as soon as the state reaches TRANS_STATE_UNBLOCKED, another transaction can start. Therefore it's useful to track every transaction state changed during the commit of a transaction, so that we can see if a new transaction is started before the current one is completed. Add the transaction state to the transaction commit event and call the event everytime we change the transaction state during commit. Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
committed by
David Sterba
parent
99314d7cc7
commit
17819dc282
@@ -105,6 +105,15 @@ struct btrfs_transaction;
|
||||
EM( COMMIT_TRANS, "COMMIT_TRANS") \
|
||||
EMe(RESET_ZONES, "RESET_ZONES")
|
||||
|
||||
#define TRANSACTION_STATES \
|
||||
EM( TRANS_STATE_RUNNING, "TRANS_STATE_RUNNING") \
|
||||
EM( TRANS_STATE_COMMIT_PREP, "TRANS_STATE_COMMIT_PREP") \
|
||||
EM( TRANS_STATE_COMMIT_START, "TRANS_STATE_COMMIT_START") \
|
||||
EM( TRANS_STATE_COMMIT_DOING, "TRANS_STATE_COMMIT_DOING") \
|
||||
EM( TRANS_STATE_UNBLOCKED, "TRANS_STATE_UNBLOCKED") \
|
||||
EM( TRANS_STATE_SUPER_COMMITTED, "TRANS_STATE_SUPER_COMMITTED") \
|
||||
EMe(TRANS_STATE_COMPLETED, "TRANS_STATE_COMPLETED")
|
||||
|
||||
/*
|
||||
* First define the enums in the above macros to be exported to userspace via
|
||||
* TRACE_DEFINE_ENUM().
|
||||
@@ -120,6 +129,7 @@ FI_TYPES
|
||||
QGROUP_RSV_TYPES
|
||||
IO_TREE_OWNER
|
||||
FLUSH_STATES
|
||||
TRANSACTION_STATES
|
||||
|
||||
/*
|
||||
* Now redefine the EM and EMe macros to map the enums to the strings that will
|
||||
@@ -208,15 +218,18 @@ TRACE_EVENT(btrfs_transaction_commit,
|
||||
TP_STRUCT__entry_btrfs(
|
||||
__field( u64, generation )
|
||||
__field( bool, in_fsync )
|
||||
__field( int, state )
|
||||
),
|
||||
|
||||
TP_fast_assign_btrfs(trans->fs_info,
|
||||
__entry->generation = trans->transid;
|
||||
__entry->in_fsync = trans->in_fsync;
|
||||
__entry->state = trans->transaction->state;
|
||||
),
|
||||
|
||||
TP_printk_btrfs("gen=%llu in_fsync=%d", __entry->generation,
|
||||
__entry->in_fsync)
|
||||
TP_printk_btrfs("gen=%llu in_fsync=%d state=%d(%s)", __entry->generation,
|
||||
__entry->in_fsync, __entry->state,
|
||||
__print_symbolic(__entry->state, TRANSACTION_STATES))
|
||||
);
|
||||
|
||||
TRACE_EVENT(btrfs_transaction_abort,
|
||||
|
||||
Reference in New Issue
Block a user