1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2cafe5635SKent Overstreet #undef TRACE_SYSTEM 3cafe5635SKent Overstreet #define TRACE_SYSTEM bcache 4cafe5635SKent Overstreet 5cafe5635SKent Overstreet #if !defined(_TRACE_BCACHE_H) || defined(TRACE_HEADER_MULTI_READ) 6cafe5635SKent Overstreet #define _TRACE_BCACHE_H 7cafe5635SKent Overstreet 8cafe5635SKent Overstreet #include <linux/tracepoint.h> 9cafe5635SKent Overstreet 10cafe5635SKent Overstreet DECLARE_EVENT_CLASS(bcache_request, 11220bb38cSKent Overstreet TP_PROTO(struct bcache_device *d, struct bio *bio), 12220bb38cSKent Overstreet TP_ARGS(d, bio), 13cafe5635SKent Overstreet 14cafe5635SKent Overstreet TP_STRUCT__entry( 15cafe5635SKent Overstreet __field(dev_t, dev ) 16cafe5635SKent Overstreet __field(unsigned int, orig_major ) 17cafe5635SKent Overstreet __field(unsigned int, orig_minor ) 18cafe5635SKent Overstreet __field(sector_t, sector ) 19cafe5635SKent Overstreet __field(dev_t, orig_sector ) 20cafe5635SKent Overstreet __field(unsigned int, nr_sector ) 21cafe5635SKent Overstreet __array(char, rwbs, 6 ) 22cafe5635SKent Overstreet ), 23cafe5635SKent Overstreet 24cafe5635SKent Overstreet TP_fast_assign( 2574d46992SChristoph Hellwig __entry->dev = bio_dev(bio); 26220bb38cSKent Overstreet __entry->orig_major = d->disk->major; 27220bb38cSKent Overstreet __entry->orig_minor = d->disk->first_minor; 284f024f37SKent Overstreet __entry->sector = bio->bi_iter.bi_sector; 294f024f37SKent Overstreet __entry->orig_sector = bio->bi_iter.bi_sector - 16; 304f024f37SKent Overstreet __entry->nr_sector = bio->bi_iter.bi_size >> 9; 31*179d1600SChaitanya Kulkarni blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 32cafe5635SKent Overstreet ), 33cafe5635SKent Overstreet 34c37511b8SKent Overstreet TP_printk("%d,%d %s %llu + %u (from %d,%d @ %llu)", 35cafe5635SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev), 36c37511b8SKent Overstreet __entry->rwbs, (unsigned long long)__entry->sector, 37c37511b8SKent Overstreet __entry->nr_sector, __entry->orig_major, __entry->orig_minor, 38cafe5635SKent Overstreet (unsigned long long)__entry->orig_sector) 39cafe5635SKent Overstreet ); 40cafe5635SKent Overstreet 41c37511b8SKent Overstreet DECLARE_EVENT_CLASS(bkey, 42c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 43c37511b8SKent Overstreet TP_ARGS(k), 44c37511b8SKent Overstreet 45c37511b8SKent Overstreet TP_STRUCT__entry( 46c37511b8SKent Overstreet __field(u32, size ) 47c37511b8SKent Overstreet __field(u32, inode ) 48c37511b8SKent Overstreet __field(u64, offset ) 49c37511b8SKent Overstreet __field(bool, dirty ) 50c37511b8SKent Overstreet ), 51c37511b8SKent Overstreet 52c37511b8SKent Overstreet TP_fast_assign( 53c37511b8SKent Overstreet __entry->inode = KEY_INODE(k); 54c37511b8SKent Overstreet __entry->offset = KEY_OFFSET(k); 55c37511b8SKent Overstreet __entry->size = KEY_SIZE(k); 56c37511b8SKent Overstreet __entry->dirty = KEY_DIRTY(k); 57c37511b8SKent Overstreet ), 58c37511b8SKent Overstreet 59c37511b8SKent Overstreet TP_printk("%u:%llu len %u dirty %u", __entry->inode, 60c37511b8SKent Overstreet __entry->offset, __entry->size, __entry->dirty) 61c37511b8SKent Overstreet ); 62c37511b8SKent Overstreet 63c37511b8SKent Overstreet DECLARE_EVENT_CLASS(btree_node, 64c37511b8SKent Overstreet TP_PROTO(struct btree *b), 65c37511b8SKent Overstreet TP_ARGS(b), 66c37511b8SKent Overstreet 67c37511b8SKent Overstreet TP_STRUCT__entry( 68c37511b8SKent Overstreet __field(size_t, bucket ) 69c37511b8SKent Overstreet ), 70c37511b8SKent Overstreet 71c37511b8SKent Overstreet TP_fast_assign( 72c37511b8SKent Overstreet __entry->bucket = PTR_BUCKET_NR(b->c, &b->key, 0); 73c37511b8SKent Overstreet ), 74c37511b8SKent Overstreet 75c37511b8SKent Overstreet TP_printk("bucket %zu", __entry->bucket) 76c37511b8SKent Overstreet ); 77c37511b8SKent Overstreet 78c37511b8SKent Overstreet /* request.c */ 79c37511b8SKent Overstreet 80cafe5635SKent Overstreet DEFINE_EVENT(bcache_request, bcache_request_start, 81220bb38cSKent Overstreet TP_PROTO(struct bcache_device *d, struct bio *bio), 82220bb38cSKent Overstreet TP_ARGS(d, bio) 83cafe5635SKent Overstreet ); 84cafe5635SKent Overstreet 85cafe5635SKent Overstreet DEFINE_EVENT(bcache_request, bcache_request_end, 86220bb38cSKent Overstreet TP_PROTO(struct bcache_device *d, struct bio *bio), 87220bb38cSKent Overstreet TP_ARGS(d, bio) 88cafe5635SKent Overstreet ); 89cafe5635SKent Overstreet 90cafe5635SKent Overstreet DECLARE_EVENT_CLASS(bcache_bio, 91cafe5635SKent Overstreet TP_PROTO(struct bio *bio), 92cafe5635SKent Overstreet TP_ARGS(bio), 93cafe5635SKent Overstreet 94cafe5635SKent Overstreet TP_STRUCT__entry( 95cafe5635SKent Overstreet __field(dev_t, dev ) 96cafe5635SKent Overstreet __field(sector_t, sector ) 97cafe5635SKent Overstreet __field(unsigned int, nr_sector ) 98cafe5635SKent Overstreet __array(char, rwbs, 6 ) 99cafe5635SKent Overstreet ), 100cafe5635SKent Overstreet 101cafe5635SKent Overstreet TP_fast_assign( 10274d46992SChristoph Hellwig __entry->dev = bio_dev(bio); 1034f024f37SKent Overstreet __entry->sector = bio->bi_iter.bi_sector; 1044f024f37SKent Overstreet __entry->nr_sector = bio->bi_iter.bi_size >> 9; 105*179d1600SChaitanya Kulkarni blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 106cafe5635SKent Overstreet ), 107cafe5635SKent Overstreet 108c37511b8SKent Overstreet TP_printk("%d,%d %s %llu + %u", 109c37511b8SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 110c37511b8SKent Overstreet (unsigned long long)__entry->sector, __entry->nr_sector) 111cafe5635SKent Overstreet ); 112cafe5635SKent Overstreet 113c37511b8SKent Overstreet DEFINE_EVENT(bcache_bio, bcache_bypass_sequential, 114cafe5635SKent Overstreet TP_PROTO(struct bio *bio), 115cafe5635SKent Overstreet TP_ARGS(bio) 116cafe5635SKent Overstreet ); 117cafe5635SKent Overstreet 118c37511b8SKent Overstreet DEFINE_EVENT(bcache_bio, bcache_bypass_congested, 119cafe5635SKent Overstreet TP_PROTO(struct bio *bio), 120cafe5635SKent Overstreet TP_ARGS(bio) 121cafe5635SKent Overstreet ); 122cafe5635SKent Overstreet 123c37511b8SKent Overstreet TRACE_EVENT(bcache_read, 124c37511b8SKent Overstreet TP_PROTO(struct bio *bio, bool hit, bool bypass), 125c37511b8SKent Overstreet TP_ARGS(bio, hit, bypass), 126cafe5635SKent Overstreet 127cafe5635SKent Overstreet TP_STRUCT__entry( 128cafe5635SKent Overstreet __field(dev_t, dev ) 129cafe5635SKent Overstreet __field(sector_t, sector ) 130cafe5635SKent Overstreet __field(unsigned int, nr_sector ) 131cafe5635SKent Overstreet __array(char, rwbs, 6 ) 132c37511b8SKent Overstreet __field(bool, cache_hit ) 133c37511b8SKent Overstreet __field(bool, bypass ) 134cafe5635SKent Overstreet ), 135cafe5635SKent Overstreet 136cafe5635SKent Overstreet TP_fast_assign( 13774d46992SChristoph Hellwig __entry->dev = bio_dev(bio); 1384f024f37SKent Overstreet __entry->sector = bio->bi_iter.bi_sector; 1394f024f37SKent Overstreet __entry->nr_sector = bio->bi_iter.bi_size >> 9; 140*179d1600SChaitanya Kulkarni blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 141c37511b8SKent Overstreet __entry->cache_hit = hit; 142c37511b8SKent Overstreet __entry->bypass = bypass; 143cafe5635SKent Overstreet ), 144cafe5635SKent Overstreet 145c37511b8SKent Overstreet TP_printk("%d,%d %s %llu + %u hit %u bypass %u", 146cafe5635SKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev), 147c37511b8SKent Overstreet __entry->rwbs, (unsigned long long)__entry->sector, 148c37511b8SKent Overstreet __entry->nr_sector, __entry->cache_hit, __entry->bypass) 149cafe5635SKent Overstreet ); 150cafe5635SKent Overstreet 151c37511b8SKent Overstreet TRACE_EVENT(bcache_write, 15260ae81eeSSlava Pestov TP_PROTO(struct cache_set *c, u64 inode, struct bio *bio, 15360ae81eeSSlava Pestov bool writeback, bool bypass), 15460ae81eeSSlava Pestov TP_ARGS(c, inode, bio, writeback, bypass), 155cafe5635SKent Overstreet 156cafe5635SKent Overstreet TP_STRUCT__entry( 15760ae81eeSSlava Pestov __array(char, uuid, 16 ) 15860ae81eeSSlava Pestov __field(u64, inode ) 159c37511b8SKent Overstreet __field(sector_t, sector ) 160c37511b8SKent Overstreet __field(unsigned int, nr_sector ) 161c37511b8SKent Overstreet __array(char, rwbs, 6 ) 162c37511b8SKent Overstreet __field(bool, writeback ) 163c37511b8SKent Overstreet __field(bool, bypass ) 164cafe5635SKent Overstreet ), 165cafe5635SKent Overstreet 166cafe5635SKent Overstreet TP_fast_assign( 1671132e56eSColy Li memcpy(__entry->uuid, c->set_uuid, 16); 16860ae81eeSSlava Pestov __entry->inode = inode; 1694f024f37SKent Overstreet __entry->sector = bio->bi_iter.bi_sector; 1704f024f37SKent Overstreet __entry->nr_sector = bio->bi_iter.bi_size >> 9; 171*179d1600SChaitanya Kulkarni blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 172c37511b8SKent Overstreet __entry->writeback = writeback; 173c37511b8SKent Overstreet __entry->bypass = bypass; 174c37511b8SKent Overstreet ), 175c37511b8SKent Overstreet 17660ae81eeSSlava Pestov TP_printk("%pU inode %llu %s %llu + %u hit %u bypass %u", 17760ae81eeSSlava Pestov __entry->uuid, __entry->inode, 178c37511b8SKent Overstreet __entry->rwbs, (unsigned long long)__entry->sector, 179c37511b8SKent Overstreet __entry->nr_sector, __entry->writeback, __entry->bypass) 180c37511b8SKent Overstreet ); 181c37511b8SKent Overstreet 182c37511b8SKent Overstreet DEFINE_EVENT(bcache_bio, bcache_read_retry, 183c37511b8SKent Overstreet TP_PROTO(struct bio *bio), 184c37511b8SKent Overstreet TP_ARGS(bio) 185c37511b8SKent Overstreet ); 186c37511b8SKent Overstreet 187c37511b8SKent Overstreet DEFINE_EVENT(bkey, bcache_cache_insert, 188c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 189c37511b8SKent Overstreet TP_ARGS(k) 190c37511b8SKent Overstreet ); 191c37511b8SKent Overstreet 192c37511b8SKent Overstreet /* Journal */ 193c37511b8SKent Overstreet 194c37511b8SKent Overstreet DECLARE_EVENT_CLASS(cache_set, 195c37511b8SKent Overstreet TP_PROTO(struct cache_set *c), 196c37511b8SKent Overstreet TP_ARGS(c), 197c37511b8SKent Overstreet 198c37511b8SKent Overstreet TP_STRUCT__entry( 199c37511b8SKent Overstreet __array(char, uuid, 16 ) 200c37511b8SKent Overstreet ), 201c37511b8SKent Overstreet 202c37511b8SKent Overstreet TP_fast_assign( 2031132e56eSColy Li memcpy(__entry->uuid, c->set_uuid, 16); 204cafe5635SKent Overstreet ), 205cafe5635SKent Overstreet 206cafe5635SKent Overstreet TP_printk("%pU", __entry->uuid) 207cafe5635SKent Overstreet ); 208cafe5635SKent Overstreet 209c37511b8SKent Overstreet DEFINE_EVENT(bkey, bcache_journal_replay_key, 210c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 211c37511b8SKent Overstreet TP_ARGS(k) 212cafe5635SKent Overstreet ); 213cafe5635SKent Overstreet 214c37511b8SKent Overstreet DEFINE_EVENT(cache_set, bcache_journal_full, 215c37511b8SKent Overstreet TP_PROTO(struct cache_set *c), 216c37511b8SKent Overstreet TP_ARGS(c) 217c37511b8SKent Overstreet ); 218cafe5635SKent Overstreet 219c37511b8SKent Overstreet DEFINE_EVENT(cache_set, bcache_journal_entry_full, 220c37511b8SKent Overstreet TP_PROTO(struct cache_set *c), 221c37511b8SKent Overstreet TP_ARGS(c) 222c37511b8SKent Overstreet ); 223cafe5635SKent Overstreet 224e78bd0d2SGuoju Fang TRACE_EVENT(bcache_journal_write, 225e78bd0d2SGuoju Fang TP_PROTO(struct bio *bio, u32 keys), 226e78bd0d2SGuoju Fang TP_ARGS(bio, keys), 227e78bd0d2SGuoju Fang 228e78bd0d2SGuoju Fang TP_STRUCT__entry( 229e78bd0d2SGuoju Fang __field(dev_t, dev ) 230e78bd0d2SGuoju Fang __field(sector_t, sector ) 231e78bd0d2SGuoju Fang __field(unsigned int, nr_sector ) 232e78bd0d2SGuoju Fang __array(char, rwbs, 6 ) 233e78bd0d2SGuoju Fang __field(u32, nr_keys ) 234e78bd0d2SGuoju Fang ), 235e78bd0d2SGuoju Fang 236e78bd0d2SGuoju Fang TP_fast_assign( 237e78bd0d2SGuoju Fang __entry->dev = bio_dev(bio); 238e78bd0d2SGuoju Fang __entry->sector = bio->bi_iter.bi_sector; 239e78bd0d2SGuoju Fang __entry->nr_sector = bio->bi_iter.bi_size >> 9; 240e78bd0d2SGuoju Fang __entry->nr_keys = keys; 241*179d1600SChaitanya Kulkarni blk_fill_rwbs(__entry->rwbs, bio->bi_opf); 242e78bd0d2SGuoju Fang ), 243e78bd0d2SGuoju Fang 244e78bd0d2SGuoju Fang TP_printk("%d,%d %s %llu + %u keys %u", 245e78bd0d2SGuoju Fang MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, 246e78bd0d2SGuoju Fang (unsigned long long)__entry->sector, __entry->nr_sector, 247e78bd0d2SGuoju Fang __entry->nr_keys) 248c37511b8SKent Overstreet ); 249c37511b8SKent Overstreet 250c37511b8SKent Overstreet /* Btree */ 251c37511b8SKent Overstreet 252c37511b8SKent Overstreet DEFINE_EVENT(cache_set, bcache_btree_cache_cannibalize, 253c37511b8SKent Overstreet TP_PROTO(struct cache_set *c), 254c37511b8SKent Overstreet TP_ARGS(c) 255c37511b8SKent Overstreet ); 256c37511b8SKent Overstreet 257c37511b8SKent Overstreet DEFINE_EVENT(btree_node, bcache_btree_read, 258c37511b8SKent Overstreet TP_PROTO(struct btree *b), 259c37511b8SKent Overstreet TP_ARGS(b) 260c37511b8SKent Overstreet ); 261c37511b8SKent Overstreet 262c37511b8SKent Overstreet TRACE_EVENT(bcache_btree_write, 263c37511b8SKent Overstreet TP_PROTO(struct btree *b), 264c37511b8SKent Overstreet TP_ARGS(b), 265c37511b8SKent Overstreet 266c37511b8SKent Overstreet TP_STRUCT__entry( 267c37511b8SKent Overstreet __field(size_t, bucket ) 268c37511b8SKent Overstreet __field(unsigned, block ) 269c37511b8SKent Overstreet __field(unsigned, keys ) 270c37511b8SKent Overstreet ), 271c37511b8SKent Overstreet 272c37511b8SKent Overstreet TP_fast_assign( 273c37511b8SKent Overstreet __entry->bucket = PTR_BUCKET_NR(b->c, &b->key, 0); 274c37511b8SKent Overstreet __entry->block = b->written; 275a85e968eSKent Overstreet __entry->keys = b->keys.set[b->keys.nsets].data->keys; 276c37511b8SKent Overstreet ), 277c37511b8SKent Overstreet 278d44330b7SGuoju Fang TP_printk("bucket %zu written block %u + %u", 279d44330b7SGuoju Fang __entry->bucket, __entry->block, __entry->keys) 280c37511b8SKent Overstreet ); 281c37511b8SKent Overstreet 282c37511b8SKent Overstreet DEFINE_EVENT(btree_node, bcache_btree_node_alloc, 283c37511b8SKent Overstreet TP_PROTO(struct btree *b), 284c37511b8SKent Overstreet TP_ARGS(b) 285c37511b8SKent Overstreet ); 286c37511b8SKent Overstreet 287913dc33fSSlava Pestov DEFINE_EVENT(cache_set, bcache_btree_node_alloc_fail, 288913dc33fSSlava Pestov TP_PROTO(struct cache_set *c), 289913dc33fSSlava Pestov TP_ARGS(c) 290c37511b8SKent Overstreet ); 291c37511b8SKent Overstreet 292c37511b8SKent Overstreet DEFINE_EVENT(btree_node, bcache_btree_node_free, 293c37511b8SKent Overstreet TP_PROTO(struct btree *b), 294c37511b8SKent Overstreet TP_ARGS(b) 295c37511b8SKent Overstreet ); 296c37511b8SKent Overstreet 297c37511b8SKent Overstreet TRACE_EVENT(bcache_btree_gc_coalesce, 298c37511b8SKent Overstreet TP_PROTO(unsigned nodes), 299c37511b8SKent Overstreet TP_ARGS(nodes), 300c37511b8SKent Overstreet 301c37511b8SKent Overstreet TP_STRUCT__entry( 302c37511b8SKent Overstreet __field(unsigned, nodes ) 303c37511b8SKent Overstreet ), 304c37511b8SKent Overstreet 305c37511b8SKent Overstreet TP_fast_assign( 306c37511b8SKent Overstreet __entry->nodes = nodes; 307c37511b8SKent Overstreet ), 308c37511b8SKent Overstreet 309c37511b8SKent Overstreet TP_printk("coalesced %u nodes", __entry->nodes) 310c37511b8SKent Overstreet ); 311c37511b8SKent Overstreet 312c37511b8SKent Overstreet DEFINE_EVENT(cache_set, bcache_gc_start, 313c37511b8SKent Overstreet TP_PROTO(struct cache_set *c), 314c37511b8SKent Overstreet TP_ARGS(c) 315c37511b8SKent Overstreet ); 316c37511b8SKent Overstreet 317c37511b8SKent Overstreet DEFINE_EVENT(cache_set, bcache_gc_end, 318c37511b8SKent Overstreet TP_PROTO(struct cache_set *c), 319c37511b8SKent Overstreet TP_ARGS(c) 320c37511b8SKent Overstreet ); 321c37511b8SKent Overstreet 322c37511b8SKent Overstreet DEFINE_EVENT(bkey, bcache_gc_copy, 323c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 324c37511b8SKent Overstreet TP_ARGS(k) 325c37511b8SKent Overstreet ); 326c37511b8SKent Overstreet 327c37511b8SKent Overstreet DEFINE_EVENT(bkey, bcache_gc_copy_collision, 328c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 329c37511b8SKent Overstreet TP_ARGS(k) 330c37511b8SKent Overstreet ); 331c37511b8SKent Overstreet 33285b1492eSKent Overstreet TRACE_EVENT(bcache_btree_insert_key, 33385b1492eSKent Overstreet TP_PROTO(struct btree *b, struct bkey *k, unsigned op, unsigned status), 33485b1492eSKent Overstreet TP_ARGS(b, k, op, status), 33585b1492eSKent Overstreet 33685b1492eSKent Overstreet TP_STRUCT__entry( 33785b1492eSKent Overstreet __field(u64, btree_node ) 33885b1492eSKent Overstreet __field(u32, btree_level ) 33985b1492eSKent Overstreet __field(u32, inode ) 34085b1492eSKent Overstreet __field(u64, offset ) 34185b1492eSKent Overstreet __field(u32, size ) 34285b1492eSKent Overstreet __field(u8, dirty ) 34385b1492eSKent Overstreet __field(u8, op ) 34485b1492eSKent Overstreet __field(u8, status ) 34585b1492eSKent Overstreet ), 34685b1492eSKent Overstreet 34785b1492eSKent Overstreet TP_fast_assign( 34885b1492eSKent Overstreet __entry->btree_node = PTR_BUCKET_NR(b->c, &b->key, 0); 34985b1492eSKent Overstreet __entry->btree_level = b->level; 35085b1492eSKent Overstreet __entry->inode = KEY_INODE(k); 35185b1492eSKent Overstreet __entry->offset = KEY_OFFSET(k); 35285b1492eSKent Overstreet __entry->size = KEY_SIZE(k); 35385b1492eSKent Overstreet __entry->dirty = KEY_DIRTY(k); 35485b1492eSKent Overstreet __entry->op = op; 35585b1492eSKent Overstreet __entry->status = status; 35685b1492eSKent Overstreet ), 35785b1492eSKent Overstreet 35885b1492eSKent Overstreet TP_printk("%u for %u at %llu(%u): %u:%llu len %u dirty %u", 35985b1492eSKent Overstreet __entry->status, __entry->op, 36085b1492eSKent Overstreet __entry->btree_node, __entry->btree_level, 36185b1492eSKent Overstreet __entry->inode, __entry->offset, 36285b1492eSKent Overstreet __entry->size, __entry->dirty) 36385b1492eSKent Overstreet ); 36485b1492eSKent Overstreet 365c37511b8SKent Overstreet DECLARE_EVENT_CLASS(btree_split, 366c37511b8SKent Overstreet TP_PROTO(struct btree *b, unsigned keys), 367c37511b8SKent Overstreet TP_ARGS(b, keys), 368c37511b8SKent Overstreet 369c37511b8SKent Overstreet TP_STRUCT__entry( 370c37511b8SKent Overstreet __field(size_t, bucket ) 371c37511b8SKent Overstreet __field(unsigned, keys ) 372c37511b8SKent Overstreet ), 373c37511b8SKent Overstreet 374c37511b8SKent Overstreet TP_fast_assign( 375c37511b8SKent Overstreet __entry->bucket = PTR_BUCKET_NR(b->c, &b->key, 0); 376c37511b8SKent Overstreet __entry->keys = keys; 377c37511b8SKent Overstreet ), 378c37511b8SKent Overstreet 379c37511b8SKent Overstreet TP_printk("bucket %zu keys %u", __entry->bucket, __entry->keys) 380c37511b8SKent Overstreet ); 381c37511b8SKent Overstreet 382c37511b8SKent Overstreet DEFINE_EVENT(btree_split, bcache_btree_node_split, 383c37511b8SKent Overstreet TP_PROTO(struct btree *b, unsigned keys), 384c37511b8SKent Overstreet TP_ARGS(b, keys) 385c37511b8SKent Overstreet ); 386c37511b8SKent Overstreet 387c37511b8SKent Overstreet DEFINE_EVENT(btree_split, bcache_btree_node_compact, 388c37511b8SKent Overstreet TP_PROTO(struct btree *b, unsigned keys), 389c37511b8SKent Overstreet TP_ARGS(b, keys) 390c37511b8SKent Overstreet ); 391c37511b8SKent Overstreet 392c37511b8SKent Overstreet DEFINE_EVENT(btree_node, bcache_btree_set_root, 393c37511b8SKent Overstreet TP_PROTO(struct btree *b), 394c37511b8SKent Overstreet TP_ARGS(b) 395c37511b8SKent Overstreet ); 396c37511b8SKent Overstreet 39748a915a8SKent Overstreet TRACE_EVENT(bcache_keyscan, 39848a915a8SKent Overstreet TP_PROTO(unsigned nr_found, 39948a915a8SKent Overstreet unsigned start_inode, uint64_t start_offset, 40048a915a8SKent Overstreet unsigned end_inode, uint64_t end_offset), 40148a915a8SKent Overstreet TP_ARGS(nr_found, 40248a915a8SKent Overstreet start_inode, start_offset, 40348a915a8SKent Overstreet end_inode, end_offset), 40448a915a8SKent Overstreet 40548a915a8SKent Overstreet TP_STRUCT__entry( 40648a915a8SKent Overstreet __field(__u32, nr_found ) 40748a915a8SKent Overstreet __field(__u32, start_inode ) 40848a915a8SKent Overstreet __field(__u64, start_offset ) 40948a915a8SKent Overstreet __field(__u32, end_inode ) 41048a915a8SKent Overstreet __field(__u64, end_offset ) 41148a915a8SKent Overstreet ), 41248a915a8SKent Overstreet 41348a915a8SKent Overstreet TP_fast_assign( 41448a915a8SKent Overstreet __entry->nr_found = nr_found; 41548a915a8SKent Overstreet __entry->start_inode = start_inode; 41648a915a8SKent Overstreet __entry->start_offset = start_offset; 41748a915a8SKent Overstreet __entry->end_inode = end_inode; 41848a915a8SKent Overstreet __entry->end_offset = end_offset; 41948a915a8SKent Overstreet ), 42048a915a8SKent Overstreet 42148a915a8SKent Overstreet TP_printk("found %u keys from %u:%llu to %u:%llu", __entry->nr_found, 42248a915a8SKent Overstreet __entry->start_inode, __entry->start_offset, 42348a915a8SKent Overstreet __entry->end_inode, __entry->end_offset) 42448a915a8SKent Overstreet ); 42548a915a8SKent Overstreet 426c37511b8SKent Overstreet /* Allocator */ 427c37511b8SKent Overstreet 4287159b1adSKent Overstreet TRACE_EVENT(bcache_invalidate, 4297159b1adSKent Overstreet TP_PROTO(struct cache *ca, size_t bucket), 4307159b1adSKent Overstreet TP_ARGS(ca, bucket), 431c37511b8SKent Overstreet 432c37511b8SKent Overstreet TP_STRUCT__entry( 4337159b1adSKent Overstreet __field(unsigned, sectors ) 4347159b1adSKent Overstreet __field(dev_t, dev ) 4357159b1adSKent Overstreet __field(__u64, offset ) 436c37511b8SKent Overstreet ), 437c37511b8SKent Overstreet 438c37511b8SKent Overstreet TP_fast_assign( 4397159b1adSKent Overstreet __entry->dev = ca->bdev->bd_dev; 4407159b1adSKent Overstreet __entry->offset = bucket << ca->set->bucket_bits; 4417159b1adSKent Overstreet __entry->sectors = GC_SECTORS_USED(&ca->buckets[bucket]); 442c37511b8SKent Overstreet ), 443c37511b8SKent Overstreet 4447159b1adSKent Overstreet TP_printk("invalidated %u sectors at %d,%d sector=%llu", 4457159b1adSKent Overstreet __entry->sectors, MAJOR(__entry->dev), 4467159b1adSKent Overstreet MINOR(__entry->dev), __entry->offset) 4477159b1adSKent Overstreet ); 4487159b1adSKent Overstreet 4497159b1adSKent Overstreet TRACE_EVENT(bcache_alloc, 4507159b1adSKent Overstreet TP_PROTO(struct cache *ca, size_t bucket), 4517159b1adSKent Overstreet TP_ARGS(ca, bucket), 4527159b1adSKent Overstreet 4537159b1adSKent Overstreet TP_STRUCT__entry( 4547159b1adSKent Overstreet __field(dev_t, dev ) 4557159b1adSKent Overstreet __field(__u64, offset ) 4567159b1adSKent Overstreet ), 4577159b1adSKent Overstreet 4587159b1adSKent Overstreet TP_fast_assign( 4597159b1adSKent Overstreet __entry->dev = ca->bdev->bd_dev; 4607159b1adSKent Overstreet __entry->offset = bucket << ca->set->bucket_bits; 4617159b1adSKent Overstreet ), 4627159b1adSKent Overstreet 4637159b1adSKent Overstreet TP_printk("allocated %d,%d sector=%llu", MAJOR(__entry->dev), 4647159b1adSKent Overstreet MINOR(__entry->dev), __entry->offset) 465c37511b8SKent Overstreet ); 466c37511b8SKent Overstreet 467c37511b8SKent Overstreet TRACE_EVENT(bcache_alloc_fail, 46878365411SKent Overstreet TP_PROTO(struct cache *ca, unsigned reserve), 46978365411SKent Overstreet TP_ARGS(ca, reserve), 470c37511b8SKent Overstreet 471c37511b8SKent Overstreet TP_STRUCT__entry( 4727159b1adSKent Overstreet __field(dev_t, dev ) 473c37511b8SKent Overstreet __field(unsigned, free ) 474c37511b8SKent Overstreet __field(unsigned, free_inc ) 475c37511b8SKent Overstreet __field(unsigned, blocked ) 476c37511b8SKent Overstreet ), 477c37511b8SKent Overstreet 478c37511b8SKent Overstreet TP_fast_assign( 4797159b1adSKent Overstreet __entry->dev = ca->bdev->bd_dev; 48078365411SKent Overstreet __entry->free = fifo_used(&ca->free[reserve]); 481c37511b8SKent Overstreet __entry->free_inc = fifo_used(&ca->free_inc); 482c37511b8SKent Overstreet __entry->blocked = atomic_read(&ca->set->prio_blocked); 483c37511b8SKent Overstreet ), 484c37511b8SKent Overstreet 4852531d9eeSKent Overstreet TP_printk("alloc fail %d,%d free %u free_inc %u blocked %u", 4867159b1adSKent Overstreet MAJOR(__entry->dev), MINOR(__entry->dev), __entry->free, 4872531d9eeSKent Overstreet __entry->free_inc, __entry->blocked) 488c37511b8SKent Overstreet ); 489c37511b8SKent Overstreet 490c37511b8SKent Overstreet /* Background writeback */ 491c37511b8SKent Overstreet 492c37511b8SKent Overstreet DEFINE_EVENT(bkey, bcache_writeback, 493c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 494c37511b8SKent Overstreet TP_ARGS(k) 495c37511b8SKent Overstreet ); 496c37511b8SKent Overstreet 497c37511b8SKent Overstreet DEFINE_EVENT(bkey, bcache_writeback_collision, 498c37511b8SKent Overstreet TP_PROTO(struct bkey *k), 499c37511b8SKent Overstreet TP_ARGS(k) 500cafe5635SKent Overstreet ); 501cafe5635SKent Overstreet 502cafe5635SKent Overstreet #endif /* _TRACE_BCACHE_H */ 503cafe5635SKent Overstreet 504cafe5635SKent Overstreet /* This part must be outside protection */ 505cafe5635SKent Overstreet #include <trace/define_trace.h> 506