[Cluster-devel] [GFS2 PATCH 08/11] gfs2: Add caller info to log_blocks trace point
Bob Peterson
rpeterso at redhat.com
Fri Jul 24 18:33:01 UTC 2020
The log_blocks kernel trace point becomes much more useful if we know
from whence the call was made. This patch adds caller info to the trace
point.
Signed-off-by: Bob Peterson <rpeterso at redhat.com>
---
fs/gfs2/log.c | 12 ++++++------
fs/gfs2/ops_fstype.c | 2 +-
fs/gfs2/trace_gfs2.h | 20 ++++++++++++++++----
3 files changed, 23 insertions(+), 11 deletions(-)
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index a58333e3980d..665e287bf4f1 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -396,7 +396,7 @@ void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks)
{
atomic_add(blks, &sdp->sd_log_blks_free);
- trace_gfs2_log_blocks(sdp, blks);
+ trace_gfs2_log_blocks(sdp, blks, 0);
gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <=
sdp->sd_jdesc->jd_blocks);
up_read(&sdp->sd_log_flush_lock);
@@ -457,7 +457,7 @@ int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks)
goto retry;
}
atomic_sub(blks, &sdp->sd_log_blks_needed);
- trace_gfs2_log_blocks(sdp, -blks);
+ trace_gfs2_log_blocks(sdp, -blks, 1);
/*
* If we waited, then so might others, wake them up _after_ we get
@@ -576,7 +576,7 @@ static void log_pull_tail(struct gfs2_sbd *sdp, unsigned int new_tail)
ail2_empty(sdp, new_tail);
atomic_add(dist, &sdp->sd_log_blks_free);
- trace_gfs2_log_blocks(sdp, dist);
+ trace_gfs2_log_blocks(sdp, dist, 2);
gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <=
sdp->sd_jdesc->jd_blocks);
@@ -966,7 +966,7 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags)
log_write_header(sdp, flags);
} else if (sdp->sd_log_tail != current_tail(sdp) && !sdp->sd_log_idle){
atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */
- trace_gfs2_log_blocks(sdp, -1);
+ trace_gfs2_log_blocks(sdp, -1, 3);
log_write_header(sdp, flags);
}
if (gfs2_withdrawn(sdp))
@@ -992,7 +992,7 @@ void gfs2_log_flush(struct gfs2_sbd *sdp, struct gfs2_glock *gl, u32 flags)
if (gfs2_withdrawn(sdp))
goto out;
atomic_dec(&sdp->sd_log_blks_free); /* Adjust for unreserved buffer */
- trace_gfs2_log_blocks(sdp, -1);
+ trace_gfs2_log_blocks(sdp, -1, 4);
log_write_header(sdp, flags);
sdp->sd_log_head = sdp->sd_log_flush_head;
}
@@ -1075,7 +1075,7 @@ static void log_refund(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
gfs2_assert_withdraw(sdp, maxres >= reserved);
unused = maxres - reserved;
atomic_add(unused, &sdp->sd_log_blks_free);
- trace_gfs2_log_blocks(sdp, unused);
+ trace_gfs2_log_blocks(sdp, unused, 5);
gfs2_assert_withdraw(sdp, atomic_read(&sdp->sd_log_blks_free) <=
sdp->sd_jdesc->jd_blocks);
sdp->sd_log_blks_reserved = reserved;
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index 6d18d2c91add..b2538eea3e5e 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -688,7 +688,7 @@ static int init_journal(struct gfs2_sbd *sdp, int undo)
/* Map the extents for this journal's blocks */
gfs2_map_journal_extents(sdp, sdp->sd_jdesc);
}
- trace_gfs2_log_blocks(sdp, atomic_read(&sdp->sd_log_blks_free));
+ trace_gfs2_log_blocks(sdp, atomic_read(&sdp->sd_log_blks_free), 6);
if (sdp->sd_lockstruct.ls_first) {
unsigned int x;
diff --git a/fs/gfs2/trace_gfs2.h b/fs/gfs2/trace_gfs2.h
index e0025258107a..1c4aa666e7e0 100644
--- a/fs/gfs2/trace_gfs2.h
+++ b/fs/gfs2/trace_gfs2.h
@@ -45,6 +45,15 @@
{ 2, "ins " }, \
{ 3, "clm " })
+#define lbcaller(x) __print_symbolic(x, \
+ { 0, "gfs2_log_release" }, \
+ { 1, "gfs2_log_reserve" }, \
+ { 2, "log_pull_tail" }, \
+ { 3, "gfs2_log_flush" }, \
+ { 4, "gfs2_log_flush2" }, \
+ { 5, "log_refund" }, \
+ { 6, "init_journal" })
+
#define show_glock_flags(flags) __print_flags(flags, "", \
{(1UL << GLF_LOCK), "l" }, \
{(1UL << GLF_DEMOTE), "D" }, \
@@ -381,22 +390,25 @@ TRACE_EVENT(gfs2_log_flush,
/* Reserving/releasing blocks in the log */
TRACE_EVENT(gfs2_log_blocks,
- TP_PROTO(const struct gfs2_sbd *sdp, int blocks),
+ TP_PROTO(const struct gfs2_sbd *sdp, int blocks, int caller),
- TP_ARGS(sdp, blocks),
+ TP_ARGS(sdp, blocks, caller),
TP_STRUCT__entry(
__field( dev_t, dev )
__field( int, blocks )
+ __field( int, caller )
),
TP_fast_assign(
__entry->dev = sdp->sd_vfs->s_dev;
__entry->blocks = blocks;
+ __entry->caller = caller;
),
- TP_printk("%u,%u log reserve %d", MAJOR(__entry->dev),
- MINOR(__entry->dev), __entry->blocks)
+ TP_printk("%u,%u log reserve %d %s", MAJOR(__entry->dev),
+ MINOR(__entry->dev), __entry->blocks,
+ lbcaller(__entry->caller))
);
/* Writing back the AIL */
--
2.26.2
More information about the Cluster-devel
mailing list