From ae6907623cddfccd906b73e6dbd45079eff5b762 Mon Sep 17 00:00:00 2001 From: Zach Brown Date: Tue, 1 May 2018 08:51:45 -0700 Subject: [PATCH] scoutfs: add btree rw error traces and counters Add some trivial traces and counters around btree block IO errors. Signed-off-by: Zach Brown --- kmod/src/btree.c | 6 +++++- kmod/src/counters.h | 2 ++ kmod/src/scoutfs_trace.h | 21 +++++++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/kmod/src/btree.c b/kmod/src/btree.c index aead4756..565474df 100644 --- a/kmod/src/btree.c +++ b/kmod/src/btree.c @@ -674,6 +674,8 @@ static int get_ref_block(struct super_block *sb, int flags, retry: bh = sb_bread(sb, le64_to_cpu(ref->blkno)); if (!bh) { + trace_scoutfs_btree_read_error(sb, ref); + scoutfs_inc_counter(sb, btree_read_error); ret = -EIO; goto out; } @@ -1671,8 +1673,10 @@ int scoutfs_btree_write_dirty(struct super_block *sb) ret = 0; for_each_dirty_bh(bti, bh, tmp) { wait_on_buffer(bh); - if (!buffer_uptodate(bh)) + if (!buffer_uptodate(bh)) { + scoutfs_inc_counter(sb, btree_write_error); ret = -EIO; + } } out: diff --git a/kmod/src/counters.h b/kmod/src/counters.h index 6ecbd8e5..adae0a23 100644 --- a/kmod/src/counters.h +++ b/kmod/src/counters.h @@ -14,7 +14,9 @@ #define EXPAND_EACH_COUNTER \ EXPAND_COUNTER(alloc_alloc) \ EXPAND_COUNTER(alloc_free) \ + EXPAND_COUNTER(btree_read_error) \ EXPAND_COUNTER(btree_stale_read) \ + EXPAND_COUNTER(btree_write_error) \ EXPAND_COUNTER(compact_operations) \ EXPAND_COUNTER(compact_segment_moved) \ EXPAND_COUNTER(compact_segment_read) \ diff --git a/kmod/src/scoutfs_trace.h b/kmod/src/scoutfs_trace.h index 81baeb1f..537f2a3c 100644 --- a/kmod/src/scoutfs_trace.h +++ b/kmod/src/scoutfs_trace.h @@ -2065,6 +2065,27 @@ TRACE_EVENT(scoutfs_get_name, __get_str(name)) ); +TRACE_EVENT(scoutfs_btree_read_error, + TP_PROTO(struct super_block *sb, struct scoutfs_btree_ref *ref), + + TP_ARGS(sb, ref), + + TP_STRUCT__entry( + __field(__u64, fsid) + __field(__u64, blkno) + __field(__u64, seq) + ), + + TP_fast_assign( + __entry->fsid = FSID_ARG(sb); + __entry->blkno = le64_to_cpu(ref->blkno); + __entry->seq = le64_to_cpu(ref->seq); + ), + + TP_printk("fsid "FSID_FMT" blkno %llu seq %llu", + __entry->fsid, __entry->blkno, __entry->seq) +); + #endif /* _TRACE_SCOUTFS_H */ /* This part must be outside protection */