#undef TRACE_SYSTEM #define TRACE_SYSTEM bcache #if !defined(_TRACE_BCACHE_H) || defined(TRACE_HEADER_MULTI_READ) #define _TRACE_BCACHE_H #include struct search; DECLARE_EVENT_CLASS(bcache_request, TP_PROTO(struct search *s, struct bio *bio), TP_ARGS(s, bio), TP_STRUCT__entry( __field(dev_t, dev ) __field(unsigned int, orig_major ) __field(unsigned int, orig_minor ) __field(sector_t, sector ) __field(dev_t, orig_sector ) __field(unsigned int, nr_sector ) __array(char, rwbs, 6 ) __array(char, comm, TASK_COMM_LEN ) ), TP_fast_assign( __entry->dev = bio->bi_bdev->bd_dev; __entry->orig_major = s->d->disk->major; __entry->orig_minor = s->d->disk->first_minor; __entry->sector = bio->bi_sector; __entry->orig_sector = bio->bi_sector - 16; __entry->nr_sector = bio->bi_size >> 9; blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size); memcpy(__entry->comm, current->comm, TASK_COMM_LEN); ), TP_printk("%d,%d %s %llu + %u [%s] (from %d,%d @ %llu)", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, (unsigned long long)__entry->sector, __entry->nr_sector, __entry->comm, __entry->orig_major, __entry->orig_minor, (unsigned long long)__entry->orig_sector) ); DEFINE_EVENT(bcache_request, bcache_request_start, TP_PROTO(struct search *s, struct bio *bio), TP_ARGS(s, bio) ); DEFINE_EVENT(bcache_request, bcache_request_end, TP_PROTO(struct search *s, struct bio *bio), TP_ARGS(s, bio) ); DECLARE_EVENT_CLASS(bcache_bio, TP_PROTO(struct bio *bio), TP_ARGS(bio), TP_STRUCT__entry( __field(dev_t, dev ) __field(sector_t, sector ) __field(unsigned int, nr_sector ) __array(char, rwbs, 6 ) __array(char, comm, TASK_COMM_LEN ) ), TP_fast_assign( __entry->dev = bio->bi_bdev->bd_dev; __entry->sector = bio->bi_sector; __entry->nr_sector = bio->bi_size >> 9; blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size); memcpy(__entry->comm, current->comm, TASK_COMM_LEN); ), TP_printk("%d,%d %s %llu + %u [%s]", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, (unsigned long long)__entry->sector, __entry->nr_sector, __entry->comm) ); DEFINE_EVENT(bcache_bio, bcache_passthrough, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_cache_hit, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_cache_miss, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_read_retry, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_writethrough, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_writeback, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_write_skip, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_btree_read, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_btree_write, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_write_dirty, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_read_dirty, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_write_moving, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_read_moving, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DEFINE_EVENT(bcache_bio, bcache_journal_write, TP_PROTO(struct bio *bio), TP_ARGS(bio) ); DECLARE_EVENT_CLASS(bcache_cache_bio, TP_PROTO(struct bio *bio, sector_t orig_sector, struct block_device* orig_bdev), TP_ARGS(bio, orig_sector, orig_bdev), TP_STRUCT__entry( __field(dev_t, dev ) __field(dev_t, orig_dev ) __field(sector_t, sector ) __field(sector_t, orig_sector ) __field(unsigned int, nr_sector ) __array(char, rwbs, 6 ) __array(char, comm, TASK_COMM_LEN ) ), TP_fast_assign( __entry->dev = bio->bi_bdev->bd_dev; __entry->orig_dev = orig_bdev->bd_dev; __entry->sector = bio->bi_sector; __entry->orig_sector = orig_sector; __entry->nr_sector = bio->bi_size >> 9; blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size); memcpy(__entry->comm, current->comm, TASK_COMM_LEN); ), TP_printk("%d,%d %s %llu + %u [%s] (from %d,%d %llu)", MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, (unsigned long long)__entry->sector, __entry->nr_sector, __entry->comm, MAJOR(__entry->orig_dev), MINOR(__entry->orig_dev), (unsigned long long)__entry->orig_sector) ); DEFINE_EVENT(bcache_cache_bio, bcache_cache_insert, TP_PROTO(struct bio *bio, sector_t orig_sector, struct block_device *orig_bdev), TP_ARGS(bio, orig_sector, orig_bdev) ); DECLARE_EVENT_CLASS(bcache_gc, TP_PROTO(uint8_t *uuid), TP_ARGS(uuid), TP_STRUCT__entry( __field(uint8_t *, uuid) ), TP_fast_assign( __entry->uuid = uuid; ), TP_printk("%pU", __entry->uuid) ); DEFINE_EVENT(bcache_gc, bcache_gc_start, TP_PROTO(uint8_t *uuid), TP_ARGS(uuid) ); DEFINE_EVENT(bcache_gc, bcache_gc_end, TP_PROTO(uint8_t *uuid), TP_ARGS(uuid) ); #endif /* _TRACE_BCACHE_H */ /* This part must be outside protection */ #include