Add a tracepoint to log slab corruption messages to the trace log also so that it's easier to correlate with other trace messages that are being used to track refcounting. Signed-off-by: David Howells <dhowells@xxxxxxxxxx> --- include/trace/events/kmem.h | 23 +++++++++++++++++++++++ mm/slab.c | 2 ++ 2 files changed, 25 insertions(+) diff --git a/include/trace/events/kmem.h b/include/trace/events/kmem.h index eb57e3037deb..c96f3b03a6e2 100644 --- a/include/trace/events/kmem.h +++ b/include/trace/events/kmem.h @@ -315,6 +315,29 @@ TRACE_EVENT(mm_page_alloc_extfrag, __entry->change_ownership) ); +TRACE_EVENT(slab_corruption, + TP_PROTO(const char *slab, void *object, unsigned int size, unsigned int offset), + + TP_ARGS(slab, object, size, offset), + + TP_STRUCT__entry( + __field( void *, object ) + __field( unsigned int, size ) + __field( unsigned int, offset ) + __array( char, slab, 16 ) + ), + + TP_fast_assign( + strlcpy(__entry->slab, slab, sizeof(__entry->slab)); + __entry->object = object; + __entry->size = size; + __entry->offset = offset; + ), + + TP_printk("slab=%s obj=%px size=%x off=%x", + __entry->slab, __entry->object, __entry->size, __entry->offset) +); + #endif /* _TRACE_KMEM_H */ /* This part must be outside protection */ diff --git a/mm/slab.c b/mm/slab.c index 9df370558e5d..47c5a86e39be 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1527,6 +1527,8 @@ static void check_poison_obj(struct kmem_cache *cachep, void *objp) print_tainted(), cachep->name, realobj, size); print_objinfo(cachep, objp, 0); + trace_slab_corruption(cachep->name, realobj, + size, i); } /* Hexdump the affected line */ i = (i / 16) * 16;