Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: ext4: Fix time encoding with extra epoch bits ext4: Add a stub for mpage_da_data in the trace header jbd2: Use tracepoints for history file ext4: Use tracepoints for mb_history trace file ext4, jbd2: Drop unneeded printks at mount and unmount time ext4: Handle nested ext4_journal_start/stop calls without a journal ext4: Make sure ext4_dirty_inode() updates the inode in no journal mode ext4: Avoid updating the inode table bh twice in no journal mode ext4: EXT4_IOC_MOVE_EXT: Check for different original and donor inodes first ext4: async direct IO for holes and fallocate support ext4: Use end_io callback to avoid direct I/O fallback to buffered I/O ext4: Split uninitialized extents for direct I/O ext4: release reserved quota when block reservation for delalloc retry ext4: Adjust ext4_da_writepages() to write out larger contiguous chunks ext4: Fix hueristic which avoids group preallocation for closed files ext4: Use ext4_msg() for ext4_da_writepage() errors ext4: Update documentation about quota mount options
This commit is contained in:
@@ -11,6 +11,7 @@ struct ext4_allocation_context;
|
||||
struct ext4_allocation_request;
|
||||
struct ext4_prealloc_space;
|
||||
struct ext4_inode_info;
|
||||
struct mpage_da_data;
|
||||
|
||||
#define EXT4_I(inode) (container_of(inode, struct ext4_inode_info, vfs_inode))
|
||||
|
||||
@@ -236,6 +237,7 @@ TRACE_EVENT(ext4_da_writepages,
|
||||
__field( char, for_kupdate )
|
||||
__field( char, for_reclaim )
|
||||
__field( char, range_cyclic )
|
||||
__field( pgoff_t, writeback_index )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -249,15 +251,17 @@ TRACE_EVENT(ext4_da_writepages,
|
||||
__entry->for_kupdate = wbc->for_kupdate;
|
||||
__entry->for_reclaim = wbc->for_reclaim;
|
||||
__entry->range_cyclic = wbc->range_cyclic;
|
||||
__entry->writeback_index = inode->i_mapping->writeback_index;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu nr_to_write %ld pages_skipped %ld range_start %llu range_end %llu nonblocking %d for_kupdate %d for_reclaim %d range_cyclic %d",
|
||||
TP_printk("dev %s ino %lu nr_to_write %ld pages_skipped %ld range_start %llu range_end %llu nonblocking %d for_kupdate %d for_reclaim %d range_cyclic %d writeback_index %lu",
|
||||
jbd2_dev_to_name(__entry->dev),
|
||||
(unsigned long) __entry->ino, __entry->nr_to_write,
|
||||
__entry->pages_skipped, __entry->range_start,
|
||||
__entry->range_end, __entry->nonblocking,
|
||||
__entry->for_kupdate, __entry->for_reclaim,
|
||||
__entry->range_cyclic)
|
||||
__entry->range_cyclic,
|
||||
(unsigned long) __entry->writeback_index)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_write_pages,
|
||||
@@ -309,6 +313,7 @@ TRACE_EVENT(ext4_da_writepages_result,
|
||||
__field( char, encountered_congestion )
|
||||
__field( char, more_io )
|
||||
__field( char, no_nrwrite_index_update )
|
||||
__field( pgoff_t, writeback_index )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
@@ -320,14 +325,16 @@ TRACE_EVENT(ext4_da_writepages_result,
|
||||
__entry->encountered_congestion = wbc->encountered_congestion;
|
||||
__entry->more_io = wbc->more_io;
|
||||
__entry->no_nrwrite_index_update = wbc->no_nrwrite_index_update;
|
||||
__entry->writeback_index = inode->i_mapping->writeback_index;
|
||||
),
|
||||
|
||||
TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld congestion %d more_io %d no_nrwrite_index_update %d",
|
||||
TP_printk("dev %s ino %lu ret %d pages_written %d pages_skipped %ld congestion %d more_io %d no_nrwrite_index_update %d writeback_index %lu",
|
||||
jbd2_dev_to_name(__entry->dev),
|
||||
(unsigned long) __entry->ino, __entry->ret,
|
||||
__entry->pages_written, __entry->pages_skipped,
|
||||
__entry->encountered_congestion, __entry->more_io,
|
||||
__entry->no_nrwrite_index_update)
|
||||
__entry->no_nrwrite_index_update,
|
||||
(unsigned long) __entry->writeback_index)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_da_write_begin,
|
||||
@@ -737,6 +744,169 @@ TRACE_EVENT(ext4_alloc_da_blocks,
|
||||
__entry->data_blocks, __entry->meta_blocks)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_mballoc_alloc,
|
||||
TP_PROTO(struct ext4_allocation_context *ac),
|
||||
|
||||
TP_ARGS(ac),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( __u16, found )
|
||||
__field( __u16, groups )
|
||||
__field( __u16, buddy )
|
||||
__field( __u16, flags )
|
||||
__field( __u16, tail )
|
||||
__field( __u8, cr )
|
||||
__field( __u32, orig_logical )
|
||||
__field( int, orig_start )
|
||||
__field( __u32, orig_group )
|
||||
__field( int, orig_len )
|
||||
__field( __u32, goal_logical )
|
||||
__field( int, goal_start )
|
||||
__field( __u32, goal_group )
|
||||
__field( int, goal_len )
|
||||
__field( __u32, result_logical )
|
||||
__field( int, result_start )
|
||||
__field( __u32, result_group )
|
||||
__field( int, result_len )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = ac->ac_inode->i_sb->s_dev;
|
||||
__entry->ino = ac->ac_inode->i_ino;
|
||||
__entry->found = ac->ac_found;
|
||||
__entry->flags = ac->ac_flags;
|
||||
__entry->groups = ac->ac_groups_scanned;
|
||||
__entry->buddy = ac->ac_buddy;
|
||||
__entry->tail = ac->ac_tail;
|
||||
__entry->cr = ac->ac_criteria;
|
||||
__entry->orig_logical = ac->ac_o_ex.fe_logical;
|
||||
__entry->orig_start = ac->ac_o_ex.fe_start;
|
||||
__entry->orig_group = ac->ac_o_ex.fe_group;
|
||||
__entry->orig_len = ac->ac_o_ex.fe_len;
|
||||
__entry->goal_logical = ac->ac_g_ex.fe_logical;
|
||||
__entry->goal_start = ac->ac_g_ex.fe_start;
|
||||
__entry->goal_group = ac->ac_g_ex.fe_group;
|
||||
__entry->goal_len = ac->ac_g_ex.fe_len;
|
||||
__entry->result_logical = ac->ac_f_ex.fe_logical;
|
||||
__entry->result_start = ac->ac_f_ex.fe_start;
|
||||
__entry->result_group = ac->ac_f_ex.fe_group;
|
||||
__entry->result_len = ac->ac_f_ex.fe_len;
|
||||
),
|
||||
|
||||
TP_printk("dev %s inode %lu orig %u/%d/%u@%u goal %u/%d/%u@%u "
|
||||
"result %u/%d/%u@%u blks %u grps %u cr %u flags 0x%04x "
|
||||
"tail %u broken %u",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->orig_group, __entry->orig_start,
|
||||
__entry->orig_len, __entry->orig_logical,
|
||||
__entry->goal_group, __entry->goal_start,
|
||||
__entry->goal_len, __entry->goal_logical,
|
||||
__entry->result_group, __entry->result_start,
|
||||
__entry->result_len, __entry->result_logical,
|
||||
__entry->found, __entry->groups, __entry->cr,
|
||||
__entry->flags, __entry->tail,
|
||||
__entry->buddy ? 1 << __entry->buddy : 0)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_mballoc_prealloc,
|
||||
TP_PROTO(struct ext4_allocation_context *ac),
|
||||
|
||||
TP_ARGS(ac),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( __u32, orig_logical )
|
||||
__field( int, orig_start )
|
||||
__field( __u32, orig_group )
|
||||
__field( int, orig_len )
|
||||
__field( __u32, result_logical )
|
||||
__field( int, result_start )
|
||||
__field( __u32, result_group )
|
||||
__field( int, result_len )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = ac->ac_inode->i_sb->s_dev;
|
||||
__entry->ino = ac->ac_inode->i_ino;
|
||||
__entry->orig_logical = ac->ac_o_ex.fe_logical;
|
||||
__entry->orig_start = ac->ac_o_ex.fe_start;
|
||||
__entry->orig_group = ac->ac_o_ex.fe_group;
|
||||
__entry->orig_len = ac->ac_o_ex.fe_len;
|
||||
__entry->result_logical = ac->ac_b_ex.fe_logical;
|
||||
__entry->result_start = ac->ac_b_ex.fe_start;
|
||||
__entry->result_group = ac->ac_b_ex.fe_group;
|
||||
__entry->result_len = ac->ac_b_ex.fe_len;
|
||||
),
|
||||
|
||||
TP_printk("dev %s inode %lu orig %u/%d/%u@%u result %u/%d/%u@%u",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->orig_group, __entry->orig_start,
|
||||
__entry->orig_len, __entry->orig_logical,
|
||||
__entry->result_group, __entry->result_start,
|
||||
__entry->result_len, __entry->result_logical)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_mballoc_discard,
|
||||
TP_PROTO(struct ext4_allocation_context *ac),
|
||||
|
||||
TP_ARGS(ac),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( __u32, result_logical )
|
||||
__field( int, result_start )
|
||||
__field( __u32, result_group )
|
||||
__field( int, result_len )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = ac->ac_inode->i_sb->s_dev;
|
||||
__entry->ino = ac->ac_inode->i_ino;
|
||||
__entry->result_logical = ac->ac_b_ex.fe_logical;
|
||||
__entry->result_start = ac->ac_b_ex.fe_start;
|
||||
__entry->result_group = ac->ac_b_ex.fe_group;
|
||||
__entry->result_len = ac->ac_b_ex.fe_len;
|
||||
),
|
||||
|
||||
TP_printk("dev %s inode %lu extent %u/%d/%u@%u ",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->result_group, __entry->result_start,
|
||||
__entry->result_len, __entry->result_logical)
|
||||
);
|
||||
|
||||
TRACE_EVENT(ext4_mballoc_free,
|
||||
TP_PROTO(struct ext4_allocation_context *ac),
|
||||
|
||||
TP_ARGS(ac),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( ino_t, ino )
|
||||
__field( __u32, result_logical )
|
||||
__field( int, result_start )
|
||||
__field( __u32, result_group )
|
||||
__field( int, result_len )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = ac->ac_inode->i_sb->s_dev;
|
||||
__entry->ino = ac->ac_inode->i_ino;
|
||||
__entry->result_logical = ac->ac_b_ex.fe_logical;
|
||||
__entry->result_start = ac->ac_b_ex.fe_start;
|
||||
__entry->result_group = ac->ac_b_ex.fe_group;
|
||||
__entry->result_len = ac->ac_b_ex.fe_len;
|
||||
),
|
||||
|
||||
TP_printk("dev %s inode %lu extent %u/%d/%u@%u ",
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino,
|
||||
__entry->result_group, __entry->result_start,
|
||||
__entry->result_len, __entry->result_logical)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_EXT4_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
@@ -7,6 +7,9 @@
|
||||
#include <linux/jbd2.h>
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
struct transaction_chp_stats_s;
|
||||
struct transaction_run_stats_s;
|
||||
|
||||
TRACE_EVENT(jbd2_checkpoint,
|
||||
|
||||
TP_PROTO(journal_t *journal, int result),
|
||||
@@ -162,6 +165,81 @@ TRACE_EVENT(jbd2_submit_inode_data,
|
||||
jbd2_dev_to_name(__entry->dev), (unsigned long) __entry->ino)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_run_stats,
|
||||
TP_PROTO(dev_t dev, unsigned long tid,
|
||||
struct transaction_run_stats_s *stats),
|
||||
|
||||
TP_ARGS(dev, tid, stats),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( unsigned long, tid )
|
||||
__field( unsigned long, wait )
|
||||
__field( unsigned long, running )
|
||||
__field( unsigned long, locked )
|
||||
__field( unsigned long, flushing )
|
||||
__field( unsigned long, logging )
|
||||
__field( __u32, handle_count )
|
||||
__field( __u32, blocks )
|
||||
__field( __u32, blocks_logged )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = dev;
|
||||
__entry->tid = tid;
|
||||
__entry->wait = stats->rs_wait;
|
||||
__entry->running = stats->rs_running;
|
||||
__entry->locked = stats->rs_locked;
|
||||
__entry->flushing = stats->rs_flushing;
|
||||
__entry->logging = stats->rs_logging;
|
||||
__entry->handle_count = stats->rs_handle_count;
|
||||
__entry->blocks = stats->rs_blocks;
|
||||
__entry->blocks_logged = stats->rs_blocks_logged;
|
||||
),
|
||||
|
||||
TP_printk("dev %s tid %lu wait %u running %u locked %u flushing %u "
|
||||
"logging %u handle_count %u blocks %u blocks_logged %u",
|
||||
jbd2_dev_to_name(__entry->dev), __entry->tid,
|
||||
jiffies_to_msecs(__entry->wait),
|
||||
jiffies_to_msecs(__entry->running),
|
||||
jiffies_to_msecs(__entry->locked),
|
||||
jiffies_to_msecs(__entry->flushing),
|
||||
jiffies_to_msecs(__entry->logging),
|
||||
__entry->handle_count, __entry->blocks,
|
||||
__entry->blocks_logged)
|
||||
);
|
||||
|
||||
TRACE_EVENT(jbd2_checkpoint_stats,
|
||||
TP_PROTO(dev_t dev, unsigned long tid,
|
||||
struct transaction_chp_stats_s *stats),
|
||||
|
||||
TP_ARGS(dev, tid, stats),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( dev_t, dev )
|
||||
__field( unsigned long, tid )
|
||||
__field( unsigned long, chp_time )
|
||||
__field( __u32, forced_to_close )
|
||||
__field( __u32, written )
|
||||
__field( __u32, dropped )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->dev = dev;
|
||||
__entry->tid = tid;
|
||||
__entry->chp_time = stats->cs_chp_time;
|
||||
__entry->forced_to_close= stats->cs_forced_to_close;
|
||||
__entry->written = stats->cs_written;
|
||||
__entry->dropped = stats->cs_dropped;
|
||||
),
|
||||
|
||||
TP_printk("dev %s tid %lu chp_time %u forced_to_close %u "
|
||||
"written %u dropped %u",
|
||||
jbd2_dev_to_name(__entry->dev), __entry->tid,
|
||||
jiffies_to_msecs(__entry->chp_time),
|
||||
__entry->forced_to_close, __entry->written, __entry->dropped)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_JBD2_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
Reference in New Issue
Block a user