Skip to content

Commit 7fe61ac

Browse files
zhangyi089gregkh
authored andcommitted
ext4: enhance tracepoints during the folios writeback
commit 6b13275 upstream. After mpage_map_and_submit_extent() supports restarting handle if credits are insufficient during allocating blocks, it is more likely to exit the current mapping iteration and continue to process the current processing partially mapped folio again. The existing tracepoints are not sufficient to track this situation, so enhance the tracepoints to track the writeback position and the return value before and after submitting the folios. Signed-off-by: Zhang Yi <[email protected]> Reviewed-by: Jan Kara <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Theodore Ts'o <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent ffb21ea commit 7fe61ac

2 files changed

Lines changed: 41 additions & 6 deletions

File tree

fs/ext4/inode.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2936,7 +2936,8 @@ static int ext4_do_writepages(struct mpage_da_data *mpd)
29362936
}
29372937
mpd->do_map = 1;
29382938

2939-
trace_ext4_da_write_pages(inode, mpd->start_pos, wbc);
2939+
trace_ext4_da_write_folios_start(inode, mpd->start_pos,
2940+
mpd->next_pos, wbc);
29402941
ret = mpage_prepare_extent_to_map(mpd);
29412942
if (!ret && mpd->map.m_len)
29422943
ret = mpage_map_and_submit_extent(handle, mpd,
@@ -2974,6 +2975,8 @@ static int ext4_do_writepages(struct mpage_da_data *mpd)
29742975
} else
29752976
ext4_put_io_end(mpd->io_submit.io_end);
29762977
mpd->io_submit.io_end = NULL;
2978+
trace_ext4_da_write_folios_end(inode, mpd->start_pos,
2979+
mpd->next_pos, wbc, ret);
29772980

29782981
if (ret == -ENOSPC && sbi->s_journal) {
29792982
/*

include/trace/events/ext4.h

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -482,16 +482,17 @@ TRACE_EVENT(ext4_writepages,
482482
(unsigned long) __entry->writeback_index)
483483
);
484484

485-
TRACE_EVENT(ext4_da_write_pages,
486-
TP_PROTO(struct inode *inode, loff_t start_pos,
485+
TRACE_EVENT(ext4_da_write_folios_start,
486+
TP_PROTO(struct inode *inode, loff_t start_pos, loff_t next_pos,
487487
struct writeback_control *wbc),
488488

489-
TP_ARGS(inode, start_pos, wbc),
489+
TP_ARGS(inode, start_pos, next_pos, wbc),
490490

491491
TP_STRUCT__entry(
492492
__field( dev_t, dev )
493493
__field( ino_t, ino )
494494
__field( loff_t, start_pos )
495+
__field( loff_t, next_pos )
495496
__field( long, nr_to_write )
496497
__field( int, sync_mode )
497498
),
@@ -500,16 +501,47 @@ TRACE_EVENT(ext4_da_write_pages,
500501
__entry->dev = inode->i_sb->s_dev;
501502
__entry->ino = inode->i_ino;
502503
__entry->start_pos = start_pos;
504+
__entry->next_pos = next_pos;
503505
__entry->nr_to_write = wbc->nr_to_write;
504506
__entry->sync_mode = wbc->sync_mode;
505507
),
506508

507-
TP_printk("dev %d,%d ino %lu start_pos 0x%llx nr_to_write %ld sync_mode %d",
509+
TP_printk("dev %d,%d ino %lu start_pos 0x%llx next_pos 0x%llx nr_to_write %ld sync_mode %d",
508510
MAJOR(__entry->dev), MINOR(__entry->dev),
509-
(unsigned long) __entry->ino, __entry->start_pos,
511+
(unsigned long) __entry->ino, __entry->start_pos, __entry->next_pos,
510512
__entry->nr_to_write, __entry->sync_mode)
511513
);
512514

515+
TRACE_EVENT(ext4_da_write_folios_end,
516+
TP_PROTO(struct inode *inode, loff_t start_pos, loff_t next_pos,
517+
struct writeback_control *wbc, int ret),
518+
519+
TP_ARGS(inode, start_pos, next_pos, wbc, ret),
520+
521+
TP_STRUCT__entry(
522+
__field( dev_t, dev )
523+
__field( ino_t, ino )
524+
__field( loff_t, start_pos )
525+
__field( loff_t, next_pos )
526+
__field( long, nr_to_write )
527+
__field( int, ret )
528+
),
529+
530+
TP_fast_assign(
531+
__entry->dev = inode->i_sb->s_dev;
532+
__entry->ino = inode->i_ino;
533+
__entry->start_pos = start_pos;
534+
__entry->next_pos = next_pos;
535+
__entry->nr_to_write = wbc->nr_to_write;
536+
__entry->ret = ret;
537+
),
538+
539+
TP_printk("dev %d,%d ino %lu start_pos 0x%llx next_pos 0x%llx nr_to_write %ld ret %d",
540+
MAJOR(__entry->dev), MINOR(__entry->dev),
541+
(unsigned long) __entry->ino, __entry->start_pos, __entry->next_pos,
542+
__entry->nr_to_write, __entry->ret)
543+
);
544+
513545
TRACE_EVENT(ext4_da_write_pages_extent,
514546
TP_PROTO(struct inode *inode, struct ext4_map_blocks *map),
515547

0 commit comments

Comments
 (0)