Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM jbd2
0004 
0005 #if !defined(_TRACE_JBD2_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_JBD2_H
0007 
0008 #include <linux/jbd2.h>
0009 #include <linux/tracepoint.h>
0010 
0011 struct transaction_chp_stats_s;
0012 struct transaction_run_stats_s;
0013 
0014 TRACE_EVENT(jbd2_checkpoint,
0015 
0016     TP_PROTO(journal_t *journal, int result),
0017 
0018     TP_ARGS(journal, result),
0019 
0020     TP_STRUCT__entry(
0021         __field(    dev_t,  dev         )
0022         __field(    int,    result          )
0023     ),
0024 
0025     TP_fast_assign(
0026         __entry->dev        = journal->j_fs_dev->bd_dev;
0027         __entry->result     = result;
0028     ),
0029 
0030     TP_printk("dev %d,%d result %d",
0031           MAJOR(__entry->dev), MINOR(__entry->dev), __entry->result)
0032 );
0033 
0034 DECLARE_EVENT_CLASS(jbd2_commit,
0035 
0036     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0037 
0038     TP_ARGS(journal, commit_transaction),
0039 
0040     TP_STRUCT__entry(
0041         __field(    dev_t,  dev         )
0042         __field(    char,   sync_commit       )
0043         __field(    int,    transaction       )
0044     ),
0045 
0046     TP_fast_assign(
0047         __entry->dev        = journal->j_fs_dev->bd_dev;
0048         __entry->sync_commit = commit_transaction->t_synchronous_commit;
0049         __entry->transaction    = commit_transaction->t_tid;
0050     ),
0051 
0052     TP_printk("dev %d,%d transaction %d sync %d",
0053           MAJOR(__entry->dev), MINOR(__entry->dev),
0054           __entry->transaction, __entry->sync_commit)
0055 );
0056 
0057 DEFINE_EVENT(jbd2_commit, jbd2_start_commit,
0058 
0059     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0060 
0061     TP_ARGS(journal, commit_transaction)
0062 );
0063 
0064 DEFINE_EVENT(jbd2_commit, jbd2_commit_locking,
0065 
0066     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0067 
0068     TP_ARGS(journal, commit_transaction)
0069 );
0070 
0071 DEFINE_EVENT(jbd2_commit, jbd2_commit_flushing,
0072 
0073     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0074 
0075     TP_ARGS(journal, commit_transaction)
0076 );
0077 
0078 DEFINE_EVENT(jbd2_commit, jbd2_commit_logging,
0079 
0080     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0081 
0082     TP_ARGS(journal, commit_transaction)
0083 );
0084 
0085 DEFINE_EVENT(jbd2_commit, jbd2_drop_transaction,
0086 
0087     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0088 
0089     TP_ARGS(journal, commit_transaction)
0090 );
0091 
0092 TRACE_EVENT(jbd2_end_commit,
0093     TP_PROTO(journal_t *journal, transaction_t *commit_transaction),
0094 
0095     TP_ARGS(journal, commit_transaction),
0096 
0097     TP_STRUCT__entry(
0098         __field(    dev_t,  dev         )
0099         __field(    char,   sync_commit       )
0100         __field(    int,    transaction       )
0101         __field(    int,    head              )
0102     ),
0103 
0104     TP_fast_assign(
0105         __entry->dev        = journal->j_fs_dev->bd_dev;
0106         __entry->sync_commit = commit_transaction->t_synchronous_commit;
0107         __entry->transaction    = commit_transaction->t_tid;
0108         __entry->head       = journal->j_tail_sequence;
0109     ),
0110 
0111     TP_printk("dev %d,%d transaction %d sync %d head %d",
0112           MAJOR(__entry->dev), MINOR(__entry->dev),
0113           __entry->transaction, __entry->sync_commit, __entry->head)
0114 );
0115 
0116 TRACE_EVENT(jbd2_submit_inode_data,
0117     TP_PROTO(struct inode *inode),
0118 
0119     TP_ARGS(inode),
0120 
0121     TP_STRUCT__entry(
0122         __field(    dev_t,  dev         )
0123         __field(    ino_t,  ino         )
0124     ),
0125 
0126     TP_fast_assign(
0127         __entry->dev    = inode->i_sb->s_dev;
0128         __entry->ino    = inode->i_ino;
0129     ),
0130 
0131     TP_printk("dev %d,%d ino %lu",
0132           MAJOR(__entry->dev), MINOR(__entry->dev),
0133           (unsigned long) __entry->ino)
0134 );
0135 
0136 DECLARE_EVENT_CLASS(jbd2_handle_start_class,
0137     TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
0138          unsigned int line_no, int requested_blocks),
0139 
0140     TP_ARGS(dev, tid, type, line_no, requested_blocks),
0141 
0142     TP_STRUCT__entry(
0143         __field(        dev_t,  dev     )
0144         __field(    unsigned long,  tid     )
0145         __field(     unsigned int,  type        )
0146         __field(     unsigned int,  line_no     )
0147         __field(          int,  requested_blocks)
0148     ),
0149 
0150     TP_fast_assign(
0151         __entry->dev          = dev;
0152         __entry->tid          = tid;
0153         __entry->type         = type;
0154         __entry->line_no      = line_no;
0155         __entry->requested_blocks = requested_blocks;
0156     ),
0157 
0158     TP_printk("dev %d,%d tid %lu type %u line_no %u "
0159           "requested_blocks %d",
0160           MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
0161           __entry->type, __entry->line_no, __entry->requested_blocks)
0162 );
0163 
0164 DEFINE_EVENT(jbd2_handle_start_class, jbd2_handle_start,
0165     TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
0166          unsigned int line_no, int requested_blocks),
0167 
0168     TP_ARGS(dev, tid, type, line_no, requested_blocks)
0169 );
0170 
0171 DEFINE_EVENT(jbd2_handle_start_class, jbd2_handle_restart,
0172     TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
0173          unsigned int line_no, int requested_blocks),
0174 
0175     TP_ARGS(dev, tid, type, line_no, requested_blocks)
0176 );
0177 
0178 TRACE_EVENT(jbd2_handle_extend,
0179     TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
0180          unsigned int line_no, int buffer_credits,
0181          int requested_blocks),
0182 
0183     TP_ARGS(dev, tid, type, line_no, buffer_credits, requested_blocks),
0184 
0185     TP_STRUCT__entry(
0186         __field(        dev_t,  dev     )
0187         __field(    unsigned long,  tid     )
0188         __field(     unsigned int,  type        )
0189         __field(     unsigned int,  line_no     )
0190         __field(          int,  buffer_credits  )
0191         __field(          int,  requested_blocks)
0192     ),
0193 
0194     TP_fast_assign(
0195         __entry->dev          = dev;
0196         __entry->tid          = tid;
0197         __entry->type         = type;
0198         __entry->line_no      = line_no;
0199         __entry->buffer_credits   = buffer_credits;
0200         __entry->requested_blocks = requested_blocks;
0201     ),
0202 
0203     TP_printk("dev %d,%d tid %lu type %u line_no %u "
0204           "buffer_credits %d requested_blocks %d",
0205           MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
0206           __entry->type, __entry->line_no, __entry->buffer_credits,
0207           __entry->requested_blocks)
0208 );
0209 
0210 TRACE_EVENT(jbd2_handle_stats,
0211     TP_PROTO(dev_t dev, unsigned long tid, unsigned int type,
0212          unsigned int line_no, int interval, int sync,
0213          int requested_blocks, int dirtied_blocks),
0214 
0215     TP_ARGS(dev, tid, type, line_no, interval, sync,
0216         requested_blocks, dirtied_blocks),
0217 
0218     TP_STRUCT__entry(
0219         __field(        dev_t,  dev     )
0220         __field(    unsigned long,  tid     )
0221         __field(     unsigned int,  type        )
0222         __field(     unsigned int,  line_no     )
0223         __field(          int,  interval    )
0224         __field(          int,  sync        )
0225         __field(          int,  requested_blocks)
0226         __field(          int,  dirtied_blocks  )
0227     ),
0228 
0229     TP_fast_assign(
0230         __entry->dev          = dev;
0231         __entry->tid          = tid;
0232         __entry->type         = type;
0233         __entry->line_no      = line_no;
0234         __entry->interval     = interval;
0235         __entry->sync         = sync;
0236         __entry->requested_blocks = requested_blocks;
0237         __entry->dirtied_blocks   = dirtied_blocks;
0238     ),
0239 
0240     TP_printk("dev %d,%d tid %lu type %u line_no %u interval %d "
0241           "sync %d requested_blocks %d dirtied_blocks %d",
0242           MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
0243           __entry->type, __entry->line_no, __entry->interval,
0244           __entry->sync, __entry->requested_blocks,
0245           __entry->dirtied_blocks)
0246 );
0247 
0248 TRACE_EVENT(jbd2_run_stats,
0249     TP_PROTO(dev_t dev, unsigned long tid,
0250          struct transaction_run_stats_s *stats),
0251 
0252     TP_ARGS(dev, tid, stats),
0253 
0254     TP_STRUCT__entry(
0255         __field(        dev_t,  dev     )
0256         __field(    unsigned long,  tid     )
0257         __field(    unsigned long,  wait        )
0258         __field(    unsigned long,  request_delay   )
0259         __field(    unsigned long,  running     )
0260         __field(    unsigned long,  locked      )
0261         __field(    unsigned long,  flushing    )
0262         __field(    unsigned long,  logging     )
0263         __field(        __u32,  handle_count    )
0264         __field(        __u32,  blocks      )
0265         __field(        __u32,  blocks_logged   )
0266     ),
0267 
0268     TP_fast_assign(
0269         __entry->dev        = dev;
0270         __entry->tid        = tid;
0271         __entry->wait       = stats->rs_wait;
0272         __entry->request_delay  = stats->rs_request_delay;
0273         __entry->running    = stats->rs_running;
0274         __entry->locked     = stats->rs_locked;
0275         __entry->flushing   = stats->rs_flushing;
0276         __entry->logging    = stats->rs_logging;
0277         __entry->handle_count   = stats->rs_handle_count;
0278         __entry->blocks     = stats->rs_blocks;
0279         __entry->blocks_logged  = stats->rs_blocks_logged;
0280     ),
0281 
0282     TP_printk("dev %d,%d tid %lu wait %u request_delay %u running %u "
0283           "locked %u flushing %u logging %u handle_count %u "
0284           "blocks %u blocks_logged %u",
0285           MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
0286           jiffies_to_msecs(__entry->wait),
0287           jiffies_to_msecs(__entry->request_delay),
0288           jiffies_to_msecs(__entry->running),
0289           jiffies_to_msecs(__entry->locked),
0290           jiffies_to_msecs(__entry->flushing),
0291           jiffies_to_msecs(__entry->logging),
0292           __entry->handle_count, __entry->blocks,
0293           __entry->blocks_logged)
0294 );
0295 
0296 TRACE_EVENT(jbd2_checkpoint_stats,
0297     TP_PROTO(dev_t dev, unsigned long tid,
0298          struct transaction_chp_stats_s *stats),
0299 
0300     TP_ARGS(dev, tid, stats),
0301 
0302     TP_STRUCT__entry(
0303         __field(        dev_t,  dev     )
0304         __field(    unsigned long,  tid     )
0305         __field(    unsigned long,  chp_time    )
0306         __field(        __u32,  forced_to_close )
0307         __field(        __u32,  written     )
0308         __field(        __u32,  dropped     )
0309     ),
0310 
0311     TP_fast_assign(
0312         __entry->dev        = dev;
0313         __entry->tid        = tid;
0314         __entry->chp_time   = stats->cs_chp_time;
0315         __entry->forced_to_close= stats->cs_forced_to_close;
0316         __entry->written    = stats->cs_written;
0317         __entry->dropped    = stats->cs_dropped;
0318     ),
0319 
0320     TP_printk("dev %d,%d tid %lu chp_time %u forced_to_close %u "
0321           "written %u dropped %u",
0322           MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid,
0323           jiffies_to_msecs(__entry->chp_time),
0324           __entry->forced_to_close, __entry->written, __entry->dropped)
0325 );
0326 
0327 TRACE_EVENT(jbd2_update_log_tail,
0328 
0329     TP_PROTO(journal_t *journal, tid_t first_tid,
0330          unsigned long block_nr, unsigned long freed),
0331 
0332     TP_ARGS(journal, first_tid, block_nr, freed),
0333 
0334     TP_STRUCT__entry(
0335         __field(    dev_t,  dev         )
0336         __field(    tid_t,  tail_sequence       )
0337         __field(    tid_t,  first_tid       )
0338         __field(unsigned long,  block_nr        )
0339         __field(unsigned long,  freed           )
0340     ),
0341 
0342     TP_fast_assign(
0343         __entry->dev        = journal->j_fs_dev->bd_dev;
0344         __entry->tail_sequence  = journal->j_tail_sequence;
0345         __entry->first_tid  = first_tid;
0346         __entry->block_nr   = block_nr;
0347         __entry->freed      = freed;
0348     ),
0349 
0350     TP_printk("dev %d,%d from %u to %u offset %lu freed %lu",
0351           MAJOR(__entry->dev), MINOR(__entry->dev),
0352           __entry->tail_sequence, __entry->first_tid,
0353           __entry->block_nr, __entry->freed)
0354 );
0355 
0356 TRACE_EVENT(jbd2_write_superblock,
0357 
0358     TP_PROTO(journal_t *journal, blk_opf_t write_flags),
0359 
0360     TP_ARGS(journal, write_flags),
0361 
0362     TP_STRUCT__entry(
0363         __field(    dev_t,  dev         )
0364         __field(    blk_opf_t,  write_flags     )
0365     ),
0366 
0367     TP_fast_assign(
0368         __entry->dev        = journal->j_fs_dev->bd_dev;
0369         __entry->write_flags    = write_flags;
0370     ),
0371 
0372     TP_printk("dev %d,%d write_flags %x", MAJOR(__entry->dev),
0373           MINOR(__entry->dev), (__force u32)__entry->write_flags)
0374 );
0375 
0376 TRACE_EVENT(jbd2_lock_buffer_stall,
0377 
0378     TP_PROTO(dev_t dev, unsigned long stall_ms),
0379 
0380     TP_ARGS(dev, stall_ms),
0381 
0382     TP_STRUCT__entry(
0383         __field(        dev_t, dev  )
0384         __field(unsigned long, stall_ms )
0385     ),
0386 
0387     TP_fast_assign(
0388         __entry->dev        = dev;
0389         __entry->stall_ms   = stall_ms;
0390     ),
0391 
0392     TP_printk("dev %d,%d stall_ms %lu",
0393         MAJOR(__entry->dev), MINOR(__entry->dev),
0394         __entry->stall_ms)
0395 );
0396 
0397 DECLARE_EVENT_CLASS(jbd2_journal_shrink,
0398 
0399     TP_PROTO(journal_t *journal, unsigned long nr_to_scan,
0400          unsigned long count),
0401 
0402     TP_ARGS(journal, nr_to_scan, count),
0403 
0404     TP_STRUCT__entry(
0405         __field(dev_t, dev)
0406         __field(unsigned long, nr_to_scan)
0407         __field(unsigned long, count)
0408     ),
0409 
0410     TP_fast_assign(
0411         __entry->dev        = journal->j_fs_dev->bd_dev;
0412         __entry->nr_to_scan = nr_to_scan;
0413         __entry->count      = count;
0414     ),
0415 
0416     TP_printk("dev %d,%d nr_to_scan %lu count %lu",
0417           MAJOR(__entry->dev), MINOR(__entry->dev),
0418           __entry->nr_to_scan, __entry->count)
0419 );
0420 
0421 DEFINE_EVENT(jbd2_journal_shrink, jbd2_shrink_count,
0422 
0423     TP_PROTO(journal_t *journal, unsigned long nr_to_scan, unsigned long count),
0424 
0425     TP_ARGS(journal, nr_to_scan, count)
0426 );
0427 
0428 DEFINE_EVENT(jbd2_journal_shrink, jbd2_shrink_scan_enter,
0429 
0430     TP_PROTO(journal_t *journal, unsigned long nr_to_scan, unsigned long count),
0431 
0432     TP_ARGS(journal, nr_to_scan, count)
0433 );
0434 
0435 TRACE_EVENT(jbd2_shrink_scan_exit,
0436 
0437     TP_PROTO(journal_t *journal, unsigned long nr_to_scan,
0438          unsigned long nr_shrunk, unsigned long count),
0439 
0440     TP_ARGS(journal, nr_to_scan, nr_shrunk, count),
0441 
0442     TP_STRUCT__entry(
0443         __field(dev_t, dev)
0444         __field(unsigned long, nr_to_scan)
0445         __field(unsigned long, nr_shrunk)
0446         __field(unsigned long, count)
0447     ),
0448 
0449     TP_fast_assign(
0450         __entry->dev        = journal->j_fs_dev->bd_dev;
0451         __entry->nr_to_scan = nr_to_scan;
0452         __entry->nr_shrunk  = nr_shrunk;
0453         __entry->count      = count;
0454     ),
0455 
0456     TP_printk("dev %d,%d nr_to_scan %lu nr_shrunk %lu count %lu",
0457           MAJOR(__entry->dev), MINOR(__entry->dev),
0458           __entry->nr_to_scan, __entry->nr_shrunk,
0459           __entry->count)
0460 );
0461 
0462 TRACE_EVENT(jbd2_shrink_checkpoint_list,
0463 
0464     TP_PROTO(journal_t *journal, tid_t first_tid, tid_t tid, tid_t last_tid,
0465          unsigned long nr_freed, unsigned long nr_scanned,
0466          tid_t next_tid),
0467 
0468     TP_ARGS(journal, first_tid, tid, last_tid, nr_freed,
0469         nr_scanned, next_tid),
0470 
0471     TP_STRUCT__entry(
0472         __field(dev_t, dev)
0473         __field(tid_t, first_tid)
0474         __field(tid_t, tid)
0475         __field(tid_t, last_tid)
0476         __field(unsigned long, nr_freed)
0477         __field(unsigned long, nr_scanned)
0478         __field(tid_t, next_tid)
0479     ),
0480 
0481     TP_fast_assign(
0482         __entry->dev        = journal->j_fs_dev->bd_dev;
0483         __entry->first_tid  = first_tid;
0484         __entry->tid        = tid;
0485         __entry->last_tid   = last_tid;
0486         __entry->nr_freed   = nr_freed;
0487         __entry->nr_scanned = nr_scanned;
0488         __entry->next_tid   = next_tid;
0489     ),
0490 
0491     TP_printk("dev %d,%d shrink transaction %u-%u(%u) freed %lu "
0492           "scanned %lu next transaction %u",
0493           MAJOR(__entry->dev), MINOR(__entry->dev),
0494           __entry->first_tid, __entry->tid, __entry->last_tid,
0495           __entry->nr_freed, __entry->nr_scanned, __entry->next_tid)
0496 );
0497 
0498 #endif /* _TRACE_JBD2_H */
0499 
0500 /* This part must be outside protection */
0501 #include <trace/define_trace.h>