ftrace_reader: Adding events for IO

Bug: 73625480
Change-Id: I6856afe6e10b2fba7a25fe700cb250e81847f6cf
diff --git a/Android.bp b/Android.bp
index 04e899d..a5c266d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -391,7 +391,25 @@
     "protos/perfetto/trace/ftrace/binder_transaction.proto",
     "protos/perfetto/trace/ftrace/binder_transaction_received.proto",
     "protos/perfetto/trace/ftrace/binder_unlock.proto",
+    "protos/perfetto/trace/ftrace/block_bio_backmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_bounce.proto",
+    "protos/perfetto/trace/ftrace/block_bio_complete.proto",
+    "protos/perfetto/trace/ftrace/block_bio_frontmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_queue.proto",
+    "protos/perfetto/trace/ftrace/block_bio_remap.proto",
+    "protos/perfetto/trace/ftrace/block_dirty_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_getrq.proto",
+    "protos/perfetto/trace/ftrace/block_plug.proto",
+    "protos/perfetto/trace/ftrace/block_rq_abort.proto",
+    "protos/perfetto/trace/ftrace/block_rq_complete.proto",
+    "protos/perfetto/trace/ftrace/block_rq_insert.proto",
     "protos/perfetto/trace/ftrace/block_rq_issue.proto",
+    "protos/perfetto/trace/ftrace/block_rq_remap.proto",
+    "protos/perfetto/trace/ftrace/block_rq_requeue.proto",
+    "protos/perfetto/trace/ftrace/block_sleeprq.proto",
+    "protos/perfetto/trace/ftrace/block_split.proto",
+    "protos/perfetto/trace/ftrace/block_touch_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_unplug.proto",
     "protos/perfetto/trace/ftrace/cgroup_attach_task.proto",
     "protos/perfetto/trace/ftrace/cgroup_destroy_root.proto",
     "protos/perfetto/trace/ftrace/cgroup_mkdir.proto",
@@ -413,10 +431,101 @@
     "protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto",
+    "protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto",
+    "protos/perfetto/trace/ftrace/ext4_collapse_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_release_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_begin.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_drop_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_evict_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_forget.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_insert_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto",
+    "protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto",
+    "protos/perfetto/trace/ftrace/ext4_punch_hole.proto",
+    "protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_readpage.proto",
+    "protos/perfetto/trace/ftrace/ext4_releasepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_remove_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_inode.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_sync_fs.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_all_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_begin.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages_result.proto",
+    "protos/perfetto/trace/ftrace/ext4_zero_range.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
@@ -512,7 +621,25 @@
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction_received.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_unlock.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_backmerge.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_bounce.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_complete.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_frontmerge.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_queue.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_remap.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_dirty_buffer.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_getrq.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_plug.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_abort.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_complete.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_insert.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/block_rq_issue.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_remap.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_requeue.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_sleeprq.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_split.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_touch_buffer.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_unplug.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_attach_task.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_destroy_root.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_mkdir.pb.cc",
@@ -534,10 +661,101 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_target.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_blocks.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_inode.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_collapse_range.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_release_space.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_reserve_space.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_begin.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_end.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_blocks.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_preallocations.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_drop_inode.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_cache_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_insert_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_remove_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_count.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_evict_inode.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_in_cache.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_load_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_show_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_forget.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_blocks.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_inode.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_insert_range.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_invalidatepage.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_write_end.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_discard.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_free.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_punch_hole.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_readpage.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_releasepage.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_remove_blocks.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_blocks.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_inode.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_enter.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_fs.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_all_free.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_extent.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_enter.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_exit.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_begin.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_end.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepage.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages_result.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_zero_range.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pb.cc",
@@ -634,7 +852,25 @@
     "protos/perfetto/trace/ftrace/binder_transaction.proto",
     "protos/perfetto/trace/ftrace/binder_transaction_received.proto",
     "protos/perfetto/trace/ftrace/binder_unlock.proto",
+    "protos/perfetto/trace/ftrace/block_bio_backmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_bounce.proto",
+    "protos/perfetto/trace/ftrace/block_bio_complete.proto",
+    "protos/perfetto/trace/ftrace/block_bio_frontmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_queue.proto",
+    "protos/perfetto/trace/ftrace/block_bio_remap.proto",
+    "protos/perfetto/trace/ftrace/block_dirty_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_getrq.proto",
+    "protos/perfetto/trace/ftrace/block_plug.proto",
+    "protos/perfetto/trace/ftrace/block_rq_abort.proto",
+    "protos/perfetto/trace/ftrace/block_rq_complete.proto",
+    "protos/perfetto/trace/ftrace/block_rq_insert.proto",
     "protos/perfetto/trace/ftrace/block_rq_issue.proto",
+    "protos/perfetto/trace/ftrace/block_rq_remap.proto",
+    "protos/perfetto/trace/ftrace/block_rq_requeue.proto",
+    "protos/perfetto/trace/ftrace/block_sleeprq.proto",
+    "protos/perfetto/trace/ftrace/block_split.proto",
+    "protos/perfetto/trace/ftrace/block_touch_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_unplug.proto",
     "protos/perfetto/trace/ftrace/cgroup_attach_task.proto",
     "protos/perfetto/trace/ftrace/cgroup_destroy_root.proto",
     "protos/perfetto/trace/ftrace/cgroup_mkdir.proto",
@@ -656,10 +892,101 @@
     "protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto",
+    "protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto",
+    "protos/perfetto/trace/ftrace/ext4_collapse_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_release_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_begin.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_drop_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_evict_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_forget.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_insert_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto",
+    "protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto",
+    "protos/perfetto/trace/ftrace/ext4_punch_hole.proto",
+    "protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_readpage.proto",
+    "protos/perfetto/trace/ftrace/ext4_releasepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_remove_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_inode.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_sync_fs.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_all_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_begin.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages_result.proto",
+    "protos/perfetto/trace/ftrace/ext4_zero_range.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
@@ -755,7 +1082,25 @@
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction_received.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_unlock.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_backmerge.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_bounce.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_complete.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_frontmerge.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_queue.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_remap.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_dirty_buffer.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_getrq.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_plug.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_abort.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_complete.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_insert.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/block_rq_issue.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_remap.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_requeue.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_sleeprq.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_split.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_touch_buffer.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_unplug.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_attach_task.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_destroy_root.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_mkdir.pb.h",
@@ -777,10 +1122,101 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_target.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_blocks.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_inode.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_collapse_range.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_release_space.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_reserve_space.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_begin.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_end.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_blocks.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_preallocations.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_drop_inode.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_cache_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_insert_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_remove_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_count.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_evict_inode.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_in_cache.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_load_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_show_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_forget.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_blocks.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_inode.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_insert_range.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_invalidatepage.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_write_end.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_discard.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_free.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_punch_hole.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_readpage.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_releasepage.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_remove_blocks.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_blocks.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_inode.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_enter.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_fs.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_all_free.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_extent.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_enter.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_exit.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_begin.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_end.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepage.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages_result.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_zero_range.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pb.h",
@@ -880,7 +1316,25 @@
     "protos/perfetto/trace/ftrace/binder_transaction.proto",
     "protos/perfetto/trace/ftrace/binder_transaction_received.proto",
     "protos/perfetto/trace/ftrace/binder_unlock.proto",
+    "protos/perfetto/trace/ftrace/block_bio_backmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_bounce.proto",
+    "protos/perfetto/trace/ftrace/block_bio_complete.proto",
+    "protos/perfetto/trace/ftrace/block_bio_frontmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_queue.proto",
+    "protos/perfetto/trace/ftrace/block_bio_remap.proto",
+    "protos/perfetto/trace/ftrace/block_dirty_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_getrq.proto",
+    "protos/perfetto/trace/ftrace/block_plug.proto",
+    "protos/perfetto/trace/ftrace/block_rq_abort.proto",
+    "protos/perfetto/trace/ftrace/block_rq_complete.proto",
+    "protos/perfetto/trace/ftrace/block_rq_insert.proto",
     "protos/perfetto/trace/ftrace/block_rq_issue.proto",
+    "protos/perfetto/trace/ftrace/block_rq_remap.proto",
+    "protos/perfetto/trace/ftrace/block_rq_requeue.proto",
+    "protos/perfetto/trace/ftrace/block_sleeprq.proto",
+    "protos/perfetto/trace/ftrace/block_split.proto",
+    "protos/perfetto/trace/ftrace/block_touch_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_unplug.proto",
     "protos/perfetto/trace/ftrace/cgroup_attach_task.proto",
     "protos/perfetto/trace/ftrace/cgroup_destroy_root.proto",
     "protos/perfetto/trace/ftrace/cgroup_mkdir.proto",
@@ -902,10 +1356,101 @@
     "protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto",
+    "protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto",
+    "protos/perfetto/trace/ftrace/ext4_collapse_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_release_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_begin.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_drop_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_evict_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_forget.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_insert_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto",
+    "protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto",
+    "protos/perfetto/trace/ftrace/ext4_punch_hole.proto",
+    "protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_readpage.proto",
+    "protos/perfetto/trace/ftrace/ext4_releasepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_remove_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_inode.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_sync_fs.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_all_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_begin.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages_result.proto",
+    "protos/perfetto/trace/ftrace/ext4_zero_range.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
@@ -1002,7 +1547,25 @@
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction_received.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_unlock.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_backmerge.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_bounce.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_complete.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_frontmerge.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_queue.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_remap.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_dirty_buffer.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_getrq.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_plug.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_abort.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_complete.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_insert.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/block_rq_issue.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_remap.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_requeue.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_sleeprq.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_split.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_touch_buffer.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_unplug.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_attach_task.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_destroy_root.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_mkdir.pbzero.cc",
@@ -1024,10 +1587,101 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_target.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_blocks.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_inode.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_collapse_range.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_release_space.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_reserve_space.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_begin.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_end.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_blocks.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_preallocations.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_drop_inode.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_cache_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_insert_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_remove_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_count.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_evict_inode.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_in_cache.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_load_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_show_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_forget.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_blocks.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_inode.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_insert_range.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_invalidatepage.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_write_end.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_discard.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_free.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_punch_hole.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_readpage.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_releasepage.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_remove_blocks.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_blocks.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_inode.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_enter.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_fs.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_all_free.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_extent.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_enter.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_exit.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_begin.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_end.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepage.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages_result.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_zero_range.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pbzero.cc",
@@ -1124,7 +1778,25 @@
     "protos/perfetto/trace/ftrace/binder_transaction.proto",
     "protos/perfetto/trace/ftrace/binder_transaction_received.proto",
     "protos/perfetto/trace/ftrace/binder_unlock.proto",
+    "protos/perfetto/trace/ftrace/block_bio_backmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_bounce.proto",
+    "protos/perfetto/trace/ftrace/block_bio_complete.proto",
+    "protos/perfetto/trace/ftrace/block_bio_frontmerge.proto",
+    "protos/perfetto/trace/ftrace/block_bio_queue.proto",
+    "protos/perfetto/trace/ftrace/block_bio_remap.proto",
+    "protos/perfetto/trace/ftrace/block_dirty_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_getrq.proto",
+    "protos/perfetto/trace/ftrace/block_plug.proto",
+    "protos/perfetto/trace/ftrace/block_rq_abort.proto",
+    "protos/perfetto/trace/ftrace/block_rq_complete.proto",
+    "protos/perfetto/trace/ftrace/block_rq_insert.proto",
     "protos/perfetto/trace/ftrace/block_rq_issue.proto",
+    "protos/perfetto/trace/ftrace/block_rq_remap.proto",
+    "protos/perfetto/trace/ftrace/block_rq_requeue.proto",
+    "protos/perfetto/trace/ftrace/block_sleeprq.proto",
+    "protos/perfetto/trace/ftrace/block_split.proto",
+    "protos/perfetto/trace/ftrace/block_touch_buffer.proto",
+    "protos/perfetto/trace/ftrace/block_unplug.proto",
     "protos/perfetto/trace/ftrace/cgroup_attach_task.proto",
     "protos/perfetto/trace/ftrace/cgroup_destroy_root.proto",
     "protos/perfetto/trace/ftrace/cgroup_mkdir.proto",
@@ -1146,10 +1818,101 @@
     "protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto",
     "protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto",
+    "protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_allocate_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto",
+    "protos/perfetto/trace/ftrace/ext4_collapse_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_release_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_begin.proto",
     "protos/perfetto/trace/ftrace/ext4_da_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages.proto",
+    "protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_drop_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_evict_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto",
+    "protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_forget.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_free_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_insert_range.proto",
+    "protos/perfetto/trace/ftrace/ext4_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start.proto",
+    "protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode.proto",
+    "protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto",
+    "protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto",
+    "protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto",
+    "protos/perfetto/trace/ftrace/ext4_punch_hole.proto",
+    "protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto",
+    "protos/perfetto/trace/ftrace/ext4_readpage.proto",
+    "protos/perfetto/trace/ftrace/ext4_releasepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_remove_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_blocks.proto",
+    "protos/perfetto/trace/ftrace/ext4_request_inode.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto",
     "protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_sync_fs.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_all_free.proto",
+    "protos/perfetto/trace/ftrace/ext4_trim_extent.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_truncate_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_enter.proto",
+    "protos/perfetto/trace/ftrace/ext4_unlink_exit.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_begin.proto",
+    "protos/perfetto/trace/ftrace/ext4_write_end.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepage.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages.proto",
+    "protos/perfetto/trace/ftrace/ext4_writepages_result.proto",
+    "protos/perfetto/trace/ftrace/ext4_zero_range.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
@@ -1246,7 +2009,25 @@
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_transaction_received.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/binder_unlock.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_backmerge.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_bounce.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_complete.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_frontmerge.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_queue.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_bio_remap.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_dirty_buffer.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_getrq.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_plug.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_abort.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_complete.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_insert.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/block_rq_issue.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_remap.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_rq_requeue.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_sleeprq.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_split.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_touch_buffer.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/block_unplug.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_attach_task.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_destroy_root.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cgroup_mkdir.pbzero.h",
@@ -1268,10 +2049,101 @@
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_target.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_blocks.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_allocate_inode.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_collapse_range.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_release_space.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_reserve_space.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_begin.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_end.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_blocks.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_discard_preallocations.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_drop_inode.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_cache_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_insert_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_remove_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_count.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_evict_inode.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_in_cache.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_load_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ext_show_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_fallocate_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_forget.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_blocks.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_free_inode.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_insert_range.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_invalidatepage.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_journalled_write_end.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_discard.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_free.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_punch_hole.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_readpage.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_releasepage.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_remove_blocks.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_blocks.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_request_inode.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_enter.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_file_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_sync_fs.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_all_free.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_trim_extent.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_truncate_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_enter.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_unlink_exit.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_begin.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_write_end.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepage.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_writepages_result.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ext4_zero_range.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pbzero.h",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index ae406db..0cacf3f 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -128,4 +128,113 @@
   "workqueue_execute_end.proto",
   "workqueue_execute_start.proto",
   "workqueue_queue_work.proto",
+  "ext4_allocate_blocks.proto",
+  "ext4_allocate_inode.proto",
+  "ext4_alloc_da_blocks.proto",
+  "ext4_begin_ordered_truncate.proto",
+  "ext4_collapse_range.proto",
+  "ext4_da_release_space.proto",
+  "ext4_da_reserve_space.proto",
+  "ext4_da_update_reserve_space.proto",
+  "ext4_da_write_pages.proto",
+  "ext4_da_write_pages_extent.proto",
+  "ext4_direct_IO_enter.proto",
+  "ext4_direct_IO_exit.proto",
+  "ext4_discard_blocks.proto",
+  "ext4_discard_preallocations.proto",
+  "ext4_drop_inode.proto",
+  "ext4_es_cache_extent.proto",
+  "ext4_es_find_delayed_extent_range_enter.proto",
+  "ext4_es_find_delayed_extent_range_exit.proto",
+  "ext4_es_insert_extent.proto",
+  "ext4_es_lookup_extent_enter.proto",
+  "ext4_es_lookup_extent_exit.proto",
+  "ext4_es_remove_extent.proto",
+  "ext4_es_shrink.proto",
+  "ext4_es_shrink_count.proto",
+  "ext4_es_shrink_scan_enter.proto",
+  "ext4_es_shrink_scan_exit.proto",
+  "ext4_evict_inode.proto",
+  "ext4_ext_convert_to_initialized_enter.proto",
+  "ext4_ext_convert_to_initialized_fastpath.proto",
+  "ext4_ext_handle_unwritten_extents.proto",
+  "ext4_ext_in_cache.proto",
+  "ext4_ext_load_extent.proto",
+  "ext4_ext_map_blocks_enter.proto",
+  "ext4_ext_map_blocks_exit.proto",
+  "ext4_ext_put_in_cache.proto",
+  "ext4_ext_remove_space.proto",
+  "ext4_ext_remove_space_done.proto",
+  "ext4_ext_rm_idx.proto",
+  "ext4_ext_rm_leaf.proto",
+  "ext4_ext_show_extent.proto",
+  "ext4_fallocate_enter.proto",
+  "ext4_fallocate_exit.proto",
+  "ext4_find_delalloc_range.proto",
+  "ext4_forget.proto",
+  "ext4_free_blocks.proto",
+  "ext4_free_inode.proto",
+  "ext4_get_implied_cluster_alloc_exit.proto",
+  "ext4_get_reserved_cluster_alloc.proto",
+  "ext4_ind_map_blocks_enter.proto",
+  "ext4_ind_map_blocks_exit.proto",
+  "ext4_insert_range.proto",
+  "ext4_invalidatepage.proto",
+  "ext4_journalled_invalidatepage.proto",
+  "ext4_journalled_write_end.proto",
+  "ext4_journal_start.proto",
+  "ext4_journal_start_reserved.proto",
+  "ext4_load_inode.proto",
+  "ext4_load_inode_bitmap.proto",
+  "ext4_mark_inode_dirty.proto",
+  "ext4_mballoc_alloc.proto",
+  "ext4_mballoc_discard.proto",
+  "ext4_mballoc_free.proto",
+  "ext4_mballoc_prealloc.proto",
+  "ext4_mb_bitmap_load.proto",
+  "ext4_mb_buddy_bitmap_load.proto",
+  "ext4_mb_discard_preallocations.proto",
+  "ext4_mb_new_group_pa.proto",
+  "ext4_mb_new_inode_pa.proto",
+  "ext4_mb_release_group_pa.proto",
+  "ext4_mb_release_inode_pa.proto",
+  "ext4_other_inode_update_time.proto",
+  "ext4_punch_hole.proto",
+  "ext4_read_block_bitmap_load.proto",
+  "ext4_readpage.proto",
+  "ext4_releasepage.proto",
+  "ext4_remove_blocks.proto",
+  "ext4_request_blocks.proto",
+  "ext4_request_inode.proto",
+  "ext4_sync_fs.proto",
+  "ext4_trim_all_free.proto",
+  "ext4_trim_extent.proto",
+  "ext4_truncate_enter.proto",
+  "ext4_truncate_exit.proto",
+  "ext4_unlink_enter.proto",
+  "ext4_unlink_exit.proto",
+  "ext4_write_begin.proto",
+  "ext4_write_end.proto",
+  "ext4_writepage.proto",
+  "ext4_writepages.proto",
+  "ext4_writepages_result.proto",
+  "ext4_zero_range.proto",
+  "block_bio_backmerge.proto",
+  "block_bio_bounce.proto",
+  "block_bio_complete.proto",
+  "block_bio_frontmerge.proto",
+  "block_bio_queue.proto",
+  "block_bio_remap.proto",
+  "block_dirty_buffer.proto",
+  "block_getrq.proto",
+  "block_plug.proto",
+  "block_rq_abort.proto",
+  "block_rq_complete.proto",
+  "block_rq_insert.proto",
+  "block_rq_remap.proto",
+  "block_rq_requeue.proto",
+  "block_sleeprq.proto",
+  "block_split.proto",
+  "block_touch_buffer.proto",
+  "block_unplug.proto",
 ]
diff --git a/protos/perfetto/trace/ftrace/block_bio_backmerge.proto b/protos/perfetto/trace/ftrace/block_bio_backmerge.proto
new file mode 100644
index 0000000..ffc4c26
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_bio_backmerge.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockBioBackmergeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_bio_bounce.proto b/protos/perfetto/trace/ftrace/block_bio_bounce.proto
new file mode 100644
index 0000000..b8c3c54
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_bio_bounce.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockBioBounceFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_bio_complete.proto b/protos/perfetto/trace/ftrace/block_bio_complete.proto
new file mode 100644
index 0000000..3e60f48
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_bio_complete.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockBioCompleteFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional int32 error = 4;
+  optional string rwbs = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_bio_frontmerge.proto b/protos/perfetto/trace/ftrace/block_bio_frontmerge.proto
new file mode 100644
index 0000000..1f065a8
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_bio_frontmerge.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockBioFrontmergeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_bio_queue.proto b/protos/perfetto/trace/ftrace/block_bio_queue.proto
new file mode 100644
index 0000000..c531f14
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_bio_queue.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockBioQueueFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_bio_remap.proto b/protos/perfetto/trace/ftrace/block_bio_remap.proto
new file mode 100644
index 0000000..6f82a22
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_bio_remap.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockBioRemapFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional uint32 old_dev = 4;
+  optional uint64 old_sector = 5;
+  optional string rwbs = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/block_dirty_buffer.proto b/protos/perfetto/trace/ftrace/block_dirty_buffer.proto
new file mode 100644
index 0000000..f59bfe5
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_dirty_buffer.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockDirtyBufferFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint64 size = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/block_getrq.proto b/protos/perfetto/trace/ftrace/block_getrq.proto
new file mode 100644
index 0000000..2b52d52
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_getrq.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockGetrqFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_plug.proto b/protos/perfetto/trace/ftrace/block_plug.proto
new file mode 100644
index 0000000..03c96e3
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_plug.proto
@@ -0,0 +1,11 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockPlugFtraceEvent {
+  optional string comm = 1;
+}
diff --git a/protos/perfetto/trace/ftrace/block_rq_abort.proto b/protos/perfetto/trace/ftrace/block_rq_abort.proto
new file mode 100644
index 0000000..fdaba4d
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_rq_abort.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockRqAbortFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional int32 errors = 4;
+  optional string rwbs = 5;
+  optional string cmd = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/block_rq_complete.proto b/protos/perfetto/trace/ftrace/block_rq_complete.proto
new file mode 100644
index 0000000..98f410b
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_rq_complete.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockRqCompleteFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional int32 errors = 4;
+  optional string rwbs = 5;
+  optional string cmd = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/block_rq_insert.proto b/protos/perfetto/trace/ftrace/block_rq_insert.proto
new file mode 100644
index 0000000..9cb4c8f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_rq_insert.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockRqInsertFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional uint32 bytes = 4;
+  optional string rwbs = 5;
+  optional string comm = 6;
+  optional string cmd = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/block_rq_remap.proto b/protos/perfetto/trace/ftrace/block_rq_remap.proto
new file mode 100644
index 0000000..5491f09
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_rq_remap.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockRqRemapFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional uint32 old_dev = 4;
+  optional uint64 old_sector = 5;
+  optional uint32 nr_bios = 6;
+  optional string rwbs = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/block_rq_requeue.proto b/protos/perfetto/trace/ftrace/block_rq_requeue.proto
new file mode 100644
index 0000000..4a1a9b2
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_rq_requeue.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockRqRequeueFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional int32 errors = 4;
+  optional string rwbs = 5;
+  optional string cmd = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/block_sleeprq.proto b/protos/perfetto/trace/ftrace/block_sleeprq.proto
new file mode 100644
index 0000000..f00c291
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_sleeprq.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockSleeprqFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint32 nr_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_split.proto b/protos/perfetto/trace/ftrace/block_split.proto
new file mode 100644
index 0000000..c00b19b
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_split.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockSplitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint64 new_sector = 3;
+  optional string rwbs = 4;
+  optional string comm = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/block_touch_buffer.proto b/protos/perfetto/trace/ftrace/block_touch_buffer.proto
new file mode 100644
index 0000000..63908cf
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_touch_buffer.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockTouchBufferFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 sector = 2;
+  optional uint64 size = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/block_unplug.proto b/protos/perfetto/trace/ftrace/block_unplug.proto
new file mode 100644
index 0000000..e244c15
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/block_unplug.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message BlockUnplugFtraceEvent {
+  optional int32 nr_rq = 1;
+  optional string comm = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto b/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto
new file mode 100644
index 0000000..633a636
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_alloc_da_blocks.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4AllocDaBlocksFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 data_blocks = 3;
+  optional uint32 meta_blocks = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto b/protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto
new file mode 100644
index 0000000..450ea71
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_allocate_blocks.proto
@@ -0,0 +1,21 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4AllocateBlocksFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 block = 3;
+  optional uint32 len = 4;
+  optional uint32 logical = 5;
+  optional uint32 lleft = 6;
+  optional uint32 lright = 7;
+  optional uint64 goal = 8;
+  optional uint64 pleft = 9;
+  optional uint64 pright = 10;
+  optional uint32 flags = 11;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_allocate_inode.proto b/protos/perfetto/trace/ftrace/ext4_allocate_inode.proto
new file mode 100644
index 0000000..f158a4e
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_allocate_inode.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4AllocateInodeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 dir = 3;
+  optional uint32 mode = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto b/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto
new file mode 100644
index 0000000..9dec91f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4BeginOrderedTruncateFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 new_size = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_collapse_range.proto b/protos/perfetto/trace/ftrace/ext4_collapse_range.proto
new file mode 100644
index 0000000..b8a2068
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_collapse_range.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4CollapseRangeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 offset = 3;
+  optional int64 len = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_da_release_space.proto b/protos/perfetto/trace/ftrace/ext4_da_release_space.proto
new file mode 100644
index 0000000..08bde5e
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_da_release_space.proto
@@ -0,0 +1,18 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DaReleaseSpaceFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 i_blocks = 3;
+  optional int32 freed_blocks = 4;
+  optional int32 reserved_data_blocks = 5;
+  optional int32 reserved_meta_blocks = 6;
+  optional int32 allocated_meta_blocks = 7;
+  optional uint32 mode = 8;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto b/protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto
new file mode 100644
index 0000000..5815f7d
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_da_reserve_space.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DaReserveSpaceFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 i_blocks = 3;
+  optional int32 reserved_data_blocks = 4;
+  optional int32 reserved_meta_blocks = 5;
+  optional uint32 mode = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto b/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto
new file mode 100644
index 0000000..c1c2f15
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_da_update_reserve_space.proto
@@ -0,0 +1,19 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DaUpdateReserveSpaceFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 i_blocks = 3;
+  optional int32 used_blocks = 4;
+  optional int32 reserved_data_blocks = 5;
+  optional int32 reserved_meta_blocks = 6;
+  optional int32 allocated_meta_blocks = 7;
+  optional int32 quota_claim = 8;
+  optional uint32 mode = 9;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_da_write_pages.proto b/protos/perfetto/trace/ftrace/ext4_da_write_pages.proto
new file mode 100644
index 0000000..3c7b96e
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_da_write_pages.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DaWritePagesFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 first_page = 3;
+  optional int64 nr_to_write = 4;
+  optional int32 sync_mode = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto b/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto
new file mode 100644
index 0000000..7a13f9d
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_da_write_pages_extent.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DaWritePagesExtentFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 lblk = 3;
+  optional uint32 len = 4;
+  optional uint32 flags = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto b/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto
new file mode 100644
index 0000000..59688c9
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_direct_IO_enter.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DirectIOEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 pos = 3;
+  optional uint64 len = 4;
+  optional int32 rw = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto b/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto
new file mode 100644
index 0000000..b58f6ca
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_direct_IO_exit.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DirectIOExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 pos = 3;
+  optional uint64 len = 4;
+  optional int32 rw = 5;
+  optional int32 ret = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_discard_blocks.proto b/protos/perfetto/trace/ftrace/ext4_discard_blocks.proto
new file mode 100644
index 0000000..2b3e777
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_discard_blocks.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DiscardBlocksFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 blk = 2;
+  optional uint64 count = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto b/protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto
new file mode 100644
index 0000000..4152887
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_discard_preallocations.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DiscardPreallocationsFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_drop_inode.proto b/protos/perfetto/trace/ftrace/ext4_drop_inode.proto
new file mode 100644
index 0000000..f9785b7
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_drop_inode.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4DropInodeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 drop = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto b/protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto
new file mode 100644
index 0000000..95408f6
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_cache_extent.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsCacheExtentFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint64 pblk = 5;
+  optional uint32 status = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto b/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto
new file mode 100644
index 0000000..fda9034
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsFindDelayedExtentRangeEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto b/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto
new file mode 100644
index 0000000..21630d3
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsFindDelayedExtentRangeExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint64 pblk = 5;
+  optional uint32 status = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto b/protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto
new file mode 100644
index 0000000..c29641c
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_insert_extent.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsInsertExtentFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint64 pblk = 5;
+  optional uint32 status = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto b/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto
new file mode 100644
index 0000000..2f82152
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsLookupExtentEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto b/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto
new file mode 100644
index 0000000..df475fb
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsLookupExtentExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint64 pblk = 5;
+  optional uint32 status = 6;
+  optional int32 found = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto b/protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto
new file mode 100644
index 0000000..7e67019
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_remove_extent.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsRemoveExtentFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 lblk = 3;
+  optional int64 len = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_shrink.proto b/protos/perfetto/trace/ftrace/ext4_es_shrink.proto
new file mode 100644
index 0000000..3ef83a7
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_shrink.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsShrinkFtraceEvent {
+  optional uint32 dev = 1;
+  optional int32 nr_shrunk = 2;
+  optional uint64 scan_time = 3;
+  optional int32 nr_skipped = 4;
+  optional int32 retried = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto b/protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto
new file mode 100644
index 0000000..aac2143
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_shrink_count.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsShrinkCountFtraceEvent {
+  optional uint32 dev = 1;
+  optional int32 nr_to_scan = 2;
+  optional int32 cache_cnt = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto b/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto
new file mode 100644
index 0000000..a98ab0b
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsShrinkScanEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional int32 nr_to_scan = 2;
+  optional int32 cache_cnt = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto b/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto
new file mode 100644
index 0000000..a959b40
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EsShrinkScanExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional int32 nr_shrunk = 2;
+  optional int32 cache_cnt = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_evict_inode.proto b/protos/perfetto/trace/ftrace/ext4_evict_inode.proto
new file mode 100644
index 0000000..763a916
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_evict_inode.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4EvictInodeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 nlink = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto b/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto
new file mode 100644
index 0000000..18d000a
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtConvertToInitializedEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 m_lblk = 3;
+  optional uint32 m_len = 4;
+  optional uint32 u_lblk = 5;
+  optional uint32 u_len = 6;
+  optional uint64 u_pblk = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto b/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto
new file mode 100644
index 0000000..f25d01f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto
@@ -0,0 +1,20 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtConvertToInitializedFastpathFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 m_lblk = 3;
+  optional uint32 m_len = 4;
+  optional uint32 u_lblk = 5;
+  optional uint32 u_len = 6;
+  optional uint64 u_pblk = 7;
+  optional uint32 i_lblk = 8;
+  optional uint32 i_len = 9;
+  optional uint64 i_pblk = 10;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto b/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto
new file mode 100644
index 0000000..6a84188
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto
@@ -0,0 +1,18 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtHandleUnwrittenExtentsFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 flags = 3;
+  optional uint32 lblk = 4;
+  optional uint64 pblk = 5;
+  optional uint32 len = 6;
+  optional uint32 allocated = 7;
+  optional uint64 newblk = 8;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto b/protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto
new file mode 100644
index 0000000..ee61bc6
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_in_cache.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtInCacheFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional int32 ret = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto b/protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto
new file mode 100644
index 0000000..070c6d6
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_load_extent.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtLoadExtentFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 pblk = 3;
+  optional uint32 lblk = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto b/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto
new file mode 100644
index 0000000..f561978
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtMapBlocksEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint32 flags = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto b/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto
new file mode 100644
index 0000000..a0c6a50
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto
@@ -0,0 +1,18 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtMapBlocksExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 flags = 3;
+  optional uint64 pblk = 4;
+  optional uint32 lblk = 5;
+  optional uint32 len = 6;
+  optional uint32 mflags = 7;
+  optional int32 ret = 8;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto b/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto
new file mode 100644
index 0000000..58ad6b0
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_put_in_cache.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtPutInCacheFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint64 start = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto b/protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto
new file mode 100644
index 0000000..93d9bf3
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_remove_space.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtRemoveSpaceFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 start = 3;
+  optional uint32 end = 4;
+  optional int32 depth = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto b/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto
new file mode 100644
index 0000000..da8566f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_remove_space_done.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtRemoveSpaceDoneFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 start = 3;
+  optional uint32 end = 4;
+  optional int32 depth = 5;
+  optional int64 partial = 6;
+  optional uint32 eh_entries = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto b/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto
new file mode 100644
index 0000000..ac81910
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_rm_idx.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtRmIdxFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 pblk = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto b/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto
new file mode 100644
index 0000000..f7b8e69
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_rm_leaf.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtRmLeafFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 partial = 3;
+  optional uint32 start = 4;
+  optional uint32 ee_lblk = 5;
+  optional uint64 ee_pblk = 6;
+  optional int32 ee_len = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto b/protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto
new file mode 100644
index 0000000..37a2dab
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ext_show_extent.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ExtShowExtentFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 pblk = 3;
+  optional uint32 lblk = 4;
+  optional uint32 len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto b/protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto
new file mode 100644
index 0000000..f6f783a
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_fallocate_enter.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4FallocateEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 offset = 3;
+  optional int64 len = 4;
+  optional int32 mode = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto b/protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto
new file mode 100644
index 0000000..a44cbe9
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_fallocate_exit.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4FallocateExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 pos = 3;
+  optional uint32 blocks = 4;
+  optional int32 ret = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto b/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto
new file mode 100644
index 0000000..6a0d2b4
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_find_delalloc_range.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4FindDelallocRangeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 from = 3;
+  optional uint32 to = 4;
+  optional int32 reverse = 5;
+  optional int32 found = 6;
+  optional uint32 found_blk = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_forget.proto b/protos/perfetto/trace/ftrace/ext4_forget.proto
new file mode 100644
index 0000000..8a8acc8
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_forget.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ForgetFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 block = 3;
+  optional int32 is_metadata = 4;
+  optional uint32 mode = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_free_blocks.proto b/protos/perfetto/trace/ftrace/ext4_free_blocks.proto
new file mode 100644
index 0000000..9e652c4
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_free_blocks.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4FreeBlocksFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 block = 3;
+  optional uint64 count = 4;
+  optional int32 flags = 5;
+  optional uint32 mode = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_free_inode.proto b/protos/perfetto/trace/ftrace/ext4_free_inode.proto
new file mode 100644
index 0000000..c1d240f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_free_inode.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4FreeInodeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 uid = 3;
+  optional uint32 gid = 4;
+  optional uint64 blocks = 5;
+  optional uint32 mode = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto b/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto
new file mode 100644
index 0000000..b500d1f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4GetImpliedClusterAllocExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint32 flags = 2;
+  optional uint32 lblk = 3;
+  optional uint64 pblk = 4;
+  optional uint32 len = 5;
+  optional int32 ret = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto b/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto
new file mode 100644
index 0000000..cb9cdfc
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4GetReservedClusterAllocFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto b/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto
new file mode 100644
index 0000000..cfa6304
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4IndMapBlocksEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 lblk = 3;
+  optional uint32 len = 4;
+  optional uint32 flags = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto b/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto
new file mode 100644
index 0000000..bd368eb
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto
@@ -0,0 +1,18 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4IndMapBlocksExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 flags = 3;
+  optional uint64 pblk = 4;
+  optional uint32 lblk = 5;
+  optional uint32 len = 6;
+  optional uint32 mflags = 7;
+  optional int32 ret = 8;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_insert_range.proto b/protos/perfetto/trace/ftrace/ext4_insert_range.proto
new file mode 100644
index 0000000..4010cf0
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_insert_range.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4InsertRangeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 offset = 3;
+  optional int64 len = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_invalidatepage.proto b/protos/perfetto/trace/ftrace/ext4_invalidatepage.proto
new file mode 100644
index 0000000..951ff05
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_invalidatepage.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4InvalidatepageFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 index = 3;
+  optional uint32 offset = 4;
+  optional uint32 length = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_journal_start.proto b/protos/perfetto/trace/ftrace/ext4_journal_start.proto
new file mode 100644
index 0000000..f361673
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_journal_start.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4JournalStartFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ip = 2;
+  optional int32 blocks = 3;
+  optional int32 rsv_blocks = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto b/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto
new file mode 100644
index 0000000..61d3cc7
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_journal_start_reserved.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4JournalStartReservedFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ip = 2;
+  optional int32 blocks = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto b/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto
new file mode 100644
index 0000000..4503ec2
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4JournalledInvalidatepageFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 index = 3;
+  optional uint32 offset = 4;
+  optional uint32 length = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto b/protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto
new file mode 100644
index 0000000..8cebed4
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_journalled_write_end.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4JournalledWriteEndFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 pos = 3;
+  optional uint32 len = 4;
+  optional uint32 copied = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_load_inode.proto b/protos/perfetto/trace/ftrace/ext4_load_inode.proto
new file mode 100644
index 0000000..3bfa913
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_load_inode.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4LoadInodeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto b/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto
new file mode 100644
index 0000000..41082d8
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_load_inode_bitmap.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4LoadInodeBitmapFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint32 group = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto b/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto
new file mode 100644
index 0000000..e291d9f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mark_inode_dirty.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MarkInodeDirtyFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 ip = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto b/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto
new file mode 100644
index 0000000..471b417
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_bitmap_load.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbBitmapLoadFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint32 group = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto b/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto
new file mode 100644
index 0000000..4f4286b
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbBuddyBitmapLoadFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint32 group = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto b/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto
new file mode 100644
index 0000000..1ff579a
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbDiscardPreallocationsFtraceEvent {
+  optional uint32 dev = 1;
+  optional int32 needed = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto b/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto
new file mode 100644
index 0000000..fec3b6b
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_new_group_pa.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbNewGroupPaFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 pa_pstart = 3;
+  optional uint64 pa_lstart = 4;
+  optional uint32 pa_len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto b/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto
new file mode 100644
index 0000000..36dae58
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbNewInodePaFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 pa_pstart = 3;
+  optional uint64 pa_lstart = 4;
+  optional uint32 pa_len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto b/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto
new file mode 100644
index 0000000..d720fdf
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_release_group_pa.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbReleaseGroupPaFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 pa_pstart = 2;
+  optional uint32 pa_len = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto b/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto
new file mode 100644
index 0000000..7601e49
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MbReleaseInodePaFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 block = 3;
+  optional uint32 count = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto b/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto
new file mode 100644
index 0000000..6218492
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mballoc_alloc.proto
@@ -0,0 +1,30 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MballocAllocFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 orig_logical = 3;
+  optional int32 orig_start = 4;
+  optional uint32 orig_group = 5;
+  optional int32 orig_len = 6;
+  optional uint32 goal_logical = 7;
+  optional int32 goal_start = 8;
+  optional uint32 goal_group = 9;
+  optional int32 goal_len = 10;
+  optional uint32 result_logical = 11;
+  optional int32 result_start = 12;
+  optional uint32 result_group = 13;
+  optional int32 result_len = 14;
+  optional uint32 found = 15;
+  optional uint32 groups = 16;
+  optional uint32 buddy = 17;
+  optional uint32 flags = 18;
+  optional uint32 tail = 19;
+  optional uint32 cr = 20;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto b/protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto
new file mode 100644
index 0000000..e299416
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mballoc_discard.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MballocDiscardFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 result_start = 3;
+  optional uint32 result_group = 4;
+  optional int32 result_len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mballoc_free.proto b/protos/perfetto/trace/ftrace/ext4_mballoc_free.proto
new file mode 100644
index 0000000..4ce2184
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mballoc_free.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MballocFreeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 result_start = 3;
+  optional uint32 result_group = 4;
+  optional int32 result_len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto b/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto
new file mode 100644
index 0000000..310b940
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_mballoc_prealloc.proto
@@ -0,0 +1,20 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4MballocPreallocFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 orig_logical = 3;
+  optional int32 orig_start = 4;
+  optional uint32 orig_group = 5;
+  optional int32 orig_len = 6;
+  optional uint32 result_logical = 7;
+  optional int32 result_start = 8;
+  optional uint32 result_group = 9;
+  optional int32 result_len = 10;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto b/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto
new file mode 100644
index 0000000..ec50a8d
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_other_inode_update_time.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4OtherInodeUpdateTimeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 orig_ino = 3;
+  optional uint32 uid = 4;
+  optional uint32 gid = 5;
+  optional uint32 mode = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_punch_hole.proto b/protos/perfetto/trace/ftrace/ext4_punch_hole.proto
new file mode 100644
index 0000000..9fe0b19
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_punch_hole.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4PunchHoleFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 offset = 3;
+  optional int64 len = 4;
+  optional int32 mode = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto b/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto
new file mode 100644
index 0000000..f31b196
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ReadBlockBitmapLoadFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint32 group = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_readpage.proto b/protos/perfetto/trace/ftrace/ext4_readpage.proto
new file mode 100644
index 0000000..2a80964
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_readpage.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ReadpageFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 index = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_releasepage.proto b/protos/perfetto/trace/ftrace/ext4_releasepage.proto
new file mode 100644
index 0000000..63039b9
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_releasepage.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ReleasepageFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 index = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_remove_blocks.proto b/protos/perfetto/trace/ftrace/ext4_remove_blocks.proto
new file mode 100644
index 0000000..3eef63f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_remove_blocks.proto
@@ -0,0 +1,18 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4RemoveBlocksFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 from = 3;
+  optional uint32 to = 4;
+  optional int64 partial = 5;
+  optional uint64 ee_pblk = 6;
+  optional uint32 ee_lblk = 7;
+  optional uint32 ee_len = 8;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_request_blocks.proto b/protos/perfetto/trace/ftrace/ext4_request_blocks.proto
new file mode 100644
index 0000000..19044d8
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_request_blocks.proto
@@ -0,0 +1,20 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4RequestBlocksFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint32 len = 3;
+  optional uint32 logical = 4;
+  optional uint32 lleft = 5;
+  optional uint32 lright = 6;
+  optional uint64 goal = 7;
+  optional uint64 pleft = 8;
+  optional uint64 pright = 9;
+  optional uint32 flags = 10;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_request_inode.proto b/protos/perfetto/trace/ftrace/ext4_request_inode.proto
new file mode 100644
index 0000000..5bf9b35
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_request_inode.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4RequestInodeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 dir = 2;
+  optional uint32 mode = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_sync_fs.proto b/protos/perfetto/trace/ftrace/ext4_sync_fs.proto
new file mode 100644
index 0000000..be5ce76
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_sync_fs.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4SyncFsFtraceEvent {
+  optional uint32 dev = 1;
+  optional int32 wait = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_trim_all_free.proto b/protos/perfetto/trace/ftrace/ext4_trim_all_free.proto
new file mode 100644
index 0000000..4d3ee82
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_trim_all_free.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4TrimAllFreeFtraceEvent {
+  optional int32 dev_major = 1;
+  optional int32 dev_minor = 2;
+  optional uint32 group = 3;
+  optional int32 start = 4;
+  optional int32 len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_trim_extent.proto b/protos/perfetto/trace/ftrace/ext4_trim_extent.proto
new file mode 100644
index 0000000..ba6040a
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_trim_extent.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4TrimExtentFtraceEvent {
+  optional int32 dev_major = 1;
+  optional int32 dev_minor = 2;
+  optional uint32 group = 3;
+  optional int32 start = 4;
+  optional int32 len = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_truncate_enter.proto b/protos/perfetto/trace/ftrace/ext4_truncate_enter.proto
new file mode 100644
index 0000000..305aeac
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_truncate_enter.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4TruncateEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 blocks = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_truncate_exit.proto b/protos/perfetto/trace/ftrace/ext4_truncate_exit.proto
new file mode 100644
index 0000000..37c7ede
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_truncate_exit.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4TruncateExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 blocks = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_unlink_enter.proto b/protos/perfetto/trace/ftrace/ext4_unlink_enter.proto
new file mode 100644
index 0000000..408db09
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_unlink_enter.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4UnlinkEnterFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 parent = 3;
+  optional int64 size = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_unlink_exit.proto b/protos/perfetto/trace/ftrace/ext4_unlink_exit.proto
new file mode 100644
index 0000000..e9538aa
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_unlink_exit.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4UnlinkExitFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 ret = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_write_begin.proto b/protos/perfetto/trace/ftrace/ext4_write_begin.proto
new file mode 100644
index 0000000..1a63dd4
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_write_begin.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4WriteBeginFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 pos = 3;
+  optional uint32 len = 4;
+  optional uint32 flags = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_write_end.proto b/protos/perfetto/trace/ftrace/ext4_write_end.proto
new file mode 100644
index 0000000..b34805f
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_write_end.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4WriteEndFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 pos = 3;
+  optional uint32 len = 4;
+  optional uint32 copied = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_writepage.proto b/protos/perfetto/trace/ftrace/ext4_writepage.proto
new file mode 100644
index 0000000..ae79ba5
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_writepage.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4WritepageFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional uint64 index = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_writepages.proto b/protos/perfetto/trace/ftrace/ext4_writepages.proto
new file mode 100644
index 0000000..870ed70
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_writepages.proto
@@ -0,0 +1,20 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4WritepagesFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 nr_to_write = 3;
+  optional int64 pages_skipped = 4;
+  optional int64 range_start = 5;
+  optional int64 range_end = 6;
+  optional uint64 writeback_index = 7;
+  optional int32 sync_mode = 8;
+  optional uint32 for_kupdate = 9;
+  optional uint32 range_cyclic = 10;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_writepages_result.proto b/protos/perfetto/trace/ftrace/ext4_writepages_result.proto
new file mode 100644
index 0000000..dfefa79
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_writepages_result.proto
@@ -0,0 +1,17 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4WritepagesResultFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int32 ret = 3;
+  optional int32 pages_written = 4;
+  optional int64 pages_skipped = 5;
+  optional uint64 writeback_index = 6;
+  optional int32 sync_mode = 7;
+}
diff --git a/protos/perfetto/trace/ftrace/ext4_zero_range.proto b/protos/perfetto/trace/ftrace/ext4_zero_range.proto
new file mode 100644
index 0000000..904b7cb
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/ext4_zero_range.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message Ext4ZeroRangeFtraceEvent {
+  optional uint32 dev = 1;
+  optional uint64 ino = 2;
+  optional int64 offset = 3;
+  optional int64 len = 4;
+  optional int32 mode = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index b11748a..2a43db4 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -129,6 +129,115 @@
 import "perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto";
 import "perfetto/trace/ftrace/suspend_resume.proto";
 import "perfetto/trace/ftrace/sched_wakeup_new.proto";
+import "perfetto/trace/ftrace/ext4_allocate_blocks.proto";
+import "perfetto/trace/ftrace/ext4_allocate_inode.proto";
+import "perfetto/trace/ftrace/ext4_alloc_da_blocks.proto";
+import "perfetto/trace/ftrace/ext4_begin_ordered_truncate.proto";
+import "perfetto/trace/ftrace/ext4_collapse_range.proto";
+import "perfetto/trace/ftrace/ext4_da_release_space.proto";
+import "perfetto/trace/ftrace/ext4_da_reserve_space.proto";
+import "perfetto/trace/ftrace/ext4_da_update_reserve_space.proto";
+import "perfetto/trace/ftrace/ext4_da_write_pages.proto";
+import "perfetto/trace/ftrace/ext4_da_write_pages_extent.proto";
+import "perfetto/trace/ftrace/ext4_direct_IO_enter.proto";
+import "perfetto/trace/ftrace/ext4_direct_IO_exit.proto";
+import "perfetto/trace/ftrace/ext4_discard_blocks.proto";
+import "perfetto/trace/ftrace/ext4_discard_preallocations.proto";
+import "perfetto/trace/ftrace/ext4_drop_inode.proto";
+import "perfetto/trace/ftrace/ext4_es_cache_extent.proto";
+import "perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_enter.proto";
+import "perfetto/trace/ftrace/ext4_es_find_delayed_extent_range_exit.proto";
+import "perfetto/trace/ftrace/ext4_es_insert_extent.proto";
+import "perfetto/trace/ftrace/ext4_es_lookup_extent_enter.proto";
+import "perfetto/trace/ftrace/ext4_es_lookup_extent_exit.proto";
+import "perfetto/trace/ftrace/ext4_es_remove_extent.proto";
+import "perfetto/trace/ftrace/ext4_es_shrink.proto";
+import "perfetto/trace/ftrace/ext4_es_shrink_count.proto";
+import "perfetto/trace/ftrace/ext4_es_shrink_scan_enter.proto";
+import "perfetto/trace/ftrace/ext4_es_shrink_scan_exit.proto";
+import "perfetto/trace/ftrace/ext4_evict_inode.proto";
+import "perfetto/trace/ftrace/ext4_ext_convert_to_initialized_enter.proto";
+import "perfetto/trace/ftrace/ext4_ext_convert_to_initialized_fastpath.proto";
+import "perfetto/trace/ftrace/ext4_ext_handle_unwritten_extents.proto";
+import "perfetto/trace/ftrace/ext4_ext_in_cache.proto";
+import "perfetto/trace/ftrace/ext4_ext_load_extent.proto";
+import "perfetto/trace/ftrace/ext4_ext_map_blocks_enter.proto";
+import "perfetto/trace/ftrace/ext4_ext_map_blocks_exit.proto";
+import "perfetto/trace/ftrace/ext4_ext_put_in_cache.proto";
+import "perfetto/trace/ftrace/ext4_ext_remove_space.proto";
+import "perfetto/trace/ftrace/ext4_ext_remove_space_done.proto";
+import "perfetto/trace/ftrace/ext4_ext_rm_idx.proto";
+import "perfetto/trace/ftrace/ext4_ext_rm_leaf.proto";
+import "perfetto/trace/ftrace/ext4_ext_show_extent.proto";
+import "perfetto/trace/ftrace/ext4_fallocate_enter.proto";
+import "perfetto/trace/ftrace/ext4_fallocate_exit.proto";
+import "perfetto/trace/ftrace/ext4_find_delalloc_range.proto";
+import "perfetto/trace/ftrace/ext4_forget.proto";
+import "perfetto/trace/ftrace/ext4_free_blocks.proto";
+import "perfetto/trace/ftrace/ext4_free_inode.proto";
+import "perfetto/trace/ftrace/ext4_get_implied_cluster_alloc_exit.proto";
+import "perfetto/trace/ftrace/ext4_get_reserved_cluster_alloc.proto";
+import "perfetto/trace/ftrace/ext4_ind_map_blocks_enter.proto";
+import "perfetto/trace/ftrace/ext4_ind_map_blocks_exit.proto";
+import "perfetto/trace/ftrace/ext4_insert_range.proto";
+import "perfetto/trace/ftrace/ext4_invalidatepage.proto";
+import "perfetto/trace/ftrace/ext4_journalled_invalidatepage.proto";
+import "perfetto/trace/ftrace/ext4_journalled_write_end.proto";
+import "perfetto/trace/ftrace/ext4_journal_start.proto";
+import "perfetto/trace/ftrace/ext4_journal_start_reserved.proto";
+import "perfetto/trace/ftrace/ext4_load_inode.proto";
+import "perfetto/trace/ftrace/ext4_load_inode_bitmap.proto";
+import "perfetto/trace/ftrace/ext4_mark_inode_dirty.proto";
+import "perfetto/trace/ftrace/ext4_mballoc_alloc.proto";
+import "perfetto/trace/ftrace/ext4_mballoc_discard.proto";
+import "perfetto/trace/ftrace/ext4_mballoc_free.proto";
+import "perfetto/trace/ftrace/ext4_mballoc_prealloc.proto";
+import "perfetto/trace/ftrace/ext4_mb_bitmap_load.proto";
+import "perfetto/trace/ftrace/ext4_mb_buddy_bitmap_load.proto";
+import "perfetto/trace/ftrace/ext4_mb_discard_preallocations.proto";
+import "perfetto/trace/ftrace/ext4_mb_new_group_pa.proto";
+import "perfetto/trace/ftrace/ext4_mb_new_inode_pa.proto";
+import "perfetto/trace/ftrace/ext4_mb_release_group_pa.proto";
+import "perfetto/trace/ftrace/ext4_mb_release_inode_pa.proto";
+import "perfetto/trace/ftrace/ext4_other_inode_update_time.proto";
+import "perfetto/trace/ftrace/ext4_punch_hole.proto";
+import "perfetto/trace/ftrace/ext4_read_block_bitmap_load.proto";
+import "perfetto/trace/ftrace/ext4_readpage.proto";
+import "perfetto/trace/ftrace/ext4_releasepage.proto";
+import "perfetto/trace/ftrace/ext4_remove_blocks.proto";
+import "perfetto/trace/ftrace/ext4_request_blocks.proto";
+import "perfetto/trace/ftrace/ext4_request_inode.proto";
+import "perfetto/trace/ftrace/ext4_sync_fs.proto";
+import "perfetto/trace/ftrace/ext4_trim_all_free.proto";
+import "perfetto/trace/ftrace/ext4_trim_extent.proto";
+import "perfetto/trace/ftrace/ext4_truncate_enter.proto";
+import "perfetto/trace/ftrace/ext4_truncate_exit.proto";
+import "perfetto/trace/ftrace/ext4_unlink_enter.proto";
+import "perfetto/trace/ftrace/ext4_unlink_exit.proto";
+import "perfetto/trace/ftrace/ext4_write_begin.proto";
+import "perfetto/trace/ftrace/ext4_write_end.proto";
+import "perfetto/trace/ftrace/ext4_writepage.proto";
+import "perfetto/trace/ftrace/ext4_writepages.proto";
+import "perfetto/trace/ftrace/ext4_writepages_result.proto";
+import "perfetto/trace/ftrace/ext4_zero_range.proto";
+import "perfetto/trace/ftrace/block_bio_backmerge.proto";
+import "perfetto/trace/ftrace/block_bio_bounce.proto";
+import "perfetto/trace/ftrace/block_bio_complete.proto";
+import "perfetto/trace/ftrace/block_bio_frontmerge.proto";
+import "perfetto/trace/ftrace/block_bio_queue.proto";
+import "perfetto/trace/ftrace/block_bio_remap.proto";
+import "perfetto/trace/ftrace/block_dirty_buffer.proto";
+import "perfetto/trace/ftrace/block_getrq.proto";
+import "perfetto/trace/ftrace/block_plug.proto";
+import "perfetto/trace/ftrace/block_rq_abort.proto";
+import "perfetto/trace/ftrace/block_rq_complete.proto";
+import "perfetto/trace/ftrace/block_rq_insert.proto";
+import "perfetto/trace/ftrace/block_rq_remap.proto";
+import "perfetto/trace/ftrace/block_rq_requeue.proto";
+import "perfetto/trace/ftrace/block_sleeprq.proto";
+import "perfetto/trace/ftrace/block_split.proto";
+import "perfetto/trace/ftrace/block_touch_buffer.proto";
+import "perfetto/trace/ftrace/block_unplug.proto";
 
 package perfetto.protos;
 
@@ -258,5 +367,122 @@
     MmCompactionWakeupKcompactdFtraceEvent mm_compaction_wakeup_kcompactd = 112;
     SuspendResumeFtraceEvent suspend_resume = 113;
     SchedWakeupNewFtraceEvent sched_wakeup_new = 114;
+    BlockBioBackmergeFtraceEvent block_bio_backmerge = 115;
+    BlockBioBounceFtraceEvent block_bio_bounce = 116;
+    BlockBioCompleteFtraceEvent block_bio_complete = 117;
+    BlockBioFrontmergeFtraceEvent block_bio_frontmerge = 118;
+    BlockBioQueueFtraceEvent block_bio_queue = 119;
+    BlockBioRemapFtraceEvent block_bio_remap = 120;
+    BlockDirtyBufferFtraceEvent block_dirty_buffer = 121;
+    BlockGetrqFtraceEvent block_getrq = 122;
+    BlockPlugFtraceEvent block_plug = 123;
+    BlockRqAbortFtraceEvent block_rq_abort = 124;
+    BlockRqCompleteFtraceEvent block_rq_complete = 125;
+    BlockRqInsertFtraceEvent block_rq_insert = 126;
+    BlockRqRemapFtraceEvent block_rq_remap = 128;
+    BlockRqRequeueFtraceEvent block_rq_requeue = 129;
+    BlockSleeprqFtraceEvent block_sleeprq = 130;
+    BlockSplitFtraceEvent block_split = 131;
+    BlockTouchBufferFtraceEvent block_touch_buffer = 132;
+    BlockUnplugFtraceEvent block_unplug = 133;
+    Ext4AllocDaBlocksFtraceEvent ext4_alloc_da_blocks = 134;
+    Ext4AllocateBlocksFtraceEvent ext4_allocate_blocks = 135;
+    Ext4AllocateInodeFtraceEvent ext4_allocate_inode = 136;
+    Ext4BeginOrderedTruncateFtraceEvent ext4_begin_ordered_truncate = 137;
+    Ext4CollapseRangeFtraceEvent ext4_collapse_range = 138;
+    Ext4DaReleaseSpaceFtraceEvent ext4_da_release_space = 139;
+    Ext4DaReserveSpaceFtraceEvent ext4_da_reserve_space = 140;
+    Ext4DaUpdateReserveSpaceFtraceEvent ext4_da_update_reserve_space = 141;
+    Ext4DaWritePagesFtraceEvent ext4_da_write_pages = 142;
+    Ext4DaWritePagesExtentFtraceEvent ext4_da_write_pages_extent = 143;
+    Ext4DirectIOEnterFtraceEvent ext4_direct_IO_enter = 144;
+    Ext4DirectIOExitFtraceEvent ext4_direct_IO_exit = 145;
+    Ext4DiscardBlocksFtraceEvent ext4_discard_blocks = 146;
+    Ext4DiscardPreallocationsFtraceEvent ext4_discard_preallocations = 147;
+    Ext4DropInodeFtraceEvent ext4_drop_inode = 148;
+    Ext4EsCacheExtentFtraceEvent ext4_es_cache_extent = 149;
+    Ext4EsFindDelayedExtentRangeEnterFtraceEvent
+        ext4_es_find_delayed_extent_range_enter = 150;
+    Ext4EsFindDelayedExtentRangeExitFtraceEvent
+        ext4_es_find_delayed_extent_range_exit = 151;
+    Ext4EsInsertExtentFtraceEvent ext4_es_insert_extent = 152;
+    Ext4EsLookupExtentEnterFtraceEvent ext4_es_lookup_extent_enter = 153;
+    Ext4EsLookupExtentExitFtraceEvent ext4_es_lookup_extent_exit = 154;
+    Ext4EsRemoveExtentFtraceEvent ext4_es_remove_extent = 155;
+    Ext4EsShrinkFtraceEvent ext4_es_shrink = 156;
+    Ext4EsShrinkCountFtraceEvent ext4_es_shrink_count = 157;
+    Ext4EsShrinkScanEnterFtraceEvent ext4_es_shrink_scan_enter = 158;
+    Ext4EsShrinkScanExitFtraceEvent ext4_es_shrink_scan_exit = 159;
+    Ext4EvictInodeFtraceEvent ext4_evict_inode = 160;
+    Ext4ExtConvertToInitializedEnterFtraceEvent
+        ext4_ext_convert_to_initialized_enter = 161;
+    Ext4ExtConvertToInitializedFastpathFtraceEvent
+        ext4_ext_convert_to_initialized_fastpath = 162;
+    Ext4ExtHandleUnwrittenExtentsFtraceEvent ext4_ext_handle_unwritten_extents =
+        163;
+    Ext4ExtInCacheFtraceEvent ext4_ext_in_cache = 164;
+    Ext4ExtLoadExtentFtraceEvent ext4_ext_load_extent = 165;
+    Ext4ExtMapBlocksEnterFtraceEvent ext4_ext_map_blocks_enter = 166;
+    Ext4ExtMapBlocksExitFtraceEvent ext4_ext_map_blocks_exit = 167;
+    Ext4ExtPutInCacheFtraceEvent ext4_ext_put_in_cache = 168;
+    Ext4ExtRemoveSpaceFtraceEvent ext4_ext_remove_space = 169;
+    Ext4ExtRemoveSpaceDoneFtraceEvent ext4_ext_remove_space_done = 170;
+    Ext4ExtRmIdxFtraceEvent ext4_ext_rm_idx = 171;
+    Ext4ExtRmLeafFtraceEvent ext4_ext_rm_leaf = 172;
+    Ext4ExtShowExtentFtraceEvent ext4_ext_show_extent = 173;
+    Ext4FallocateEnterFtraceEvent ext4_fallocate_enter = 174;
+    Ext4FallocateExitFtraceEvent ext4_fallocate_exit = 175;
+    Ext4FindDelallocRangeFtraceEvent ext4_find_delalloc_range = 176;
+    Ext4ForgetFtraceEvent ext4_forget = 177;
+    Ext4FreeBlocksFtraceEvent ext4_free_blocks = 178;
+    Ext4FreeInodeFtraceEvent ext4_free_inode = 179;
+    Ext4GetImpliedClusterAllocExitFtraceEvent
+        ext4_get_implied_cluster_alloc_exit = 180;
+    Ext4GetReservedClusterAllocFtraceEvent ext4_get_reserved_cluster_alloc =
+        181;
+    Ext4IndMapBlocksEnterFtraceEvent ext4_ind_map_blocks_enter = 182;
+    Ext4IndMapBlocksExitFtraceEvent ext4_ind_map_blocks_exit = 183;
+    Ext4InsertRangeFtraceEvent ext4_insert_range = 184;
+    Ext4InvalidatepageFtraceEvent ext4_invalidatepage = 185;
+    Ext4JournalStartFtraceEvent ext4_journal_start = 186;
+    Ext4JournalStartReservedFtraceEvent ext4_journal_start_reserved = 187;
+    Ext4JournalledInvalidatepageFtraceEvent ext4_journalled_invalidatepage =
+        188;
+    Ext4JournalledWriteEndFtraceEvent ext4_journalled_write_end = 189;
+    Ext4LoadInodeFtraceEvent ext4_load_inode = 190;
+    Ext4LoadInodeBitmapFtraceEvent ext4_load_inode_bitmap = 191;
+    Ext4MarkInodeDirtyFtraceEvent ext4_mark_inode_dirty = 192;
+    Ext4MbBitmapLoadFtraceEvent ext4_mb_bitmap_load = 193;
+    Ext4MbBuddyBitmapLoadFtraceEvent ext4_mb_buddy_bitmap_load = 194;
+    Ext4MbDiscardPreallocationsFtraceEvent ext4_mb_discard_preallocations = 195;
+    Ext4MbNewGroupPaFtraceEvent ext4_mb_new_group_pa = 196;
+    Ext4MbNewInodePaFtraceEvent ext4_mb_new_inode_pa = 197;
+    Ext4MbReleaseGroupPaFtraceEvent ext4_mb_release_group_pa = 198;
+    Ext4MbReleaseInodePaFtraceEvent ext4_mb_release_inode_pa = 199;
+    Ext4MballocAllocFtraceEvent ext4_mballoc_alloc = 200;
+    Ext4MballocDiscardFtraceEvent ext4_mballoc_discard = 201;
+    Ext4MballocFreeFtraceEvent ext4_mballoc_free = 202;
+    Ext4MballocPreallocFtraceEvent ext4_mballoc_prealloc = 203;
+    Ext4OtherInodeUpdateTimeFtraceEvent ext4_other_inode_update_time = 204;
+    Ext4PunchHoleFtraceEvent ext4_punch_hole = 205;
+    Ext4ReadBlockBitmapLoadFtraceEvent ext4_read_block_bitmap_load = 206;
+    Ext4ReadpageFtraceEvent ext4_readpage = 207;
+    Ext4ReleasepageFtraceEvent ext4_releasepage = 208;
+    Ext4RemoveBlocksFtraceEvent ext4_remove_blocks = 209;
+    Ext4RequestBlocksFtraceEvent ext4_request_blocks = 210;
+    Ext4RequestInodeFtraceEvent ext4_request_inode = 211;
+    Ext4SyncFsFtraceEvent ext4_sync_fs = 212;
+    Ext4TrimAllFreeFtraceEvent ext4_trim_all_free = 213;
+    Ext4TrimExtentFtraceEvent ext4_trim_extent = 214;
+    Ext4TruncateEnterFtraceEvent ext4_truncate_enter = 215;
+    Ext4TruncateExitFtraceEvent ext4_truncate_exit = 216;
+    Ext4UnlinkEnterFtraceEvent ext4_unlink_enter = 217;
+    Ext4UnlinkExitFtraceEvent ext4_unlink_exit = 218;
+    Ext4WriteBeginFtraceEvent ext4_write_begin = 219;
+    Ext4WriteEndFtraceEvent ext4_write_end = 230;
+    Ext4WritepageFtraceEvent ext4_writepage = 231;
+    Ext4WritepagesFtraceEvent ext4_writepages = 232;
+    Ext4WritepagesResultFtraceEvent ext4_writepages_result = 233;
+    Ext4ZeroRangeFtraceEvent ext4_zero_range = 234;
   }
 }
diff --git a/src/ftrace_reader/event_info.cc b/src/ftrace_reader/event_info.cc
index a4c3933..913db2b 100644
--- a/src/ftrace_reader/event_info.cc
+++ b/src/ftrace_reader/event_info.cc
@@ -76,6 +76,161 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "block_bio_backmerge";
+    event->group = "block";
+    event->proto_field_id = 115;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_bio_bounce";
+    event->group = "block";
+    event->proto_field_id = 116;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_bio_complete";
+    event->group = "block";
+    event->proto_field_id = 117;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("error", 4, kProtoInt32));
+    event->fields.push_back(MakeField("rwbs", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_bio_frontmerge";
+    event->group = "block";
+    event->proto_field_id = 118;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_bio_queue";
+    event->group = "block";
+    event->proto_field_id = 119;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_bio_remap";
+    event->group = "block";
+    event->proto_field_id = 120;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("old_dev", 4, kProtoUint32));
+    event->fields.push_back(MakeField("old_sector", 5, kProtoUint64));
+    event->fields.push_back(MakeField("rwbs", 6, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_dirty_buffer";
+    event->group = "block";
+    event->proto_field_id = 121;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("size", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_getrq";
+    event->group = "block";
+    event->proto_field_id = 122;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_plug";
+    event->group = "block";
+    event->proto_field_id = 123;
+    event->fields.push_back(MakeField("comm", 1, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_rq_abort";
+    event->group = "block";
+    event->proto_field_id = 124;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("errors", 4, kProtoInt32));
+    event->fields.push_back(MakeField("rwbs", 5, kProtoString));
+    event->fields.push_back(MakeField("cmd", 6, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_rq_complete";
+    event->group = "block";
+    event->proto_field_id = 125;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("errors", 4, kProtoInt32));
+    event->fields.push_back(MakeField("rwbs", 5, kProtoString));
+    event->fields.push_back(MakeField("cmd", 6, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_rq_insert";
+    event->group = "block";
+    event->proto_field_id = 126;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("bytes", 4, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 5, kProtoString));
+    event->fields.push_back(MakeField("comm", 6, kProtoString));
+    event->fields.push_back(MakeField("cmd", 7, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "block_rq_issue";
     event->group = "block";
     event->proto_field_id = 45;
@@ -91,6 +246,82 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "block_rq_remap";
+    event->group = "block";
+    event->proto_field_id = 128;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("old_dev", 4, kProtoUint32));
+    event->fields.push_back(MakeField("old_sector", 5, kProtoUint64));
+    event->fields.push_back(MakeField("nr_bios", 6, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 7, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_rq_requeue";
+    event->group = "block";
+    event->proto_field_id = 129;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("errors", 4, kProtoInt32));
+    event->fields.push_back(MakeField("rwbs", 5, kProtoString));
+    event->fields.push_back(MakeField("cmd", 6, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_sleeprq";
+    event->group = "block";
+    event->proto_field_id = 130;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_split";
+    event->group = "block";
+    event->proto_field_id = 131;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("new_sector", 3, kProtoUint64));
+    event->fields.push_back(MakeField("rwbs", 4, kProtoString));
+    event->fields.push_back(MakeField("comm", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_touch_buffer";
+    event->group = "block";
+    event->proto_field_id = 132;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("size", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "block_unplug";
+    event->group = "block";
+    event->proto_field_id = 133;
+    event->fields.push_back(MakeField("nr_rq", 1, kProtoInt32));
+    event->fields.push_back(MakeField("comm", 2, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "cgroup_attach_task";
     event->group = "cgroup";
     event->proto_field_id = 67;
@@ -431,6 +662,119 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "ext4_alloc_da_blocks";
+    event->group = "ext4";
+    event->proto_field_id = 134;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("data_blocks", 3, kProtoUint32));
+    event->fields.push_back(MakeField("meta_blocks", 4, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_allocate_blocks";
+    event->group = "ext4";
+    event->proto_field_id = 135;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("block", 3, kProtoUint64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("logical", 5, kProtoUint32));
+    event->fields.push_back(MakeField("lleft", 6, kProtoUint32));
+    event->fields.push_back(MakeField("lright", 7, kProtoUint32));
+    event->fields.push_back(MakeField("goal", 8, kProtoUint64));
+    event->fields.push_back(MakeField("pleft", 9, kProtoUint64));
+    event->fields.push_back(MakeField("pright", 10, kProtoUint64));
+    event->fields.push_back(MakeField("flags", 11, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_allocate_inode";
+    event->group = "ext4";
+    event->proto_field_id = 136;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("dir", 3, kProtoUint64));
+    event->fields.push_back(MakeField("mode", 4, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_begin_ordered_truncate";
+    event->group = "ext4";
+    event->proto_field_id = 137;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("new_size", 3, kProtoInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_collapse_range";
+    event->group = "ext4";
+    event->proto_field_id = 138;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_da_release_space";
+    event->group = "ext4";
+    event->proto_field_id = 139;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("i_blocks", 3, kProtoUint64));
+    event->fields.push_back(MakeField("freed_blocks", 4, kProtoInt32));
+    event->fields.push_back(MakeField("reserved_data_blocks", 5, kProtoInt32));
+    event->fields.push_back(MakeField("reserved_meta_blocks", 6, kProtoInt32));
+    event->fields.push_back(MakeField("allocated_meta_blocks", 7, kProtoInt32));
+    event->fields.push_back(MakeField("mode", 8, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_da_reserve_space";
+    event->group = "ext4";
+    event->proto_field_id = 140;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("i_blocks", 3, kProtoUint64));
+    event->fields.push_back(MakeField("reserved_data_blocks", 4, kProtoInt32));
+    event->fields.push_back(MakeField("reserved_meta_blocks", 5, kProtoInt32));
+    event->fields.push_back(MakeField("mode", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_da_update_reserve_space";
+    event->group = "ext4";
+    event->proto_field_id = 141;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("i_blocks", 3, kProtoUint64));
+    event->fields.push_back(MakeField("used_blocks", 4, kProtoInt32));
+    event->fields.push_back(MakeField("reserved_data_blocks", 5, kProtoInt32));
+    event->fields.push_back(MakeField("reserved_meta_blocks", 6, kProtoInt32));
+    event->fields.push_back(MakeField("allocated_meta_blocks", 7, kProtoInt32));
+    event->fields.push_back(MakeField("quota_claim", 8, kProtoInt32));
+    event->fields.push_back(MakeField("mode", 9, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "ext4_da_write_begin";
     event->group = "ext4";
     event->proto_field_id = 41;
@@ -457,6 +801,918 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "ext4_da_write_pages";
+    event->group = "ext4";
+    event->proto_field_id = 142;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("first_page", 3, kProtoUint64));
+    event->fields.push_back(MakeField("nr_to_write", 4, kProtoInt64));
+    event->fields.push_back(MakeField("sync_mode", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_da_write_pages_extent";
+    event->group = "ext4";
+    event->proto_field_id = 143;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_direct_IO_enter";
+    event->group = "ext4";
+    event->proto_field_id = 144;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint64));
+    event->fields.push_back(MakeField("rw", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_direct_IO_exit";
+    event->group = "ext4";
+    event->proto_field_id = 145;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint64));
+    event->fields.push_back(MakeField("rw", 5, kProtoInt32));
+    event->fields.push_back(MakeField("ret", 6, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_discard_blocks";
+    event->group = "ext4";
+    event->proto_field_id = 146;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("blk", 2, kProtoUint64));
+    event->fields.push_back(MakeField("count", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_discard_preallocations";
+    event->group = "ext4";
+    event->proto_field_id = 147;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_drop_inode";
+    event->group = "ext4";
+    event->proto_field_id = 148;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("drop", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_cache_extent";
+    event->group = "ext4";
+    event->proto_field_id = 149;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 5, kProtoUint64));
+    event->fields.push_back(MakeField("status", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_find_delayed_extent_range_enter";
+    event->group = "ext4";
+    event->proto_field_id = 150;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_find_delayed_extent_range_exit";
+    event->group = "ext4";
+    event->proto_field_id = 151;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 5, kProtoUint64));
+    event->fields.push_back(MakeField("status", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_insert_extent";
+    event->group = "ext4";
+    event->proto_field_id = 152;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 5, kProtoUint64));
+    event->fields.push_back(MakeField("status", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_lookup_extent_enter";
+    event->group = "ext4";
+    event->proto_field_id = 153;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_lookup_extent_exit";
+    event->group = "ext4";
+    event->proto_field_id = 154;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 5, kProtoUint64));
+    event->fields.push_back(MakeField("status", 6, kProtoUint32));
+    event->fields.push_back(MakeField("found", 7, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_remove_extent";
+    event->group = "ext4";
+    event->proto_field_id = 155;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_shrink";
+    event->group = "ext4";
+    event->proto_field_id = 156;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("nr_shrunk", 2, kProtoInt32));
+    event->fields.push_back(MakeField("scan_time", 3, kProtoUint64));
+    event->fields.push_back(MakeField("nr_skipped", 4, kProtoInt32));
+    event->fields.push_back(MakeField("retried", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_shrink_count";
+    event->group = "ext4";
+    event->proto_field_id = 157;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("nr_to_scan", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cache_cnt", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_shrink_scan_enter";
+    event->group = "ext4";
+    event->proto_field_id = 158;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("nr_to_scan", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cache_cnt", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_es_shrink_scan_exit";
+    event->group = "ext4";
+    event->proto_field_id = 159;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("nr_shrunk", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cache_cnt", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_evict_inode";
+    event->group = "ext4";
+    event->proto_field_id = 160;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nlink", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_convert_to_initialized_enter";
+    event->group = "ext4";
+    event->proto_field_id = 161;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("m_lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("m_len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("u_lblk", 5, kProtoUint32));
+    event->fields.push_back(MakeField("u_len", 6, kProtoUint32));
+    event->fields.push_back(MakeField("u_pblk", 7, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_convert_to_initialized_fastpath";
+    event->group = "ext4";
+    event->proto_field_id = 162;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("m_lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("m_len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("u_lblk", 5, kProtoUint32));
+    event->fields.push_back(MakeField("u_len", 6, kProtoUint32));
+    event->fields.push_back(MakeField("u_pblk", 7, kProtoUint64));
+    event->fields.push_back(MakeField("i_lblk", 8, kProtoUint32));
+    event->fields.push_back(MakeField("i_len", 9, kProtoUint32));
+    event->fields.push_back(MakeField("i_pblk", 10, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_handle_unwritten_extents";
+    event->group = "ext4";
+    event->proto_field_id = 163;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("flags", 3, kProtoInt32));
+    event->fields.push_back(MakeField("lblk", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 5, kProtoUint64));
+    event->fields.push_back(MakeField("len", 6, kProtoUint32));
+    event->fields.push_back(MakeField("allocated", 7, kProtoUint32));
+    event->fields.push_back(MakeField("newblk", 8, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_in_cache";
+    event->group = "ext4";
+    event->proto_field_id = 164;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("ret", 4, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_load_extent";
+    event->group = "ext4";
+    event->proto_field_id = 165;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pblk", 3, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 4, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_map_blocks_enter";
+    event->group = "ext4";
+    event->proto_field_id = 166;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_map_blocks_exit";
+    event->group = "ext4";
+    event->proto_field_id = 167;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("flags", 3, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 4, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 5, kProtoUint32));
+    event->fields.push_back(MakeField("len", 6, kProtoUint32));
+    event->fields.push_back(MakeField("mflags", 7, kProtoUint32));
+    event->fields.push_back(MakeField("ret", 8, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_put_in_cache";
+    event->group = "ext4";
+    event->proto_field_id = 168;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("start", 5, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_remove_space";
+    event->group = "ext4";
+    event->proto_field_id = 169;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("start", 3, kProtoUint32));
+    event->fields.push_back(MakeField("end", 4, kProtoUint32));
+    event->fields.push_back(MakeField("depth", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_remove_space_done";
+    event->group = "ext4";
+    event->proto_field_id = 170;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("start", 3, kProtoUint32));
+    event->fields.push_back(MakeField("end", 4, kProtoUint32));
+    event->fields.push_back(MakeField("depth", 5, kProtoInt32));
+    event->fields.push_back(MakeField("partial", 6, kProtoInt64));
+    event->fields.push_back(MakeField("eh_entries", 7, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_rm_idx";
+    event->group = "ext4";
+    event->proto_field_id = 171;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pblk", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_rm_leaf";
+    event->group = "ext4";
+    event->proto_field_id = 172;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("partial", 3, kProtoInt64));
+    event->fields.push_back(MakeField("start", 4, kProtoUint32));
+    event->fields.push_back(MakeField("ee_lblk", 5, kProtoUint32));
+    event->fields.push_back(MakeField("ee_pblk", 6, kProtoUint64));
+    event->fields.push_back(MakeField("ee_len", 7, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ext_show_extent";
+    event->group = "ext4";
+    event->proto_field_id = 173;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pblk", 3, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 4, kProtoUint32));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_fallocate_enter";
+    event->group = "ext4";
+    event->proto_field_id = 174;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoInt64));
+    event->fields.push_back(MakeField("mode", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_fallocate_exit";
+    event->group = "ext4";
+    event->proto_field_id = 175;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("blocks", 4, kProtoUint32));
+    event->fields.push_back(MakeField("ret", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_find_delalloc_range";
+    event->group = "ext4";
+    event->proto_field_id = 176;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("from", 3, kProtoUint32));
+    event->fields.push_back(MakeField("to", 4, kProtoUint32));
+    event->fields.push_back(MakeField("reverse", 5, kProtoInt32));
+    event->fields.push_back(MakeField("found", 6, kProtoInt32));
+    event->fields.push_back(MakeField("found_blk", 7, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_forget";
+    event->group = "ext4";
+    event->proto_field_id = 177;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("block", 3, kProtoUint64));
+    event->fields.push_back(MakeField("is_metadata", 4, kProtoInt32));
+    event->fields.push_back(MakeField("mode", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_free_blocks";
+    event->group = "ext4";
+    event->proto_field_id = 178;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("block", 3, kProtoUint64));
+    event->fields.push_back(MakeField("count", 4, kProtoUint64));
+    event->fields.push_back(MakeField("flags", 5, kProtoInt32));
+    event->fields.push_back(MakeField("mode", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_free_inode";
+    event->group = "ext4";
+    event->proto_field_id = 179;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("uid", 3, kProtoUint32));
+    event->fields.push_back(MakeField("gid", 4, kProtoUint32));
+    event->fields.push_back(MakeField("blocks", 5, kProtoUint64));
+    event->fields.push_back(MakeField("mode", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_get_implied_cluster_alloc_exit";
+    event->group = "ext4";
+    event->proto_field_id = 180;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 2, kProtoUint32));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 4, kProtoUint64));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
+    event->fields.push_back(MakeField("ret", 6, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_get_reserved_cluster_alloc";
+    event->group = "ext4";
+    event->proto_field_id = 181;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ind_map_blocks_enter";
+    event->group = "ext4";
+    event->proto_field_id = 182;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 3, kProtoUint32));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_ind_map_blocks_exit";
+    event->group = "ext4";
+    event->proto_field_id = 183;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("flags", 3, kProtoUint32));
+    event->fields.push_back(MakeField("pblk", 4, kProtoUint64));
+    event->fields.push_back(MakeField("lblk", 5, kProtoUint32));
+    event->fields.push_back(MakeField("len", 6, kProtoUint32));
+    event->fields.push_back(MakeField("mflags", 7, kProtoUint32));
+    event->fields.push_back(MakeField("ret", 8, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_insert_range";
+    event->group = "ext4";
+    event->proto_field_id = 184;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_invalidatepage";
+    event->group = "ext4";
+    event->proto_field_id = 185;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 4, kProtoUint32));
+    event->fields.push_back(MakeField("length", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_journal_start";
+    event->group = "ext4";
+    event->proto_field_id = 186;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ip", 2, kProtoUint64));
+    event->fields.push_back(MakeField("blocks", 3, kProtoInt32));
+    event->fields.push_back(MakeField("rsv_blocks", 4, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_journal_start_reserved";
+    event->group = "ext4";
+    event->proto_field_id = 187;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ip", 2, kProtoUint64));
+    event->fields.push_back(MakeField("blocks", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_journalled_invalidatepage";
+    event->group = "ext4";
+    event->proto_field_id = 188;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 4, kProtoUint32));
+    event->fields.push_back(MakeField("length", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_journalled_write_end";
+    event->group = "ext4";
+    event->proto_field_id = 189;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("copied", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_load_inode";
+    event->group = "ext4";
+    event->proto_field_id = 190;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_load_inode_bitmap";
+    event->group = "ext4";
+    event->proto_field_id = 191;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("group", 2, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mark_inode_dirty";
+    event->group = "ext4";
+    event->proto_field_id = 192;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("ip", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_bitmap_load";
+    event->group = "ext4";
+    event->proto_field_id = 193;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("group", 2, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_buddy_bitmap_load";
+    event->group = "ext4";
+    event->proto_field_id = 194;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("group", 2, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_discard_preallocations";
+    event->group = "ext4";
+    event->proto_field_id = 195;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("needed", 2, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_new_group_pa";
+    event->group = "ext4";
+    event->proto_field_id = 196;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pa_pstart", 3, kProtoUint64));
+    event->fields.push_back(MakeField("pa_lstart", 4, kProtoUint64));
+    event->fields.push_back(MakeField("pa_len", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_new_inode_pa";
+    event->group = "ext4";
+    event->proto_field_id = 197;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pa_pstart", 3, kProtoUint64));
+    event->fields.push_back(MakeField("pa_lstart", 4, kProtoUint64));
+    event->fields.push_back(MakeField("pa_len", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_release_group_pa";
+    event->group = "ext4";
+    event->proto_field_id = 198;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("pa_pstart", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pa_len", 3, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mb_release_inode_pa";
+    event->group = "ext4";
+    event->proto_field_id = 199;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("block", 3, kProtoUint64));
+    event->fields.push_back(MakeField("count", 4, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mballoc_alloc";
+    event->group = "ext4";
+    event->proto_field_id = 200;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("orig_logical", 3, kProtoUint32));
+    event->fields.push_back(MakeField("orig_start", 4, kProtoInt32));
+    event->fields.push_back(MakeField("orig_group", 5, kProtoUint32));
+    event->fields.push_back(MakeField("orig_len", 6, kProtoInt32));
+    event->fields.push_back(MakeField("goal_logical", 7, kProtoUint32));
+    event->fields.push_back(MakeField("goal_start", 8, kProtoInt32));
+    event->fields.push_back(MakeField("goal_group", 9, kProtoUint32));
+    event->fields.push_back(MakeField("goal_len", 10, kProtoInt32));
+    event->fields.push_back(MakeField("result_logical", 11, kProtoUint32));
+    event->fields.push_back(MakeField("result_start", 12, kProtoInt32));
+    event->fields.push_back(MakeField("result_group", 13, kProtoUint32));
+    event->fields.push_back(MakeField("result_len", 14, kProtoInt32));
+    event->fields.push_back(MakeField("found", 15, kProtoUint32));
+    event->fields.push_back(MakeField("groups", 16, kProtoUint32));
+    event->fields.push_back(MakeField("buddy", 17, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 18, kProtoUint32));
+    event->fields.push_back(MakeField("tail", 19, kProtoUint32));
+    event->fields.push_back(MakeField("cr", 20, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mballoc_discard";
+    event->group = "ext4";
+    event->proto_field_id = 201;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("result_start", 3, kProtoInt32));
+    event->fields.push_back(MakeField("result_group", 4, kProtoUint32));
+    event->fields.push_back(MakeField("result_len", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mballoc_free";
+    event->group = "ext4";
+    event->proto_field_id = 202;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("result_start", 3, kProtoInt32));
+    event->fields.push_back(MakeField("result_group", 4, kProtoUint32));
+    event->fields.push_back(MakeField("result_len", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_mballoc_prealloc";
+    event->group = "ext4";
+    event->proto_field_id = 203;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("orig_logical", 3, kProtoUint32));
+    event->fields.push_back(MakeField("orig_start", 4, kProtoInt32));
+    event->fields.push_back(MakeField("orig_group", 5, kProtoUint32));
+    event->fields.push_back(MakeField("orig_len", 6, kProtoInt32));
+    event->fields.push_back(MakeField("result_logical", 7, kProtoUint32));
+    event->fields.push_back(MakeField("result_start", 8, kProtoInt32));
+    event->fields.push_back(MakeField("result_group", 9, kProtoUint32));
+    event->fields.push_back(MakeField("result_len", 10, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_other_inode_update_time";
+    event->group = "ext4";
+    event->proto_field_id = 204;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("orig_ino", 3, kProtoUint64));
+    event->fields.push_back(MakeField("uid", 4, kProtoUint32));
+    event->fields.push_back(MakeField("gid", 5, kProtoUint32));
+    event->fields.push_back(MakeField("mode", 6, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_punch_hole";
+    event->group = "ext4";
+    event->proto_field_id = 205;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoInt64));
+    event->fields.push_back(MakeField("mode", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_read_block_bitmap_load";
+    event->group = "ext4";
+    event->proto_field_id = 206;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("group", 2, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_readpage";
+    event->group = "ext4";
+    event->proto_field_id = 207;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_releasepage";
+    event->group = "ext4";
+    event->proto_field_id = 208;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_remove_blocks";
+    event->group = "ext4";
+    event->proto_field_id = 209;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("from", 3, kProtoUint32));
+    event->fields.push_back(MakeField("to", 4, kProtoUint32));
+    event->fields.push_back(MakeField("partial", 5, kProtoInt64));
+    event->fields.push_back(MakeField("ee_pblk", 6, kProtoUint64));
+    event->fields.push_back(MakeField("ee_lblk", 7, kProtoUint32));
+    event->fields.push_back(MakeField("ee_len", 8, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_request_blocks";
+    event->group = "ext4";
+    event->proto_field_id = 210;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("len", 3, kProtoUint32));
+    event->fields.push_back(MakeField("logical", 4, kProtoUint32));
+    event->fields.push_back(MakeField("lleft", 5, kProtoUint32));
+    event->fields.push_back(MakeField("lright", 6, kProtoUint32));
+    event->fields.push_back(MakeField("goal", 7, kProtoUint64));
+    event->fields.push_back(MakeField("pleft", 8, kProtoUint64));
+    event->fields.push_back(MakeField("pright", 9, kProtoUint64));
+    event->fields.push_back(MakeField("flags", 10, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_request_inode";
+    event->group = "ext4";
+    event->proto_field_id = 211;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("dir", 2, kProtoUint64));
+    event->fields.push_back(MakeField("mode", 3, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "ext4_sync_file_enter";
     event->group = "ext4";
     event->proto_field_id = 43;
@@ -480,6 +1736,170 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "ext4_sync_fs";
+    event->group = "ext4";
+    event->proto_field_id = 212;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("wait", 2, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_trim_all_free";
+    event->group = "ext4";
+    event->proto_field_id = 213;
+    event->fields.push_back(MakeField("dev_major", 1, kProtoInt32));
+    event->fields.push_back(MakeField("dev_minor", 2, kProtoInt32));
+    event->fields.push_back(MakeField("group", 3, kProtoUint32));
+    event->fields.push_back(MakeField("start", 4, kProtoInt32));
+    event->fields.push_back(MakeField("len", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_trim_extent";
+    event->group = "ext4";
+    event->proto_field_id = 214;
+    event->fields.push_back(MakeField("dev_major", 1, kProtoInt32));
+    event->fields.push_back(MakeField("dev_minor", 2, kProtoInt32));
+    event->fields.push_back(MakeField("group", 3, kProtoUint32));
+    event->fields.push_back(MakeField("start", 4, kProtoInt32));
+    event->fields.push_back(MakeField("len", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_truncate_enter";
+    event->group = "ext4";
+    event->proto_field_id = 215;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("blocks", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_truncate_exit";
+    event->group = "ext4";
+    event->proto_field_id = 216;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("blocks", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_unlink_enter";
+    event->group = "ext4";
+    event->proto_field_id = 217;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("parent", 3, kProtoUint64));
+    event->fields.push_back(MakeField("size", 4, kProtoInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_unlink_exit";
+    event->group = "ext4";
+    event->proto_field_id = 218;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("ret", 3, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_write_begin";
+    event->group = "ext4";
+    event->proto_field_id = 219;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_write_end";
+    event->group = "ext4";
+    event->proto_field_id = 230;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("copied", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_writepage";
+    event->group = "ext4";
+    event->proto_field_id = 231;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_writepages";
+    event->group = "ext4";
+    event->proto_field_id = 232;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_to_write", 3, kProtoInt64));
+    event->fields.push_back(MakeField("pages_skipped", 4, kProtoInt64));
+    event->fields.push_back(MakeField("range_start", 5, kProtoInt64));
+    event->fields.push_back(MakeField("range_end", 6, kProtoInt64));
+    event->fields.push_back(MakeField("writeback_index", 7, kProtoUint64));
+    event->fields.push_back(MakeField("sync_mode", 8, kProtoInt32));
+    event->fields.push_back(MakeField("for_kupdate", 9, kProtoUint32));
+    event->fields.push_back(MakeField("range_cyclic", 10, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_writepages_result";
+    event->group = "ext4";
+    event->proto_field_id = 233;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("ret", 3, kProtoInt32));
+    event->fields.push_back(MakeField("pages_written", 4, kProtoInt32));
+    event->fields.push_back(MakeField("pages_skipped", 5, kProtoInt64));
+    event->fields.push_back(MakeField("writeback_index", 6, kProtoUint64));
+    event->fields.push_back(MakeField("sync_mode", 7, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "ext4_zero_range";
+    event->group = "ext4";
+    event->proto_field_id = 234;
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("offset", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoInt64));
+    event->fields.push_back(MakeField("mode", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "mm_filemap_add_to_page_cache";
     event->group = "filemap";
     event->proto_field_id = 97;
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index 0735e00..9411fdd 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -110,3 +110,113 @@
 compaction/mm_compaction_wakeup_kcompactd
 power/suspend_resume
 sched/sched_wakeup_new
+ext4/ext4_allocate_blocks
+ext4/ext4_allocate_inode
+ext4/ext4_alloc_da_blocks
+ext4/ext4_begin_ordered_truncate
+ext4/ext4_collapse_range
+ext4/ext4_da_release_space
+ext4/ext4_da_reserve_space
+ext4/ext4_da_update_reserve_space
+ext4/ext4_da_write_pages
+ext4/ext4_da_write_pages_extent
+ext4/ext4_direct_IO_enter
+ext4/ext4_direct_IO_exit
+ext4/ext4_discard_blocks
+ext4/ext4_discard_preallocations
+ext4/ext4_drop_inode
+ext4/ext4_es_cache_extent
+ext4/ext4_es_find_delayed_extent_range_enter
+ext4/ext4_es_find_delayed_extent_range_exit
+ext4/ext4_es_insert_extent
+ext4/ext4_es_lookup_extent_enter
+ext4/ext4_es_lookup_extent_exit
+ext4/ext4_es_remove_extent
+ext4/ext4_es_shrink
+ext4/ext4_es_shrink_count
+ext4/ext4_es_shrink_scan_enter
+ext4/ext4_es_shrink_scan_exit
+ext4/ext4_evict_inode
+ext4/ext4_ext_convert_to_initialized_enter
+ext4/ext4_ext_convert_to_initialized_fastpath
+ext4/ext4_ext_handle_unwritten_extents
+ext4/ext4_ext_in_cache
+ext4/ext4_ext_load_extent
+ext4/ext4_ext_map_blocks_enter
+ext4/ext4_ext_map_blocks_exit
+ext4/ext4_ext_put_in_cache
+ext4/ext4_ext_remove_space
+ext4/ext4_ext_remove_space_done
+ext4/ext4_ext_rm_idx
+ext4/ext4_ext_rm_leaf
+ext4/ext4_ext_show_extent
+ext4/ext4_fallocate_enter
+ext4/ext4_fallocate_exit
+ext4/ext4_find_delalloc_range
+ext4/ext4_forget
+ext4/ext4_free_blocks
+ext4/ext4_free_inode
+ext4/ext4_get_implied_cluster_alloc_exit
+ext4/ext4_get_reserved_cluster_alloc
+ext4/ext4_ind_map_blocks_enter
+ext4/ext4_ind_map_blocks_exit
+ext4/ext4_insert_range
+ext4/ext4_invalidatepage
+ext4/ext4_journalled_invalidatepage
+ext4/ext4_journalled_write_end
+ext4/ext4_journal_start
+ext4/ext4_journal_start_reserved
+ext4/ext4_load_inode
+ext4/ext4_load_inode_bitmap
+ext4/ext4_mark_inode_dirty
+ext4/ext4_mballoc_alloc
+ext4/ext4_mballoc_discard
+ext4/ext4_mballoc_free
+ext4/ext4_mballoc_prealloc
+ext4/ext4_mb_bitmap_load
+ext4/ext4_mb_buddy_bitmap_load
+ext4/ext4_mb_discard_preallocations
+ext4/ext4_mb_new_group_pa
+ext4/ext4_mb_new_inode_pa
+ext4/ext4_mb_release_group_pa
+ext4/ext4_mb_release_inode_pa
+ext4/ext4_other_inode_update_time
+ext4/ext4_punch_hole
+ext4/ext4_read_block_bitmap_load
+ext4/ext4_readpage
+ext4/ext4_releasepage
+ext4/ext4_remove_blocks
+ext4/ext4_request_blocks
+ext4/ext4_request_inode
+ext4/ext4_sync_fs
+ext4/ext4_trim_all_free
+ext4/ext4_trim_extent
+ext4/ext4_truncate_enter
+ext4/ext4_truncate_exit
+ext4/ext4_unlink_enter
+ext4/ext4_unlink_exit
+ext4/ext4_write_begin
+ext4/ext4_write_end
+ext4/ext4_writepage
+ext4/ext4_writepages
+ext4/ext4_writepages_result
+ext4/ext4_zero_range
+block/block_bio_backmerge
+block/block_bio_bounce
+block/block_bio_complete
+block/block_bio_frontmerge
+block/block_bio_queue
+block/block_bio_remap
+block/block_dirty_buffer
+block/block_getrq
+block/block_plug
+block/block_rq_abort
+block/block_rq_complete
+block/block_rq_insert
+block/block_rq_issue
+block/block_rq_remap
+block/block_rq_requeue
+block/block_sleeprq
+block/block_split
+block/block_touch_buffer
+block/block_unplug
diff --git a/tools/ftrace_proto_gen/ftrace_proto_gen.cc b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
index 9ecdb4e..9f611f8 100644
--- a/tools/ftrace_proto_gen/ftrace_proto_gen.cc
+++ b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
@@ -86,6 +86,47 @@
   return "";
 }
 
+void PrintFtraceEventProtoAdditions(const std::set<std::string>& events) {
+  printf(
+      "\nNumber appropriately and add output to "
+      "protos/perfetto/trace/ftrace/ftrace_event.proto\n");
+  for (auto event : events) {
+    printf("%sFtraceEvent %s = ;\n", ToCamelCase(event).c_str(), event.c_str());
+  }
+}
+
+void PrintTraceToTextMain(const std::set<std::string>& events) {
+  printf(
+      "\nAdd output to TraceToSystrace for loop in "
+      "tools/ftrace_proto_gen/main.cc\n");
+  for (auto event : events) {
+    printf(
+        "else if (event.has_%s()) {\nconst auto& inner = event.%s();\nline = "
+        "Format%s(inner);\n} ",
+        event.c_str(), event.c_str(), ToCamelCase(event).c_str());
+  }
+}
+
+void PrintTraceToTextUsingStatements(const std::set<std::string>& events) {
+  printf("\nAdd output to tools/ftrace_proto_gen/main.cc\n");
+  for (auto event : events) {
+    printf("using protos::%sFtraceEvent;\n", ToCamelCase(event).c_str());
+  }
+}
+
+void PrintTraceToTextFunctions(const std::set<std::string>& events) {
+  printf(
+      "\nAdd output to tools/ftrace_proto_gen/main.cc and then manually go "
+      "through format files to match fields\n");
+  for (auto event : events) {
+    printf(
+        "std::string Format%s(const %sFtraceEvent& event) {"
+        "\nchar line[2048];"
+        "\nsprintf(line,\"%s: );\nreturn std::string(line);\n}\n",
+        ToCamelCase(event).c_str(), ToCamelCase(event).c_str(), event.c_str());
+  }
+}
+
 bool GenerateProto(const FtraceEvent& format, Proto* proto_out) {
   proto_out->name = ToCamelCase(format.name) + "FtraceEvent";
   proto_out->fields.reserve(format.fields.size());
diff --git a/tools/ftrace_proto_gen/ftrace_proto_gen.h b/tools/ftrace_proto_gen/ftrace_proto_gen.h
index 23eea00..7b82791 100644
--- a/tools/ftrace_proto_gen/ftrace_proto_gen.h
+++ b/tools/ftrace_proto_gen/ftrace_proto_gen.h
@@ -34,6 +34,11 @@
   std::string ToString();
 };
 
+void PrintFtraceEventProtoAdditions(const std::set<std::string>& events);
+void PrintTraceToTextMain(const std::set<std::string>& events);
+void PrintTraceToTextUsingStatements(const std::set<std::string>& events);
+void PrintTraceToTextFunctions(const std::set<std::string>& events);
+
 bool GenerateProto(const FtraceEvent& format, Proto* proto_out);
 std::string InferProtoType(const FtraceEvent::Field& field);
 
diff --git a/tools/ftrace_proto_gen/main.cc b/tools/ftrace_proto_gen/main.cc
index 98a85eb..19460c1 100644
--- a/tools/ftrace_proto_gen/main.cc
+++ b/tools/ftrace_proto_gen/main.cc
@@ -14,6 +14,7 @@
  * limitations under the License.
  */
 
+#include <sys/stat.h>
 #include <fstream>
 #include <memory>
 #include <regex>
@@ -50,6 +51,24 @@
   std::ostringstream ftrace_stream;
   ftrace_stream << input.rdbuf();
 
+  std::set<std::string> new_events;
+  for (auto event : events) {
+    std::string file_name =
+        event.substr(event.find('/') + 1, std::string::npos);
+    struct stat buf;
+    if (stat(("protos/perfetto/trace/ftrace/" + file_name + ".proto").c_str(),
+             &buf) == -1) {
+      new_events.insert(file_name);
+    }
+  }
+
+  if (!new_events.empty()) {
+    perfetto::PrintFtraceEventProtoAdditions(new_events);
+    perfetto::PrintTraceToTextMain(new_events);
+    perfetto::PrintTraceToTextUsingStatements(new_events);
+    perfetto::PrintTraceToTextFunctions(new_events);
+  }
+
   for (auto event : events) {
     std::string proto_file_name =
         event.substr(event.find('/') + 1, std::string::npos) + ".proto";
diff --git a/tools/trace_to_text/main.cc b/tools/trace_to_text/main.cc
index 7fe7c63..22762cb 100644
--- a/tools/trace_to_text/main.cc
+++ b/tools/trace_to_text/main.cc
@@ -74,13 +74,32 @@
 using google::protobuf::compiler::Importer;
 using google::protobuf::compiler::MultiFileErrorCollector;
 using google::protobuf::io::OstreamOutputStream;
-using protos::BinderLockedFtraceEvent;
+
 using protos::BinderLockFtraceEvent;
+using protos::BinderLockedFtraceEvent;
 using protos::BinderSetPriorityFtraceEvent;
 using protos::BinderTransactionFtraceEvent;
 using protos::BinderTransactionReceivedFtraceEvent;
 using protos::BinderUnlockFtraceEvent;
+using protos::BlockBioBackmergeFtraceEvent;
+using protos::BlockBioBounceFtraceEvent;
+using protos::BlockBioCompleteFtraceEvent;
+using protos::BlockBioFrontmergeFtraceEvent;
+using protos::BlockBioQueueFtraceEvent;
+using protos::BlockBioRemapFtraceEvent;
+using protos::BlockDirtyBufferFtraceEvent;
+using protos::BlockGetrqFtraceEvent;
+using protos::BlockPlugFtraceEvent;
+using protos::BlockRqAbortFtraceEvent;
+using protos::BlockRqCompleteFtraceEvent;
+using protos::BlockRqInsertFtraceEvent;
 using protos::BlockRqIssueFtraceEvent;
+using protos::BlockRqRemapFtraceEvent;
+using protos::BlockRqRequeueFtraceEvent;
+using protos::BlockSleeprqFtraceEvent;
+using protos::BlockSplitFtraceEvent;
+using protos::BlockTouchBufferFtraceEvent;
+using protos::BlockUnplugFtraceEvent;
 using protos::CgroupAttachTaskFtraceEvent;
 using protos::CgroupDestroyRootFtraceEvent;
 using protos::CgroupMkdirFtraceEvent;
@@ -90,27 +109,140 @@
 using protos::CgroupRmdirFtraceEvent;
 using protos::CgroupSetupRootFtraceEvent;
 using protos::CgroupTransferTasksFtraceEvent;
-using protos::ClockDisableFtraceEvent;
-using protos::ClockEnableFtraceEvent;
-using protos::ClockSetRateFtraceEvent;
-using protos::CpuFrequencyFtraceEvent;
-using protos::CpuFrequencyLimitsFtraceEvent;
-using protos::CpuIdleFtraceEvent;
+using protos::MmCompactionBeginFtraceEvent;
+using protos::MmCompactionDeferCompactionFtraceEvent;
+using protos::MmCompactionDeferResetFtraceEvent;
+using protos::MmCompactionDeferredFtraceEvent;
+using protos::MmCompactionEndFtraceEvent;
+using protos::MmCompactionFinishedFtraceEvent;
+using protos::MmCompactionIsolateFreepagesFtraceEvent;
+using protos::MmCompactionIsolateMigratepagesFtraceEvent;
+using protos::MmCompactionKcompactdSleepFtraceEvent;
+using protos::MmCompactionKcompactdWakeFtraceEvent;
+using protos::MmCompactionMigratepagesFtraceEvent;
+using protos::MmCompactionSuitableFtraceEvent;
+using protos::MmCompactionTryToCompactPagesFtraceEvent;
+using protos::MmCompactionWakeupKcompactdFtraceEvent;
+using protos::CpufreqInteractiveAlreadyFtraceEvent;
+using protos::CpufreqInteractiveBoostFtraceEvent;
+using protos::CpufreqInteractiveNotyetFtraceEvent;
+using protos::CpufreqInteractiveSetspeedFtraceEvent;
+using protos::CpufreqInteractiveTargetFtraceEvent;
+using protos::CpufreqInteractiveUnboostFtraceEvent;
+using protos::Ext4AllocDaBlocksFtraceEvent;
+using protos::Ext4AllocateBlocksFtraceEvent;
+using protos::Ext4AllocateInodeFtraceEvent;
+using protos::Ext4BeginOrderedTruncateFtraceEvent;
+using protos::Ext4CollapseRangeFtraceEvent;
+using protos::Ext4DaReleaseSpaceFtraceEvent;
+using protos::Ext4DaReserveSpaceFtraceEvent;
+using protos::Ext4DaUpdateReserveSpaceFtraceEvent;
 using protos::Ext4DaWriteBeginFtraceEvent;
 using protos::Ext4DaWriteEndFtraceEvent;
+using protos::Ext4DaWritePagesFtraceEvent;
+using protos::Ext4DaWritePagesExtentFtraceEvent;
+using protos::Ext4DirectIOEnterFtraceEvent;
+using protos::Ext4DirectIOExitFtraceEvent;
+using protos::Ext4DiscardBlocksFtraceEvent;
+using protos::Ext4DiscardPreallocationsFtraceEvent;
+using protos::Ext4DropInodeFtraceEvent;
+using protos::Ext4EsCacheExtentFtraceEvent;
+using protos::Ext4EsFindDelayedExtentRangeEnterFtraceEvent;
+using protos::Ext4EsFindDelayedExtentRangeExitFtraceEvent;
+using protos::Ext4EsInsertExtentFtraceEvent;
+using protos::Ext4EsLookupExtentEnterFtraceEvent;
+using protos::Ext4EsLookupExtentExitFtraceEvent;
+using protos::Ext4EsRemoveExtentFtraceEvent;
+using protos::Ext4EsShrinkFtraceEvent;
+using protos::Ext4EsShrinkCountFtraceEvent;
+using protos::Ext4EsShrinkScanEnterFtraceEvent;
+using protos::Ext4EsShrinkScanExitFtraceEvent;
+using protos::Ext4EvictInodeFtraceEvent;
+using protos::Ext4ExtConvertToInitializedEnterFtraceEvent;
+using protos::Ext4ExtConvertToInitializedFastpathFtraceEvent;
+using protos::Ext4ExtHandleUnwrittenExtentsFtraceEvent;
+using protos::Ext4ExtInCacheFtraceEvent;
+using protos::Ext4ExtLoadExtentFtraceEvent;
+using protos::Ext4ExtMapBlocksEnterFtraceEvent;
+using protos::Ext4ExtMapBlocksExitFtraceEvent;
+using protos::Ext4ExtPutInCacheFtraceEvent;
+using protos::Ext4ExtRemoveSpaceFtraceEvent;
+using protos::Ext4ExtRemoveSpaceDoneFtraceEvent;
+using protos::Ext4ExtRmIdxFtraceEvent;
+using protos::Ext4ExtRmLeafFtraceEvent;
+using protos::Ext4ExtShowExtentFtraceEvent;
+using protos::Ext4FallocateEnterFtraceEvent;
+using protos::Ext4FallocateExitFtraceEvent;
+using protos::Ext4FindDelallocRangeFtraceEvent;
+using protos::Ext4ForgetFtraceEvent;
+using protos::Ext4FreeBlocksFtraceEvent;
+using protos::Ext4FreeInodeFtraceEvent;
+using protos::Ext4GetImpliedClusterAllocExitFtraceEvent;
+using protos::Ext4GetReservedClusterAllocFtraceEvent;
+using protos::Ext4IndMapBlocksEnterFtraceEvent;
+using protos::Ext4IndMapBlocksExitFtraceEvent;
+using protos::Ext4InsertRangeFtraceEvent;
+using protos::Ext4InvalidatepageFtraceEvent;
+using protos::Ext4JournalStartFtraceEvent;
+using protos::Ext4JournalStartReservedFtraceEvent;
+using protos::Ext4JournalledInvalidatepageFtraceEvent;
+using protos::Ext4JournalledWriteEndFtraceEvent;
+using protos::Ext4LoadInodeFtraceEvent;
+using protos::Ext4LoadInodeBitmapFtraceEvent;
+using protos::Ext4MarkInodeDirtyFtraceEvent;
+using protos::Ext4MbBitmapLoadFtraceEvent;
+using protos::Ext4MbBuddyBitmapLoadFtraceEvent;
+using protos::Ext4MbDiscardPreallocationsFtraceEvent;
+using protos::Ext4MbNewGroupPaFtraceEvent;
+using protos::Ext4MbNewInodePaFtraceEvent;
+using protos::Ext4MbReleaseGroupPaFtraceEvent;
+using protos::Ext4MbReleaseInodePaFtraceEvent;
+using protos::Ext4MballocAllocFtraceEvent;
+using protos::Ext4MballocDiscardFtraceEvent;
+using protos::Ext4MballocFreeFtraceEvent;
+using protos::Ext4MballocPreallocFtraceEvent;
+using protos::Ext4OtherInodeUpdateTimeFtraceEvent;
+using protos::Ext4PunchHoleFtraceEvent;
+using protos::Ext4ReadBlockBitmapLoadFtraceEvent;
+using protos::Ext4ReadpageFtraceEvent;
+using protos::Ext4ReleasepageFtraceEvent;
+using protos::Ext4RemoveBlocksFtraceEvent;
+using protos::Ext4RequestBlocksFtraceEvent;
+using protos::Ext4RequestInodeFtraceEvent;
 using protos::Ext4SyncFileEnterFtraceEvent;
 using protos::Ext4SyncFileExitFtraceEvent;
-using protos::FtraceEvent;
-using protos::FtraceEventBundle;
+using protos::Ext4SyncFsFtraceEvent;
+using protos::Ext4TrimAllFreeFtraceEvent;
+using protos::Ext4TrimExtentFtraceEvent;
+using protos::Ext4TruncateEnterFtraceEvent;
+using protos::Ext4TruncateExitFtraceEvent;
+using protos::Ext4UnlinkEnterFtraceEvent;
+using protos::Ext4UnlinkExitFtraceEvent;
+using protos::Ext4WriteBeginFtraceEvent;
+using protos::Ext4WriteEndFtraceEvent;
+using protos::Ext4WritepageFtraceEvent;
+using protos::Ext4WritepagesFtraceEvent;
+using protos::Ext4WritepagesResultFtraceEvent;
+using protos::Ext4ZeroRangeFtraceEvent;
+using protos::MmFilemapAddToPageCacheFtraceEvent;
+using protos::MmFilemapDeleteFromPageCacheFtraceEvent;
+using protos::PrintFtraceEvent;
 using protos::I2cReadFtraceEvent;
 using protos::I2cReplyFtraceEvent;
 using protos::I2cResultFtraceEvent;
 using protos::I2cWriteFtraceEvent;
+using protos::SmbusReadFtraceEvent;
+using protos::SmbusReplyFtraceEvent;
+using protos::SmbusResultFtraceEvent;
+using protos::SmbusWriteFtraceEvent;
 using protos::IpiEntryFtraceEvent;
 using protos::IpiExitFtraceEvent;
 using protos::IpiRaiseFtraceEvent;
 using protos::IrqHandlerEntryFtraceEvent;
 using protos::IrqHandlerExitFtraceEvent;
+using protos::SoftirqEntryFtraceEvent;
+using protos::SoftirqExitFtraceEvent;
+using protos::SoftirqRaiseFtraceEvent;
 using protos::LowmemoryKillFtraceEvent;
 using protos::MdpCmdKickoffFtraceEvent;
 using protos::MdpCmdPingpongDoneFtraceEvent;
@@ -131,60 +263,46 @@
 using protos::MdpSsppSetFtraceEvent;
 using protos::MdpTraceCounterFtraceEvent;
 using protos::MdpVideoUnderrunDoneFtraceEvent;
-using protos::MmCompactionBeginFtraceEvent;
-using protos::MmCompactionDeferCompactionFtraceEvent;
-using protos::MmCompactionDeferredFtraceEvent;
-using protos::MmCompactionDeferResetFtraceEvent;
-using protos::MmCompactionEndFtraceEvent;
-using protos::MmCompactionFinishedFtraceEvent;
-using protos::MmCompactionIsolateFreepagesFtraceEvent;
-using protos::MmCompactionIsolateMigratepagesFtraceEvent;
-using protos::MmCompactionKcompactdSleepFtraceEvent;
-using protos::MmCompactionKcompactdWakeFtraceEvent;
-using protos::MmCompactionMigratepagesFtraceEvent;
-using protos::MmCompactionSuitableFtraceEvent;
-using protos::MmCompactionTryToCompactPagesFtraceEvent;
-using protos::MmCompactionWakeupKcompactdFtraceEvent;
-using protos::MmFilemapAddToPageCacheFtraceEvent;
-using protos::MmFilemapDeleteFromPageCacheFtraceEvent;
-using protos::MmVmscanDirectReclaimBeginFtraceEvent;
-using protos::MmVmscanDirectReclaimEndFtraceEvent;
-using protos::MmVmscanKswapdSleepFtraceEvent;
-using protos::MmVmscanKswapdWakeFtraceEvent;
-using protos::PrintFtraceEvent;
-using protos::ProcessTree;
-using protos::RegulatorDisableCompleteFtraceEvent;
+using protos::RotatorBwAoAsContextFtraceEvent;
+using protos::TracingMarkWriteFtraceEvent;
+using protos::ClockDisableFtraceEvent;
+using protos::ClockEnableFtraceEvent;
+using protos::ClockSetRateFtraceEvent;
+using protos::CpuFrequencyFtraceEvent;
+using protos::CpuFrequencyLimitsFtraceEvent;
+using protos::CpuIdleFtraceEvent;
+using protos::SuspendResumeFtraceEvent;
 using protos::RegulatorDisableFtraceEvent;
+using protos::RegulatorDisableCompleteFtraceEvent;
+using protos::RegulatorEnableFtraceEvent;
 using protos::RegulatorEnableCompleteFtraceEvent;
 using protos::RegulatorEnableDelayFtraceEvent;
-using protos::RegulatorEnableFtraceEvent;
-using protos::RegulatorSetVoltageCompleteFtraceEvent;
 using protos::RegulatorSetVoltageFtraceEvent;
-using protos::RotatorBwAoAsContextFtraceEvent;
+using protos::RegulatorSetVoltageCompleteFtraceEvent;
 using protos::SchedBlockedReasonFtraceEvent;
 using protos::SchedCpuHotplugFtraceEvent;
 using protos::SchedSwitchFtraceEvent;
 using protos::SchedWakeupFtraceEvent;
 using protos::SchedWakeupNewFtraceEvent;
 using protos::SchedWakingFtraceEvent;
-using protos::SmbusReadFtraceEvent;
-using protos::SmbusReplyFtraceEvent;
-using protos::SmbusResultFtraceEvent;
-using protos::SmbusWriteFtraceEvent;
-using protos::SoftirqEntryFtraceEvent;
-using protos::SoftirqExitFtraceEvent;
-using protos::SoftirqRaiseFtraceEvent;
-using protos::SuspendResumeFtraceEvent;
 using protos::SyncPtFtraceEvent;
 using protos::SyncTimelineFtraceEvent;
 using protos::SyncWaitFtraceEvent;
-using protos::Trace;
-using protos::TracePacket;
-using protos::TracingMarkWriteFtraceEvent;
+using protos::MmVmscanDirectReclaimBeginFtraceEvent;
+using protos::MmVmscanDirectReclaimEndFtraceEvent;
+using protos::MmVmscanKswapdSleepFtraceEvent;
+using protos::MmVmscanKswapdWakeFtraceEvent;
 using protos::WorkqueueActivateWorkFtraceEvent;
 using protos::WorkqueueExecuteEndFtraceEvent;
 using protos::WorkqueueExecuteStartFtraceEvent;
 using protos::WorkqueueQueueWorkFtraceEvent;
+
+using protos::FtraceEvent;
+using protos::FtraceEventBundle;
+using protos::PrintFtraceEvent;
+using protos::ProcessTree;
+using protos::Trace;
+using protos::TracePacket;
 using Process = protos::ProcessTree::Process;
 
 // TODO(hjd): Add tests.
@@ -207,7 +325,7 @@
   }
 };
 
-const char* GetFlag(int32_t state) {
+const char* GetSchedSwitchFlag(int32_t state) {
   state &= 511;
   if (state & 1)
     return "S";
@@ -228,6 +346,88 @@
   return "R";
 }
 
+const char* GetExt4HintFlag(int32_t state) {
+  if (state & 0x0001)
+    return "HINT_MERGE";
+  if (state & 0x0002)
+    return "HINT_RESV";
+  if (state & 0x0004)
+    return "HINT_MDATA";
+  if (state & 0x0008)
+    return "HINT_FIRST";
+  if (state & 0x0010)
+    return "HINT_BEST";
+  if (state & 0x0020)
+    return "HINT_DATA";
+  if (state & 0x0040)
+    return "HINT_NOPREALLOC";
+  if (state & 0x0080)
+    return "HINT_GRP_ALLOCE";
+  if (state & 0x0100)
+    return "HINT_GOAL_ONLY";
+  if (state & 0x0200)
+    return "HINT_DATA";
+  if (state & 0x0400)
+    return "HINT_NOPREALLOC";
+  if (state & 0x0800)
+    return "HINT_GRP_ALLOCE";
+  if (state & 0x2000)
+    return "HINT_GOAL_ONLY";
+  return "";
+}
+
+const char* GetExt4FreeBlocksFlag(int32_t state) {
+  if (state & 0x0001)
+    return "METADATA";
+  if (state & 0x0002)
+    return "FORGET";
+  if (state & 0x0004)
+    return "VALIDATED";
+  if (state & 0x0008)
+    return "NO_QUOTA";
+  if (state & 0x0010)
+    return "1ST_CLUSTER";
+  if (state & 0x0020)
+    return "LAST_CLUSTER";
+  return "";
+}
+
+const char* GetExt4ModeFlag(int32_t state) {
+  if (state & 0x01)
+    return "KEEP_SIZE";
+  if (state & 0x02)
+    return "PUNCH_HOLE";
+  if (state & 0x04)
+    return "NO_HIDE_STALE";
+  if (state & 0x08)
+    return "COLLAPSE_RANGE";
+  if (state & 0x10)
+    return "ZERO_RANGE";
+  return "";
+}
+
+const char* GetExt4ExtFlag(int32_t state) {
+  if (state & 0x0001)
+    return "CREATE";
+  if (state & 0x0002)
+    return "UNWRIT";
+  if (state & 0x0004)
+    return "DEALLOC";
+  if (state & 0x0008)
+    return "PRE_IO";
+  if (state & 0x0010)
+    return "CONVERT";
+  if (state & 0x0020)
+    return "METADATA_NOFAIL";
+  if (state & 0x0040)
+    return "NO_NORMALIZE";
+  if (state & 0x0080)
+    return "KEEP_SIZE";
+  if (state & 0x0100)
+    return "NO_LOCK";
+  return "";
+}
+
 const char* MmCompactionRetArray[] = {
     "deferred", "skipped",          "continue",          "partial",
     "complete", "no_suitable_page", "not_suitable_zone", "contended"};
@@ -264,7 +464,8 @@
           "prev_pid=%d prev_prio=%d prev_state=%s ==> next_comm=%s next_pid=%d "
           "next_prio=%d\\n",
           sched_switch.prev_comm().c_str(), sched_switch.prev_pid(),
-          sched_switch.prev_prio(), GetFlag(sched_switch.prev_state()),
+          sched_switch.prev_prio(),
+          GetSchedSwitchFlag(sched_switch.prev_state()),
           sched_switch.next_comm().c_str(), sched_switch.next_pid(),
           sched_switch.next_prio());
   return std::string(line);
@@ -842,6 +1043,1187 @@
   return std::string(line);
 }
 
+std::string FormatBlockBioBackmerge(const BlockBioBackmergeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_bio_backmerge: %d,%d %s %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockBioBounce(const BlockBioBounceFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "block_bio_bounce:"
+          "%d,%d %s %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockBioComplete(const BlockBioCompleteFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_bio_complete: %d,%d %s %llu + %u [%d]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(), event.error());
+  return std::string(line);
+}
+
+std::string FormatBlockBioFrontmerge(
+    const BlockBioFrontmergeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_bio_frontmerge: %d,%d %s %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockBioQueue(const BlockBioQueueFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_bio_queue: %d,%d %s %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockBioRemap(const BlockBioRemapFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_bio_remap:  %d,%d %s %llu + %u <- (%d,%d) %llu\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          (unsigned int)(event.old_dev() >> 20),
+          (unsigned int)(event.old_dev() & ((1U << 20) - 1)),
+          (unsigned long long)event.old_sector());
+  return std::string(line);
+}
+
+std::string FormatBlockDirtyBuffer(const BlockDirtyBufferFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_dirty_buffer: %d,%d sector=%llu size=%zu\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)),
+          (unsigned long long)event.sector(), (unsigned long)event.size());
+  return std::string(line);
+}
+
+std::string FormatBlockGetrq(const BlockGetrqFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_getrq: %d,%d %s %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockPlug(const BlockPlugFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_plug: comm=[%s]\\n", event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockRqAbort(const BlockRqAbortFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_rq_abort: %d,%d %s (%s) %llu + %u [%d]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          event.cmd().c_str(), (unsigned long long)event.sector(),
+          event.nr_sector(), event.errors());
+  return std::string(line);
+}
+
+std::string FormatBlockRqComplete(const BlockRqCompleteFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_rq_complete: %d,%d %s (%s) %llu + %u [%d]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          event.cmd().c_str(), (unsigned long long)event.sector(),
+          event.nr_sector(), event.errors());
+  return std::string(line);
+}
+
+std::string FormatBlockRqInsert(const BlockRqInsertFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_rq_insert: %d,%d %s %u (%s) %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          event.bytes(), event.cmd().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockRqRemap(const BlockRqRemapFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_rq_remap: %d,%d %s %llu + %u <- (%d,%d) %llu %u\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          (unsigned int)(event.old_dev() >> 20),
+          (unsigned int)(event.old_dev() & ((1U << 20) - 1)),
+          (unsigned long long)event.old_sector(), event.nr_bios());
+  return std::string(line);
+}
+
+std::string FormatBlockRqRequeue(const BlockRqRequeueFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_rq_requeue: %d,%d %s (%s) %llu + %u [%d\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          event.cmd().c_str(), (unsigned long long)event.sector(),
+          event.nr_sector(), event.errors());
+  return std::string(line);
+}
+
+std::string FormatBlockSleeprq(const BlockSleeprqFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_sleeprq: %d,%d %s %llu + %u [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(), event.nr_sector(),
+          event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockSplit(const BlockSplitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_split: %d,%d %s %llu / %llu [%s]\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)), event.rwbs().c_str(),
+          (unsigned long long)event.sector(),
+          (unsigned long long)event.new_sector(), event.comm().c_str());
+  return std::string(line);
+}
+
+std::string FormatBlockTouchBuffer(const BlockTouchBufferFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_touch_buffer: %d,%d sector=%llu size=%zu\\n",
+          (unsigned int)(event.dev() >> 20),
+          (unsigned int)(event.dev() & ((1U << 20) - 1)),
+          (unsigned long long)event.sector(), (unsigned long)event.size());
+  return std::string(line);
+}
+
+std::string FormatBlockUnplug(const BlockUnplugFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "block_unplug: [%s] %d\\n", event.comm().c_str(),
+          event.nr_rq());
+  return std::string(line);
+}
+
+std::string FormatExt4AllocDaBlocks(const Ext4AllocDaBlocksFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_alloc_da_blocks: dev %d,%d ino %lu data_blocks %u meta_blocks "
+          "%u \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.data_blocks(), event.meta_blocks());
+  return std::string(line);
+}
+
+std::string FormatExt4AllocateBlocks(
+    const Ext4AllocateBlocksFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_allocate_blocks: dev %d,%d ino %lu flags %s len %u block %llu "
+          "lblk %u goal %llu lleft %u lright %u pleft %llu pright %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), GetExt4HintFlag(event.flags()),
+          event.len(), event.block(), event.logical(), event.goal(),
+          event.lleft(), event.lright(), event.pleft(), event.pright());
+  return std::string(line);
+}
+
+std::string FormatExt4AllocateInode(const Ext4AllocateInodeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_allocate_inode: dev %d,%d ino %lu dir %lu mode 0%o\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.dir(), event.mode());
+  return std::string(line);
+}
+
+std::string FormatExt4BeginOrderedTruncate(
+    const Ext4BeginOrderedTruncateFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_begin_ordered_truncate: dev %d,%d ino %lu new_size %lld\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.new_size());
+  return std::string(line);
+}
+
+std::string FormatExt4CollapseRange(const Ext4CollapseRangeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_collapse_range: dev %d,%d ino %lu offset %lld len %lld\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.offset(), event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4DaReleaseSpace(
+    const Ext4DaReleaseSpaceFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_da_release_space: dev %d,%d ino %lu mode 0%o i_blocks %llu "
+          "freed_blocks %d reserved_data_blocks %d reserved_meta_blocks %d "
+          "allocated_meta_blocks %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.mode(), event.i_blocks(),
+          event.freed_blocks(), event.reserved_data_blocks(),
+          event.reserved_meta_blocks(), event.allocated_meta_blocks());
+  return std::string(line);
+}
+
+std::string FormatExt4DaReserveSpace(
+    const Ext4DaReserveSpaceFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_da_reserve_space:dev %d,%d ino %lu mode 0%o i_blocks %llu "
+          "reserved_data_blocks %d reserved_meta_blocks %d \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.mode(), event.i_blocks(),
+          event.reserved_data_blocks(), event.reserved_meta_blocks());
+  return std::string(line);
+}
+
+std::string FormatExt4DaUpdateReserveSpace(
+    const Ext4DaUpdateReserveSpaceFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_da_update_reserve_space: dev %d,%d ino %lu mode 0%o i_blocks "
+          "%llu used_blocks %d reserved_data_blocks %d reserved_meta_blocks %d "
+          "allocated_meta_blocks %d quota_claim %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.mode(), event.i_blocks(),
+          event.used_blocks(), event.reserved_data_blocks(),
+          event.reserved_meta_blocks(), event.allocated_meta_blocks(),
+          event.quota_claim());
+  return std::string(line);
+}
+
+std::string FormatExt4DaWritePages(const Ext4DaWritePagesFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_da_write_pages: dev %d,%d ino %lu first_page %lu nr_to_write "
+          "%ld sync_mode %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.first_page(),
+          (long)event.nr_to_write(), event.sync_mode());
+  return std::string(line);
+}
+
+// TODO(hjd): Check flags
+std::string FormatExt4DaWritePagesExtent(
+    const Ext4DaWritePagesExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_da_write_pages_extent: dev %d,%d ino %lu lblk %llu len %u \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4DiscardBlocks(const Ext4DiscardBlocksFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_discard_blocks: dev %d,%d blk %llu count %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.blk(),
+          event.count());
+  return std::string(line);
+}
+
+std::string FormatExt4DiscardPreallocations(
+    const Ext4DiscardPreallocationsFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_discard_preallocations: dev %d,%d ino %lu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino());
+  return std::string(line);
+}
+
+std::string FormatExt4DropInode(const Ext4DropInodeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_drop_inode: dev %d,%d ino %lu drop %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.drop());
+  return std::string(line);
+}
+
+// TODO(hjd): Check Es status flags
+std::string FormatExt4EsCacheExtent(const Ext4EsCacheExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_es_cache_extent: dev %d,%d ino %lu es [%u/%u) mapped %llu \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.len(), event.pblk());
+  return std::string(line);
+}
+
+std::string FormatExt4EsFindDelayedExtentRangeEnter(
+    const Ext4EsFindDelayedExtentRangeEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_es_find_delayed_extent_range_enter: dev %d,%d ino %lu lblk %u\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), event.lblk());
+  return std::string(line);
+}
+
+// TODO(hjd): Check Es status flags
+std::string FormatExt4EsFindDelayedExtentRangeExit(
+    const Ext4EsFindDelayedExtentRangeExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_es_find_delayed_extent_range_exit: dev %d,%d ino %lu es "
+          "[%u/%u) mapped %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.len(), event.pblk());
+  return std::string(line);
+}
+
+// TODO(hjd): Check Es status flags
+std::string FormatExt4EsInsertExtent(
+    const Ext4EsInsertExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_es_insert_extent: dev %d,%d ino %lu es [%u/%u) mapped %llu \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.len(), event.pblk());
+  return std::string(line);
+}
+
+std::string FormatExt4EsLookupExtentEnter(
+    const Ext4EsLookupExtentEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_es_lookup_extent_enter: dev %d,%d ino %lu lblk %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk());
+  return std::string(line);
+}
+
+// TODO(hjd): Check Es status flags
+std::string FormatExt4EsLookupExtentExit(
+    const Ext4EsLookupExtentExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_es_lookup_extent_exit: dev %d,%d ino %lu found %d [%u/%u) %llu\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), event.found(), event.lblk(), event.len(),
+      event.found() ? event.pblk() : 0);
+  return std::string(line);
+}
+
+std::string FormatExt4EsRemoveExtent(
+    const Ext4EsRemoveExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_es_remove_extent: dev %d,%d ino %lu es [%lld/%lld)\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4EsShrink(const Ext4EsShrinkFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_es_shrink: dev %d,%d nr_shrunk %d, scan_time %llu nr_skipped "
+          "%d retried %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.nr_shrunk(),
+          event.scan_time(), event.nr_skipped(), event.retried());
+  return std::string(line);
+}
+
+std::string FormatExt4EsShrinkCount(const Ext4EsShrinkCountFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_es_shrink_count: dev %d,%d nr_to_scan %d cache_cnt %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          event.nr_to_scan(), event.cache_cnt());
+  return std::string(line);
+}
+
+std::string FormatExt4EsShrinkScanEnter(
+    const Ext4EsShrinkScanEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_es_shrink_scan_enter: dev %d,%d nr_to_scan %d cache_cnt %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          event.nr_to_scan(), event.cache_cnt());
+  return std::string(line);
+}
+
+std::string FormatExt4EsShrinkScanExit(
+    const Ext4EsShrinkScanExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_es_shrink_scan_exit: dev %d,%d nr_shrunk %d cache_cnt %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.nr_shrunk(),
+          event.cache_cnt());
+  return std::string(line);
+}
+
+std::string FormatExt4EvictInode(const Ext4EvictInodeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_evict_inode: dev %d,%d ino %lu nlink %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.nlink());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtConvertToInitializedEnter(
+    const Ext4ExtConvertToInitializedEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_convert_to_initialized_enter: dev %d,%d ino %lu m_lblk %u "
+          "m_len %u u_lblk %u u_len %u u_pblk %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.m_lblk(), event.m_len(),
+          event.u_lblk(), event.u_len(), event.u_pblk());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtConvertToInitializedFastpath(
+    const Ext4ExtConvertToInitializedFastpathFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_convert_to_initialized_fastpath: dev %d,%d ino %lu m_lblk "
+          "%u m_len %u u_lblk %u u_len %u u_pblk %llu i_lblk %u i_len %u "
+          "i_pblk %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.m_lblk(), event.m_len(),
+          event.u_lblk(), event.u_len(), event.u_pblk(), event.i_lblk(),
+          event.i_len(), event.i_pblk());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtHandleUnwrittenExtents(
+    const Ext4ExtHandleUnwrittenExtentsFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_handle_unwritten_extents: dev %d,%d ino %lu m_lblk %u "
+          "m_pblk %llu m_len %u flags %s allocated %d newblock %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.lblk(),
+          (unsigned long long)event.pblk(), event.len(),
+          GetExt4ExtFlag(event.flags()), (unsigned int)event.allocated(),
+          (unsigned long long)event.newblk());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtInCache(const Ext4ExtInCacheFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_ext_in_cache: dev %d,%d ino %lu lblk %u ret %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.lblk(), event.ret());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtLoadExtent(const Ext4ExtLoadExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_ext_load_extent: dev %d,%d ino %lu lblk %u pblk %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.pblk());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtMapBlocksEnter(
+    const Ext4ExtMapBlocksEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_ext_map_blocks_enter: dev %d,%d ino %lu lblk %u len %u flags %s\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), event.lblk(), event.len(),
+      GetExt4ExtFlag(event.flags()));
+  return std::string(line);
+}
+
+std::string FormatExt4ExtMapBlocksExit(
+    const Ext4ExtMapBlocksExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_map_blocks_exit: dev %d,%d ino %lu lblk %u pblk %llu len "
+          "%u flags %x ret %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.pblk(), event.len(),
+          event.flags(), event.ret());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtPutInCache(const Ext4ExtPutInCacheFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_ext_put_in_cache: dev %d,%d ino %lu lblk %u len %u start %llu\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), (unsigned)event.lblk(), event.len(),
+      (unsigned long long)event.start());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtRemoveSpace(
+    const Ext4ExtRemoveSpaceFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_ext_remove_space: dev %d,%d ino %lu since %u end %u depth %d\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), (unsigned)event.start(),
+      (unsigned)event.end(), event.depth());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtRemoveSpaceDone(
+    const Ext4ExtRemoveSpaceDoneFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_remove_space_done: dev %d,%d ino %lu since %u end %u depth "
+          "%d partial %lld remaining_entries %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.start(),
+          (unsigned)event.end(), event.depth(), (long long)event.partial(),
+          (unsigned short)event.eh_entries());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtRmIdx(const Ext4ExtRmIdxFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_ext_rm_idx: dev %d,%d ino %lu index_pblk %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long long)event.pblk());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtRmLeaf(const Ext4ExtRmLeafFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_rm_leaf: dev %d,%d ino %lu start_lblk %u last_extent "
+          "[%u(%llu), %u]partial_cluster %lld\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.start(),
+          (unsigned)event.ee_lblk(), (unsigned long long)event.ee_pblk(),
+          (unsigned short)event.ee_len(), (long long)event.partial());
+  return std::string(line);
+}
+
+std::string FormatExt4ExtShowExtent(const Ext4ExtShowExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ext_show_extent: dev %d,%d ino %lu lblk %u pblk %llu len %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.lblk(),
+          (unsigned long long)event.pblk(), (unsigned short)event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4FallocateEnter(
+    const Ext4FallocateEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_fallocate_enter: dev %d,%d ino %lu offset %lld len %lld mode %s\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), event.offset(), event.len(),
+      GetExt4ModeFlag(event.mode()));
+  return std::string(line);
+}
+
+std::string FormatExt4FallocateExit(const Ext4FallocateExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_fallocate_exit: dev %d,%d ino %lu pos %lld blocks %u ret %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.pos(), event.blocks(), event.ret());
+  return std::string(line);
+}
+
+std::string FormatExt4FindDelallocRange(
+    const Ext4FindDelallocRangeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_find_delalloc_range: dev %d,%d ino %lu from %u to %u reverse "
+          "%d found %d (blk = %u)\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.from(),
+          (unsigned)event.to(), event.reverse(), event.found(),
+          (unsigned)event.found_blk());
+  return std::string(line);
+}
+
+std::string FormatExt4Forget(const Ext4ForgetFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_forget: dev %d,%d ino %lu mode 0%o is_metadata %d block %llu\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), event.mode(), event.is_metadata(),
+      event.block());
+  return std::string(line);
+}
+
+std::string FormatExt4FreeBlocks(const Ext4FreeBlocksFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_free_blocks: dev %d,%d ino %lu mode 0%o block %llu count %lu "
+          "flags %s\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.mode(), event.block(),
+          (unsigned long)event.count(), GetExt4FreeBlocksFlag(event.flags()));
+  return std::string(line);
+}
+
+std::string FormatExt4FreeInode(const Ext4FreeInodeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_free_inode: dev %d,%d ino %lu mode 0%o uid %u gid %u blocks "
+          "%llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.mode(), event.uid(), event.gid(),
+          event.blocks());
+  return std::string(line);
+}
+
+std::string FormatExt4GetImpliedClusterAllocExit(
+    const Ext4GetImpliedClusterAllocExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_get_implied_cluster_alloc_exit: dev %d,%d m_lblk %u m_pblk "
+          "%llu m_len %u m_flags %u ret %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.lblk(),
+          (unsigned long long)event.pblk(), event.len(), event.flags(),
+          event.ret());
+  return std::string(line);
+}
+
+std::string FormatExt4GetReservedClusterAlloc(
+    const Ext4GetReservedClusterAllocFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_get_reserved_cluster_alloc: dev %d,%d ino %lu lblk %u len %u\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), (unsigned)event.lblk(), event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4IndMapBlocksEnter(
+    const Ext4IndMapBlocksEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_ind_map_blocks_enter: dev %d,%d ino %lu lblk %u len %u flags %u\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+      (unsigned long)event.ino(), event.lblk(), event.len(), event.flags());
+  return std::string(line);
+}
+
+std::string FormatExt4IndMapBlocksExit(
+    const Ext4IndMapBlocksExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_ind_map_blocks_exit: dev %d,%d ino %lu lblk %u pblk %llu len "
+          "%u flags %x ret %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.lblk(), event.pblk(), event.len(),
+          event.flags(), event.ret());
+  return std::string(line);
+}
+
+std::string FormatExt4InsertRange(const Ext4InsertRangeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_insert_range: dev %d,%d ino %lu offset %lld len %lld\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.offset(), event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4Invalidatepage(
+    const Ext4InvalidatepageFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_invalidatepage: dev %d,%d ino %lu page_index %lu offset %u "
+          "length %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.index(),
+          event.offset(), event.length());
+  return std::string(line);
+}
+
+std::string FormatExt4JournalStart(const Ext4JournalStartFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "ext4_journal_start: dev %d,%d blocks, %d rsv_blocks, %d caller %pS\\n",
+      ((unsigned int)((event.dev()) >> 20)),
+      ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.blocks(),
+      event.rsv_blocks(), (void*)event.ip());
+  return std::string(line);
+}
+
+std::string FormatExt4JournalStartReserved(
+    const Ext4JournalStartReservedFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_journal_start_reserved: dev %d,%d blocks, %d caller %pS\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.blocks(),
+          (void*)event.ip());
+  return std::string(line);
+}
+
+std::string FormatExt4JournalledInvalidatepage(
+    const Ext4JournalledInvalidatepageFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_journalled_invalidatepage: dev %d,%d ino %lu page_index %lu "
+          "offset %u length %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.index(),
+          event.offset(), event.length());
+  return std::string(line);
+}
+
+std::string FormatExt4JournalledWriteEnd(
+    const Ext4JournalledWriteEndFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_journalled_write_end: dev %d,%d ino %lu pos %lld len %u copied "
+          "%u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.pos(), event.len(), event.copied());
+  return std::string(line);
+}
+
+std::string FormatExt4LoadInode(const Ext4LoadInodeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_load_inode: dev %d,%d ino %ld\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino());
+  return std::string(line);
+}
+
+std::string FormatExt4LoadInodeBitmap(
+    const Ext4LoadInodeBitmapFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_load_inode_bitmap: dev %d,%d group %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.group());
+  return std::string(line);
+}
+
+std::string FormatExt4MarkInodeDirty(
+    const Ext4MarkInodeDirtyFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mark_inode_dirty: dev %d,%d ino %lu caller %pS\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (void*)event.ip());
+  return std::string(line);
+}
+
+std::string FormatExt4MbBitmapLoad(const Ext4MbBitmapLoadFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mb_bitmap_load: dev %d,%d group %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.group());
+  return std::string(line);
+}
+
+std::string FormatExt4MbBuddyBitmapLoad(
+    const Ext4MbBuddyBitmapLoadFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mb_buddy_bitmap_load: dev %d,%d group %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.group());
+  return std::string(line);
+}
+
+std::string FormatExt4MbDiscardPreallocations(
+    const Ext4MbDiscardPreallocationsFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mb_discard_preallocations: dev %d,%d needed %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.needed());
+  return std::string(line);
+}
+
+std::string FormatExt4MbNewGroupPa(const Ext4MbNewGroupPaFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_mb_new_group_pa: dev %d,%d ino %lu pstart %llu len %u lstart "
+          "%llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.pa_pstart(), event.pa_len(),
+          event.pa_lstart());
+  return std::string(line);
+}
+
+std::string FormatExt4MbNewInodePa(const Ext4MbNewInodePaFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_mb_new_inode_pa: dev %d,%d ino %lu pstart %llu len %u lstart "
+          "%llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.pa_pstart(), event.pa_len(),
+          event.pa_lstart());
+  return std::string(line);
+}
+
+std::string FormatExt4MbReleaseGroupPa(
+    const Ext4MbReleaseGroupPaFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mb_release_group_pa: dev %d,%d pstart %llu len %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.pa_pstart(),
+          event.pa_len());
+  return std::string(line);
+}
+
+std::string FormatExt4MbReleaseInodePa(
+    const Ext4MbReleaseInodePaFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_mb_release_inode_pa: dev %d,%d ino %lu block %llu count %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.block(), event.count());
+  return std::string(line);
+}
+
+std::string FormatExt4MballocAlloc(const Ext4MballocAllocFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_mballoc_alloc: dev %d,%d inode %lu orig %u/%d/%u@%u goal "
+          "%u/%d/%u@%u result %u/%d/%u@%u blks %u grps %u cr %u flags %s tail "
+          "%u broken %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.orig_group(), event.orig_start(),
+          event.orig_len(), event.orig_logical(), event.goal_group(),
+          event.goal_start(), event.goal_len(), event.goal_logical(),
+          event.result_group(), event.result_start(), event.result_len(),
+          event.result_logical(), event.found(), event.groups(), event.cr(),
+          GetExt4HintFlag(event.flags()), event.tail(),
+          event.buddy() ? 1 << event.buddy() : 0);
+  return std::string(line);
+}
+
+std::string FormatExt4MballocDiscard(
+    const Ext4MballocDiscardFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mballoc_discard: dev %d,%d inode %lu extent %u/%d/%d \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.result_group(),
+          event.result_start(), event.result_len());
+  return std::string(line);
+}
+
+std::string FormatExt4MballocFree(const Ext4MballocFreeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_mballoc_free: dev %d,%d inode %lu extent %u/%d/%d \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.result_group(),
+          event.result_start(), event.result_len());
+  return std::string(line);
+}
+
+std::string FormatExt4MballocPrealloc(
+    const Ext4MballocPreallocFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_mballoc_prealloc: dev %d,%d inode %lu orig %u/%d/%u@%u result "
+          "%u/%d/%u@%u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.orig_group(), event.orig_start(),
+          event.orig_len(), event.orig_logical(), event.result_group(),
+          event.result_start(), event.result_len(), event.result_logical());
+  return std::string(line);
+}
+
+std::string FormatExt4OtherInodeUpdateTime(
+    const Ext4OtherInodeUpdateTimeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_other_inode_update_time: dev %d,%d orig_ino %lu ino %lu mode "
+          "0%o uid %u gid %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.orig_ino(), (unsigned long)event.ino(),
+          event.mode(), event.uid(), event.gid());
+  return std::string(line);
+}
+
+std::string FormatExt4PunchHole(const Ext4PunchHoleFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_punch_hole: dev %d,%d ino %lu offset %lld len %lld mode %s\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.offset(), event.len(),
+          GetExt4ModeFlag(event.mode()));
+  return std::string(line);
+}
+
+std::string FormatExt4ReadBlockBitmapLoad(
+    const Ext4ReadBlockBitmapLoadFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_read_block_bitmap_load: dev %d,%d group %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.group());
+  return std::string(line);
+}
+
+std::string FormatExt4Readpage(const Ext4ReadpageFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_readpage: dev %d,%d ino %lu page_index %lu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.index());
+  return std::string(line);
+}
+
+std::string FormatExt4Releasepage(const Ext4ReleasepageFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_releasepage: dev %d,%d ino %lu page_index %lu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.index());
+  return std::string(line);
+}
+
+std::string FormatExt4RemoveBlocks(const Ext4RemoveBlocksFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_remove_blocks: dev %d,%d ino %lu extent [%u(%llu), %u]from %u "
+          "to %u partial_cluster %lld\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned)event.ee_lblk(),
+          (unsigned long long)event.ee_pblk(), (unsigned short)event.ee_len(),
+          (unsigned)event.from(), (unsigned)event.to(),
+          (long long)event.partial());
+  return std::string(line);
+}
+
+std::string FormatExt4RequestBlocks(const Ext4RequestBlocksFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_request_blocks: dev %d,%d ino %lu flags %s len %u lblk %u goal "
+          "%llu lleft %u lright %u pleft %llu pright %llu \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), GetExt4HintFlag(event.flags()),
+          event.len(), event.logical(), event.goal(), event.lleft(),
+          event.lright(), event.pleft(), event.pright());
+  return std::string(line);
+}
+
+std::string FormatExt4RequestInode(const Ext4RequestInodeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_request_inode: dev %d,%d dir %lu mode 0%o\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.dir(), event.mode());
+  return std::string(line);
+}
+
+std::string FormatExt4SyncFs(const Ext4SyncFsFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_sync_fs: dev %d,%d wait %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))), event.wait());
+  return std::string(line);
+}
+
+std::string FormatExt4TrimAllFree(const Ext4TrimAllFreeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_trim_all_free: dev %d,%d group %u, start %d, len %d\\n",
+          event.dev_major(), event.dev_minor(), event.group(), event.start(),
+          event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4TrimExtent(const Ext4TrimExtentFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_trim_extent: dev %d,%d group %u, start %d, len %d\\n",
+          event.dev_major(), event.dev_minor(), event.group(), event.start(),
+          event.len());
+  return std::string(line);
+}
+
+std::string FormatExt4TruncateEnter(const Ext4TruncateEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_truncate_enter: dev %d,%d ino %lu blocks %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.blocks());
+  return std::string(line);
+}
+
+std::string FormatExt4TruncateExit(const Ext4TruncateExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_truncate_exit: dev %d,%d ino %lu blocks %llu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.blocks());
+  return std::string(line);
+}
+
+std::string FormatExt4UnlinkEnter(const Ext4UnlinkEnterFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_unlink_enter: dev %d,%d ino %lu size %lld parent %lu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.size(),
+          (unsigned long)event.parent());
+  return std::string(line);
+}
+
+std::string FormatExt4UnlinkExit(const Ext4UnlinkExitFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_unlink_exit: dev %d,%d ino %lu ret %d\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.ret());
+  return std::string(line);
+}
+
+std::string FormatExt4WriteBegin(const Ext4WriteBeginFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_write_begin: dev %d,%d ino %lu pos %lld len %u flags %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.pos(), event.len(), event.flags());
+  return std::string(line);
+}
+
+std::string FormatExt4WriteEnd(const Ext4WriteEndFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_write_end: %d,%d ino %lu pos %lld len %u copied %u\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.pos(), event.len(), event.copied());
+  return std::string(line);
+}
+
+std::string FormatExt4Writepage(const Ext4WritepageFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "ext4_writepage: dev %d,%d ino %lu page_index %lu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (unsigned long)event.index());
+  return std::string(line);
+}
+
+std::string FormatExt4Writepages(const Ext4WritepagesFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_writepages: dev %d,%d ino %lu nr_to_write %ld pages_skipped "
+          "%ld range_start %lld range_end %lld sync_mode %d for_kupdate %d "
+          "range_cyclic %d writeback_index %lu\\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), (long)event.nr_to_write(),
+          (long)event.pages_skipped(), event.range_start(), event.range_end(),
+          event.sync_mode(), event.for_kupdate(), event.range_cyclic(),
+          (unsigned long)event.writeback_index());
+  return std::string(line);
+}
+
+std::string FormatExt4WritepagesResult(
+    const Ext4WritepagesResultFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_writepages_result: dev %d,%d ino %lu ret %d pages_written %d "
+          "pages_skipped %ld sync_mode %d writeback_index %lu \\n",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.ret(), event.pages_written(),
+          (long)event.pages_skipped(), event.sync_mode(),
+          (unsigned long)event.writeback_index());
+  return std::string(line);
+}
+
+std::string FormatExt4ZeroRange(const Ext4ZeroRangeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "ext4_zero_range: dev %d,%d ino %lu offset %lld len %lld mode %s\\n ",
+          ((unsigned int)((event.dev()) >> 20)),
+          ((unsigned int)((event.dev()) & ((1U << 20) - 1))),
+          (unsigned long)event.ino(), event.offset(), event.len(),
+          GetExt4ModeFlag(event.mode()));
+  return std::string(line);
+}
+
 // TODO(taylori): Confirm correct format for this.
 std::string FormatProcess(const Process& process) {
   char line[2048];
@@ -890,165 +2272,90 @@
     const FtraceEventBundle& bundle = packet.ftrace_events();
     for (const FtraceEvent& event : bundle.event()) {
       std::string line;
-      if (event.has_sched_switch()) {
-        const auto& inner = event.sched_switch();
-        line = FormatSchedSwitch(inner);
-      } else if (event.has_sched_wakeup()) {
-        const auto& inner = event.sched_wakeup();
-        line = FormatSchedWakeup(inner);
-      } else if (event.has_sched_blocked_reason()) {
-        const auto& inner = event.sched_blocked_reason();
-        line = FormatSchedBlockedReason(inner);
-      } else if (event.has_tracing_mark_write()) {
-        const auto& inner = event.tracing_mark_write();
-        line = FormatTracingMarkWrite(inner);
+      if (event.has_binder_lock()) {
+        const auto& inner = event.binder_lock();
+        line = FormatBinderLock(inner);
       } else if (event.has_binder_locked()) {
         const auto& inner = event.binder_locked();
         line = FormatBinderLocked(inner);
-      } else if (event.has_binder_unlock()) {
-        const auto& inner = event.binder_unlock();
-        line = FormatBinderUnlock(inner);
-      } else if (event.has_binder_lock()) {
-        const auto& inner = event.binder_lock();
-        line = FormatBinderLock(inner);
       } else if (event.has_binder_transaction()) {
         const auto& inner = event.binder_transaction();
         line = FormatBinderTransaction(inner);
       } else if (event.has_binder_transaction_received()) {
         const auto& inner = event.binder_transaction_received();
         line = FormatBinderTransactionReceived(inner);
-      } else if (event.has_ext4_sync_file_enter()) {
-        const auto& inner = event.ext4_sync_file_enter();
-        line = FormatExt4SyncFileEnter(inner);
-      } else if (event.has_ext4_sync_file_exit()) {
-        const auto& inner = event.ext4_sync_file_exit();
-        line = FormatExt4SyncFileExit(inner);
-      } else if (event.has_ext4_da_write_begin()) {
-        const auto& inner = event.ext4_da_write_begin();
-        line = FormatExt4DaWriteBegin(inner);
-      } else if (event.has_ext4_da_write_end()) {
-        const auto& inner = event.ext4_da_write_end();
-        line = FormatExt4DaWriteEnd(inner);
+      } else if (event.has_binder_unlock()) {
+        const auto& inner = event.binder_unlock();
+        line = FormatBinderUnlock(inner);
+      } else if (event.has_block_bio_backmerge()) {
+        const auto& inner = event.block_bio_backmerge();
+        line = FormatBlockBioBackmerge(inner);
+      } else if (event.has_block_bio_bounce()) {
+        const auto& inner = event.block_bio_bounce();
+        line = FormatBlockBioBounce(inner);
+      } else if (event.has_block_bio_complete()) {
+        const auto& inner = event.block_bio_complete();
+        line = FormatBlockBioComplete(inner);
+      } else if (event.has_block_bio_frontmerge()) {
+        const auto& inner = event.block_bio_frontmerge();
+        line = FormatBlockBioFrontmerge(inner);
+      } else if (event.has_block_bio_queue()) {
+        const auto& inner = event.block_bio_queue();
+        line = FormatBlockBioQueue(inner);
+      } else if (event.has_block_bio_remap()) {
+        const auto& inner = event.block_bio_remap();
+        line = FormatBlockBioRemap(inner);
+      } else if (event.has_block_dirty_buffer()) {
+        const auto& inner = event.block_dirty_buffer();
+        line = FormatBlockDirtyBuffer(inner);
+      } else if (event.has_block_getrq()) {
+        const auto& inner = event.block_getrq();
+        line = FormatBlockGetrq(inner);
+      } else if (event.has_block_plug()) {
+        const auto& inner = event.block_plug();
+        line = FormatBlockPlug(inner);
+      } else if (event.has_block_rq_abort()) {
+        const auto& inner = event.block_rq_abort();
+        line = FormatBlockRqAbort(inner);
+      } else if (event.has_block_rq_complete()) {
+        const auto& inner = event.block_rq_complete();
+        line = FormatBlockRqComplete(inner);
+      } else if (event.has_block_rq_insert()) {
+        const auto& inner = event.block_rq_insert();
+        line = FormatBlockRqInsert(inner);
       } else if (event.has_block_rq_issue()) {
         const auto& inner = event.block_rq_issue();
         line = FormatBlockRqIssue(inner);
-      } else if (event.has_i2c_read()) {
-        const auto& inner = event.i2c_read();
-        line = FormatI2cRead(inner);
-      } else if (event.has_i2c_result()) {
-        const auto& inner = event.i2c_result();
-        line = FormatI2cResult(inner);
-      } else if (event.has_irq_handler_entry()) {
-        const auto& inner = event.irq_handler_entry();
-        line = FormatIrqHandlerEntry(inner);
-      } else if (event.has_irq_handler_exit()) {
-        const auto& inner = event.irq_handler_exit();
-        line = FormatIrqHandlerExit(inner);
-      } else if (event.has_mm_vmscan_kswapd_wake()) {
-        const auto& inner = event.mm_vmscan_kswapd_wake();
-        line = FormatMmVmscanKswapdWake(inner);
-      } else if (event.has_mm_vmscan_kswapd_sleep()) {
-        const auto& inner = event.mm_vmscan_kswapd_sleep();
-        line = FormatMmVmscanKswapdSleep(inner);
-      } else if (event.has_regulator_enable()) {
-        const auto& inner = event.regulator_enable();
-        line = FormatRegulatorEnable(inner);
-      } else if (event.has_regulator_enable_delay()) {
-        const auto& inner = event.regulator_enable_delay();
-        line = FormatRegulatorEnableDelay(inner);
-      } else if (event.has_regulator_enable_complete()) {
-        const auto& inner = event.regulator_enable_complete();
-        line = FormatRegulatorEnableComplete(inner);
-      } else if (event.has_regulator_disable()) {
-        const auto& inner = event.regulator_disable();
-        line = FormatRegulatorDisable(inner);
-      } else if (event.has_regulator_disable_complete()) {
-        const auto& inner = event.regulator_disable_complete();
-        line = FormatRegulatorDisableComplete(inner);
-      } else if (event.has_regulator_set_voltage()) {
-        const auto& inner = event.regulator_set_voltage();
-        line = FormatRegulatorSetVoltage(inner);
-      } else if (event.has_regulator_set_voltage_complete()) {
-        const auto& inner = event.regulator_set_voltage_complete();
-        line = FormatRegulatorSetVoltageComplete(inner);
-      } else if (event.has_sched_cpu_hotplug()) {
-        const auto& inner = event.sched_cpu_hotplug();
-        line = FormatSchedCpuHotplug(inner);
-      } else if (event.has_sync_timeline()) {
-        const auto& inner = event.sync_timeline();
-        line = FormatSyncTimeline(inner);
-      } else if (event.has_sync_wait()) {
-        const auto& inner = event.sync_wait();
-        line = FormatSyncWait(inner);
-      } else if (event.has_sync_pt()) {
-        const auto& inner = event.sync_pt();
-        line = FormatSyncPt(inner);
-      } else if (event.has_print()) {
-        const auto& inner = event.print();
-        line = FormatPrint(inner);
-      } else if (event.has_cpu_frequency()) {
-        const auto& inner = event.cpu_frequency();
-        line = FormatCpuFrequency(inner);
-      } else if (event.has_cpu_frequency_limits()) {
-        const auto& inner = event.cpu_frequency_limits();
-        line = FormatCpuFrequencyLimits(inner);
-      } else if (event.has_cpu_idle()) {
-        const auto& inner = event.cpu_idle();
-        line = FormatCpuIdle(inner);
-      } else if (event.has_clock_set_rate()) {
-        const auto& inner = event.clock_set_rate();
-        line = FormatClockSetRate(inner);
-      } else if (event.has_clock_enable()) {
-        const auto& inner = event.clock_enable();
-        line = FormatClockEnable(inner);
-      } else if (event.has_clock_disable()) {
-        const auto& inner = event.clock_disable();
-        line = FormatClockDisable(inner);
-      } else if (event.has_i2c_write()) {
-        const auto& inner = event.i2c_write();
-        line = FormatI2cWrite(inner);
-      } else if (event.has_i2c_reply()) {
-        const auto& inner = event.i2c_reply();
-        line = FormatI2cReply(inner);
-      } else if (event.has_softirq_raise()) {
-        const auto& inner = event.softirq_raise();
-        line = FormatSoftirqRaise(inner);
-      } else if (event.has_softirq_entry()) {
-        const auto& inner = event.softirq_entry();
-        line = FormatSoftirqEntry(inner);
-      } else if (event.has_softirq_exit()) {
-        const auto& inner = event.softirq_exit();
-        line = FormatSoftirqExit(inner);
-      } else if (event.has_mm_vmscan_direct_reclaim_begin()) {
-        const auto& inner = event.mm_vmscan_direct_reclaim_begin();
-        line = FormatMmVmscanDirectReclaimBegin(inner);
-      } else if (event.has_mm_vmscan_direct_reclaim_end()) {
-        const auto& inner = event.mm_vmscan_direct_reclaim_end();
-        line = FormatMmVmscanDirectReclaimEnd(inner);
-      } else if (event.has_lowmemory_kill()) {
-        const auto& inner = event.lowmemory_kill();
-        line = FormatLowmemoryKill(inner);
-      } else if (event.has_workqueue_execute_start()) {
-        const auto& inner = event.workqueue_execute_start();
-        line = FormatWorkqueueExecuteStart(inner);
-      } else if (event.has_workqueue_execute_end()) {
-        const auto& inner = event.workqueue_execute_end();
-        line = FormatWorkqueueExecuteEnd(inner);
-      } else if (event.has_workqueue_queue_work()) {
-        const auto& inner = event.workqueue_queue_work();
-        line = FormatWorkqueueQueueWork(inner);
-      } else if (event.has_workqueue_activate_work()) {
-        const auto& inner = event.workqueue_activate_work();
-        line = FormatWorkqueueActivateWork(inner);
+      } else if (event.has_block_rq_remap()) {
+        const auto& inner = event.block_rq_remap();
+        line = FormatBlockRqRemap(inner);
+      } else if (event.has_block_rq_requeue()) {
+        const auto& inner = event.block_rq_requeue();
+        line = FormatBlockRqRequeue(inner);
+      } else if (event.has_block_sleeprq()) {
+        const auto& inner = event.block_sleeprq();
+        line = FormatBlockSleeprq(inner);
+      } else if (event.has_block_split()) {
+        const auto& inner = event.block_split();
+        line = FormatBlockSplit(inner);
+      } else if (event.has_block_touch_buffer()) {
+        const auto& inner = event.block_touch_buffer();
+        line = FormatBlockTouchBuffer(inner);
+      } else if (event.has_block_unplug()) {
+        const auto& inner = event.block_unplug();
+        line = FormatBlockUnplug(inner);
       } else if (event.has_mm_compaction_begin()) {
         const auto& inner = event.mm_compaction_begin();
         line = FormatMmCompactionBegin(inner);
-      } else if (event.has_mm_compaction_deferred()) {
-        const auto& inner = event.mm_compaction_deferred();
-        line = FormatMmCompactionDeferred(inner);
+      } else if (event.has_mm_compaction_defer_compaction()) {
+        const auto& inner = event.mm_compaction_defer_compaction();
+        line = FormatMmCompactionDeferCompaction(inner);
       } else if (event.has_mm_compaction_defer_reset()) {
         const auto& inner = event.mm_compaction_defer_reset();
         line = FormatMmCompactionDeferReset(inner);
+      } else if (event.has_mm_compaction_deferred()) {
+        const auto& inner = event.mm_compaction_deferred();
+        line = FormatMmCompactionDeferred(inner);
       } else if (event.has_mm_compaction_end()) {
         const auto& inner = event.mm_compaction_end();
         line = FormatMmCompactionEnd(inner);
@@ -1079,12 +2386,411 @@
       } else if (event.has_mm_compaction_wakeup_kcompactd()) {
         const auto& inner = event.mm_compaction_wakeup_kcompactd();
         line = FormatMmCompactionWakeupKcompactd(inner);
+      } else if (event.has_ext4_alloc_da_blocks()) {
+        const auto& inner = event.ext4_alloc_da_blocks();
+        line = FormatExt4AllocDaBlocks(inner);
+      } else if (event.has_ext4_allocate_blocks()) {
+        const auto& inner = event.ext4_allocate_blocks();
+        line = FormatExt4AllocateBlocks(inner);
+      } else if (event.has_ext4_allocate_inode()) {
+        const auto& inner = event.ext4_allocate_inode();
+        line = FormatExt4AllocateInode(inner);
+      } else if (event.has_ext4_begin_ordered_truncate()) {
+        const auto& inner = event.ext4_begin_ordered_truncate();
+        line = FormatExt4BeginOrderedTruncate(inner);
+      } else if (event.has_ext4_collapse_range()) {
+        const auto& inner = event.ext4_collapse_range();
+        line = FormatExt4CollapseRange(inner);
+      } else if (event.has_ext4_da_release_space()) {
+        const auto& inner = event.ext4_da_release_space();
+        line = FormatExt4DaReleaseSpace(inner);
+      } else if (event.has_ext4_da_reserve_space()) {
+        const auto& inner = event.ext4_da_reserve_space();
+        line = FormatExt4DaReserveSpace(inner);
+      } else if (event.has_ext4_da_update_reserve_space()) {
+        const auto& inner = event.ext4_da_update_reserve_space();
+        line = FormatExt4DaUpdateReserveSpace(inner);
+      } else if (event.has_ext4_da_write_begin()) {
+        const auto& inner = event.ext4_da_write_begin();
+        line = FormatExt4DaWriteBegin(inner);
+      } else if (event.has_ext4_da_write_end()) {
+        const auto& inner = event.ext4_da_write_end();
+        line = FormatExt4DaWriteEnd(inner);
+      } else if (event.has_ext4_da_write_pages()) {
+        const auto& inner = event.ext4_da_write_pages();
+        line = FormatExt4DaWritePages(inner);
+      } else if (event.has_ext4_da_write_pages_extent()) {
+        const auto& inner = event.ext4_da_write_pages_extent();
+        line = FormatExt4DaWritePagesExtent(inner);
+      } else if (event.has_ext4_discard_blocks()) {
+        const auto& inner = event.ext4_discard_blocks();
+        line = FormatExt4DiscardBlocks(inner);
+      } else if (event.has_ext4_discard_preallocations()) {
+        const auto& inner = event.ext4_discard_preallocations();
+        line = FormatExt4DiscardPreallocations(inner);
+      } else if (event.has_ext4_drop_inode()) {
+        const auto& inner = event.ext4_drop_inode();
+        line = FormatExt4DropInode(inner);
+      } else if (event.has_ext4_es_cache_extent()) {
+        const auto& inner = event.ext4_es_cache_extent();
+        line = FormatExt4EsCacheExtent(inner);
+      } else if (event.has_ext4_es_find_delayed_extent_range_enter()) {
+        const auto& inner = event.ext4_es_find_delayed_extent_range_enter();
+        line = FormatExt4EsFindDelayedExtentRangeEnter(inner);
+      } else if (event.has_ext4_es_find_delayed_extent_range_exit()) {
+        const auto& inner = event.ext4_es_find_delayed_extent_range_exit();
+        line = FormatExt4EsFindDelayedExtentRangeExit(inner);
+      } else if (event.has_ext4_es_insert_extent()) {
+        const auto& inner = event.ext4_es_insert_extent();
+        line = FormatExt4EsInsertExtent(inner);
+      } else if (event.has_ext4_es_lookup_extent_enter()) {
+        const auto& inner = event.ext4_es_lookup_extent_enter();
+        line = FormatExt4EsLookupExtentEnter(inner);
+      } else if (event.has_ext4_es_lookup_extent_exit()) {
+        const auto& inner = event.ext4_es_lookup_extent_exit();
+        line = FormatExt4EsLookupExtentExit(inner);
+      } else if (event.has_ext4_es_remove_extent()) {
+        const auto& inner = event.ext4_es_remove_extent();
+        line = FormatExt4EsRemoveExtent(inner);
+      } else if (event.has_ext4_es_shrink()) {
+        const auto& inner = event.ext4_es_shrink();
+        line = FormatExt4EsShrink(inner);
+      } else if (event.has_ext4_es_shrink_count()) {
+        const auto& inner = event.ext4_es_shrink_count();
+        line = FormatExt4EsShrinkCount(inner);
+      } else if (event.has_ext4_es_shrink_scan_enter()) {
+        const auto& inner = event.ext4_es_shrink_scan_enter();
+        line = FormatExt4EsShrinkScanEnter(inner);
+      } else if (event.has_ext4_es_shrink_scan_exit()) {
+        const auto& inner = event.ext4_es_shrink_scan_exit();
+        line = FormatExt4EsShrinkScanExit(inner);
+      } else if (event.has_ext4_evict_inode()) {
+        const auto& inner = event.ext4_evict_inode();
+        line = FormatExt4EvictInode(inner);
+      } else if (event.has_ext4_ext_convert_to_initialized_enter()) {
+        const auto& inner = event.ext4_ext_convert_to_initialized_enter();
+        line = FormatExt4ExtConvertToInitializedEnter(inner);
+      } else if (event.has_ext4_ext_convert_to_initialized_fastpath()) {
+        const auto& inner = event.ext4_ext_convert_to_initialized_fastpath();
+        line = FormatExt4ExtConvertToInitializedFastpath(inner);
+      } else if (event.has_ext4_ext_handle_unwritten_extents()) {
+        const auto& inner = event.ext4_ext_handle_unwritten_extents();
+        line = FormatExt4ExtHandleUnwrittenExtents(inner);
+      } else if (event.has_ext4_ext_in_cache()) {
+        const auto& inner = event.ext4_ext_in_cache();
+        line = FormatExt4ExtInCache(inner);
+      } else if (event.has_ext4_ext_load_extent()) {
+        const auto& inner = event.ext4_ext_load_extent();
+        line = FormatExt4ExtLoadExtent(inner);
+      } else if (event.has_ext4_ext_map_blocks_enter()) {
+        const auto& inner = event.ext4_ext_map_blocks_enter();
+        line = FormatExt4ExtMapBlocksEnter(inner);
+      } else if (event.has_ext4_ext_map_blocks_exit()) {
+        const auto& inner = event.ext4_ext_map_blocks_exit();
+        line = FormatExt4ExtMapBlocksExit(inner);
+      } else if (event.has_ext4_ext_put_in_cache()) {
+        const auto& inner = event.ext4_ext_put_in_cache();
+        line = FormatExt4ExtPutInCache(inner);
+      } else if (event.has_ext4_ext_remove_space()) {
+        const auto& inner = event.ext4_ext_remove_space();
+        line = FormatExt4ExtRemoveSpace(inner);
+      } else if (event.has_ext4_ext_remove_space_done()) {
+        const auto& inner = event.ext4_ext_remove_space_done();
+        line = FormatExt4ExtRemoveSpaceDone(inner);
+      } else if (event.has_ext4_ext_rm_idx()) {
+        const auto& inner = event.ext4_ext_rm_idx();
+        line = FormatExt4ExtRmIdx(inner);
+      } else if (event.has_ext4_ext_rm_leaf()) {
+        const auto& inner = event.ext4_ext_rm_leaf();
+        line = FormatExt4ExtRmLeaf(inner);
+      } else if (event.has_ext4_ext_show_extent()) {
+        const auto& inner = event.ext4_ext_show_extent();
+        line = FormatExt4ExtShowExtent(inner);
+      } else if (event.has_ext4_fallocate_enter()) {
+        const auto& inner = event.ext4_fallocate_enter();
+        line = FormatExt4FallocateEnter(inner);
+      } else if (event.has_ext4_fallocate_exit()) {
+        const auto& inner = event.ext4_fallocate_exit();
+        line = FormatExt4FallocateExit(inner);
+      } else if (event.has_ext4_find_delalloc_range()) {
+        const auto& inner = event.ext4_find_delalloc_range();
+        line = FormatExt4FindDelallocRange(inner);
+      } else if (event.has_ext4_forget()) {
+        const auto& inner = event.ext4_forget();
+        line = FormatExt4Forget(inner);
+      } else if (event.has_ext4_free_blocks()) {
+        const auto& inner = event.ext4_free_blocks();
+        line = FormatExt4FreeBlocks(inner);
+      } else if (event.has_ext4_free_inode()) {
+        const auto& inner = event.ext4_free_inode();
+        line = FormatExt4FreeInode(inner);
+      } else if (event.has_ext4_get_implied_cluster_alloc_exit()) {
+        const auto& inner = event.ext4_get_implied_cluster_alloc_exit();
+        line = FormatExt4GetImpliedClusterAllocExit(inner);
+      } else if (event.has_ext4_get_reserved_cluster_alloc()) {
+        const auto& inner = event.ext4_get_reserved_cluster_alloc();
+        line = FormatExt4GetReservedClusterAlloc(inner);
+      } else if (event.has_ext4_ind_map_blocks_enter()) {
+        const auto& inner = event.ext4_ind_map_blocks_enter();
+        line = FormatExt4IndMapBlocksEnter(inner);
+      } else if (event.has_ext4_ind_map_blocks_exit()) {
+        const auto& inner = event.ext4_ind_map_blocks_exit();
+        line = FormatExt4IndMapBlocksExit(inner);
+      } else if (event.has_ext4_insert_range()) {
+        const auto& inner = event.ext4_insert_range();
+        line = FormatExt4InsertRange(inner);
+      } else if (event.has_ext4_invalidatepage()) {
+        const auto& inner = event.ext4_invalidatepage();
+        line = FormatExt4Invalidatepage(inner);
+      } else if (event.has_ext4_journal_start()) {
+        const auto& inner = event.ext4_journal_start();
+        line = FormatExt4JournalStart(inner);
+      } else if (event.has_ext4_journal_start_reserved()) {
+        const auto& inner = event.ext4_journal_start_reserved();
+        line = FormatExt4JournalStartReserved(inner);
+      } else if (event.has_ext4_journalled_invalidatepage()) {
+        const auto& inner = event.ext4_journalled_invalidatepage();
+        line = FormatExt4JournalledInvalidatepage(inner);
+      } else if (event.has_ext4_journalled_write_end()) {
+        const auto& inner = event.ext4_journalled_write_end();
+        line = FormatExt4JournalledWriteEnd(inner);
+      } else if (event.has_ext4_load_inode()) {
+        const auto& inner = event.ext4_load_inode();
+        line = FormatExt4LoadInode(inner);
+      } else if (event.has_ext4_load_inode_bitmap()) {
+        const auto& inner = event.ext4_load_inode_bitmap();
+        line = FormatExt4LoadInodeBitmap(inner);
+      } else if (event.has_ext4_mark_inode_dirty()) {
+        const auto& inner = event.ext4_mark_inode_dirty();
+        line = FormatExt4MarkInodeDirty(inner);
+      } else if (event.has_ext4_mb_bitmap_load()) {
+        const auto& inner = event.ext4_mb_bitmap_load();
+        line = FormatExt4MbBitmapLoad(inner);
+      } else if (event.has_ext4_mb_buddy_bitmap_load()) {
+        const auto& inner = event.ext4_mb_buddy_bitmap_load();
+        line = FormatExt4MbBuddyBitmapLoad(inner);
+      } else if (event.has_ext4_mb_discard_preallocations()) {
+        const auto& inner = event.ext4_mb_discard_preallocations();
+        line = FormatExt4MbDiscardPreallocations(inner);
+      } else if (event.has_ext4_mb_new_group_pa()) {
+        const auto& inner = event.ext4_mb_new_group_pa();
+        line = FormatExt4MbNewGroupPa(inner);
+      } else if (event.has_ext4_mb_new_inode_pa()) {
+        const auto& inner = event.ext4_mb_new_inode_pa();
+        line = FormatExt4MbNewInodePa(inner);
+      } else if (event.has_ext4_mb_release_group_pa()) {
+        const auto& inner = event.ext4_mb_release_group_pa();
+        line = FormatExt4MbReleaseGroupPa(inner);
+      } else if (event.has_ext4_mb_release_inode_pa()) {
+        const auto& inner = event.ext4_mb_release_inode_pa();
+        line = FormatExt4MbReleaseInodePa(inner);
+      } else if (event.has_ext4_mballoc_alloc()) {
+        const auto& inner = event.ext4_mballoc_alloc();
+        line = FormatExt4MballocAlloc(inner);
+      } else if (event.has_ext4_mballoc_discard()) {
+        const auto& inner = event.ext4_mballoc_discard();
+        line = FormatExt4MballocDiscard(inner);
+      } else if (event.has_ext4_mballoc_free()) {
+        const auto& inner = event.ext4_mballoc_free();
+        line = FormatExt4MballocFree(inner);
+      } else if (event.has_ext4_mballoc_prealloc()) {
+        const auto& inner = event.ext4_mballoc_prealloc();
+        line = FormatExt4MballocPrealloc(inner);
+      } else if (event.has_ext4_other_inode_update_time()) {
+        const auto& inner = event.ext4_other_inode_update_time();
+        line = FormatExt4OtherInodeUpdateTime(inner);
+      } else if (event.has_ext4_punch_hole()) {
+        const auto& inner = event.ext4_punch_hole();
+        line = FormatExt4PunchHole(inner);
+      } else if (event.has_ext4_read_block_bitmap_load()) {
+        const auto& inner = event.ext4_read_block_bitmap_load();
+        line = FormatExt4ReadBlockBitmapLoad(inner);
+      } else if (event.has_ext4_readpage()) {
+        const auto& inner = event.ext4_readpage();
+        line = FormatExt4Readpage(inner);
+      } else if (event.has_ext4_releasepage()) {
+        const auto& inner = event.ext4_releasepage();
+        line = FormatExt4Releasepage(inner);
+      } else if (event.has_ext4_remove_blocks()) {
+        const auto& inner = event.ext4_remove_blocks();
+        line = FormatExt4RemoveBlocks(inner);
+      } else if (event.has_ext4_request_blocks()) {
+        const auto& inner = event.ext4_request_blocks();
+        line = FormatExt4RequestBlocks(inner);
+      } else if (event.has_ext4_request_inode()) {
+        const auto& inner = event.ext4_request_inode();
+        line = FormatExt4RequestInode(inner);
+      } else if (event.has_ext4_sync_file_enter()) {
+        const auto& inner = event.ext4_sync_file_enter();
+        line = FormatExt4SyncFileEnter(inner);
+      } else if (event.has_ext4_sync_file_exit()) {
+        const auto& inner = event.ext4_sync_file_exit();
+        line = FormatExt4SyncFileExit(inner);
+      } else if (event.has_ext4_sync_fs()) {
+        const auto& inner = event.ext4_sync_fs();
+        line = FormatExt4SyncFs(inner);
+      } else if (event.has_ext4_trim_all_free()) {
+        const auto& inner = event.ext4_trim_all_free();
+        line = FormatExt4TrimAllFree(inner);
+      } else if (event.has_ext4_trim_extent()) {
+        const auto& inner = event.ext4_trim_extent();
+        line = FormatExt4TrimExtent(inner);
+      } else if (event.has_ext4_truncate_enter()) {
+        const auto& inner = event.ext4_truncate_enter();
+        line = FormatExt4TruncateEnter(inner);
+      } else if (event.has_ext4_truncate_exit()) {
+        const auto& inner = event.ext4_truncate_exit();
+        line = FormatExt4TruncateExit(inner);
+      } else if (event.has_ext4_unlink_enter()) {
+        const auto& inner = event.ext4_unlink_enter();
+        line = FormatExt4UnlinkEnter(inner);
+      } else if (event.has_ext4_unlink_exit()) {
+        const auto& inner = event.ext4_unlink_exit();
+        line = FormatExt4UnlinkExit(inner);
+      } else if (event.has_ext4_write_begin()) {
+        const auto& inner = event.ext4_write_begin();
+        line = FormatExt4WriteBegin(inner);
+      } else if (event.has_ext4_write_end()) {
+        const auto& inner = event.ext4_write_end();
+        line = FormatExt4WriteEnd(inner);
+      } else if (event.has_ext4_writepage()) {
+        const auto& inner = event.ext4_writepage();
+        line = FormatExt4Writepage(inner);
+      } else if (event.has_ext4_writepages()) {
+        const auto& inner = event.ext4_writepages();
+        line = FormatExt4Writepages(inner);
+      } else if (event.has_ext4_writepages_result()) {
+        const auto& inner = event.ext4_writepages_result();
+        line = FormatExt4WritepagesResult(inner);
+      } else if (event.has_ext4_zero_range()) {
+        const auto& inner = event.ext4_zero_range();
+        line = FormatExt4ZeroRange(inner);
+      } else if (event.has_print()) {
+        const auto& inner = event.print();
+        line = FormatPrint(inner);
+      } else if (event.has_i2c_read()) {
+        const auto& inner = event.i2c_read();
+        line = FormatI2cRead(inner);
+      } else if (event.has_i2c_reply()) {
+        const auto& inner = event.i2c_reply();
+        line = FormatI2cReply(inner);
+      } else if (event.has_i2c_result()) {
+        const auto& inner = event.i2c_result();
+        line = FormatI2cResult(inner);
+      } else if (event.has_i2c_write()) {
+        const auto& inner = event.i2c_write();
+        line = FormatI2cWrite(inner);
+      } else if (event.has_irq_handler_entry()) {
+        const auto& inner = event.irq_handler_entry();
+        line = FormatIrqHandlerEntry(inner);
+      } else if (event.has_irq_handler_exit()) {
+        const auto& inner = event.irq_handler_exit();
+        line = FormatIrqHandlerExit(inner);
+      } else if (event.has_softirq_entry()) {
+        const auto& inner = event.softirq_entry();
+        line = FormatSoftirqEntry(inner);
+      } else if (event.has_softirq_exit()) {
+        const auto& inner = event.softirq_exit();
+        line = FormatSoftirqExit(inner);
+      } else if (event.has_softirq_raise()) {
+        const auto& inner = event.softirq_raise();
+        line = FormatSoftirqRaise(inner);
+      } else if (event.has_lowmemory_kill()) {
+        const auto& inner = event.lowmemory_kill();
+        line = FormatLowmemoryKill(inner);
+      } else if (event.has_tracing_mark_write()) {
+        const auto& inner = event.tracing_mark_write();
+        line = FormatTracingMarkWrite(inner);
+      } else if (event.has_clock_disable()) {
+        const auto& inner = event.clock_disable();
+        line = FormatClockDisable(inner);
+      } else if (event.has_clock_enable()) {
+        const auto& inner = event.clock_enable();
+        line = FormatClockEnable(inner);
+      } else if (event.has_clock_set_rate()) {
+        const auto& inner = event.clock_set_rate();
+        line = FormatClockSetRate(inner);
+      } else if (event.has_cpu_frequency()) {
+        const auto& inner = event.cpu_frequency();
+        line = FormatCpuFrequency(inner);
+      } else if (event.has_cpu_frequency_limits()) {
+        const auto& inner = event.cpu_frequency_limits();
+        line = FormatCpuFrequencyLimits(inner);
+      } else if (event.has_cpu_idle()) {
+        const auto& inner = event.cpu_idle();
+        line = FormatCpuIdle(inner);
       } else if (event.has_suspend_resume()) {
         const auto& inner = event.suspend_resume();
         line = FormatSuspendResume(inner);
+      } else if (event.has_regulator_disable()) {
+        const auto& inner = event.regulator_disable();
+        line = FormatRegulatorDisable(inner);
+      } else if (event.has_regulator_disable_complete()) {
+        const auto& inner = event.regulator_disable_complete();
+        line = FormatRegulatorDisableComplete(inner);
+      } else if (event.has_regulator_enable()) {
+        const auto& inner = event.regulator_enable();
+        line = FormatRegulatorEnable(inner);
+      } else if (event.has_regulator_enable_complete()) {
+        const auto& inner = event.regulator_enable_complete();
+        line = FormatRegulatorEnableComplete(inner);
+      } else if (event.has_regulator_enable_delay()) {
+        const auto& inner = event.regulator_enable_delay();
+        line = FormatRegulatorEnableDelay(inner);
+      } else if (event.has_regulator_set_voltage()) {
+        const auto& inner = event.regulator_set_voltage();
+        line = FormatRegulatorSetVoltage(inner);
+      } else if (event.has_regulator_set_voltage_complete()) {
+        const auto& inner = event.regulator_set_voltage_complete();
+        line = FormatRegulatorSetVoltageComplete(inner);
+      } else if (event.has_sched_blocked_reason()) {
+        const auto& inner = event.sched_blocked_reason();
+        line = FormatSchedBlockedReason(inner);
+      } else if (event.has_sched_cpu_hotplug()) {
+        const auto& inner = event.sched_cpu_hotplug();
+        line = FormatSchedCpuHotplug(inner);
+      } else if (event.has_sched_switch()) {
+        const auto& inner = event.sched_switch();
+        line = FormatSchedSwitch(inner);
+      } else if (event.has_sched_wakeup()) {
+        const auto& inner = event.sched_wakeup();
+        line = FormatSchedWakeup(inner);
       } else if (event.has_sched_wakeup_new()) {
         const auto& inner = event.sched_wakeup_new();
         line = FormatSchedWakeupNew(inner);
+      } else if (event.has_sync_pt()) {
+        const auto& inner = event.sync_pt();
+        line = FormatSyncPt(inner);
+      } else if (event.has_sync_timeline()) {
+        const auto& inner = event.sync_timeline();
+        line = FormatSyncTimeline(inner);
+      } else if (event.has_sync_wait()) {
+        const auto& inner = event.sync_wait();
+        line = FormatSyncWait(inner);
+      } else if (event.has_mm_vmscan_direct_reclaim_begin()) {
+        const auto& inner = event.mm_vmscan_direct_reclaim_begin();
+        line = FormatMmVmscanDirectReclaimBegin(inner);
+      } else if (event.has_mm_vmscan_direct_reclaim_end()) {
+        const auto& inner = event.mm_vmscan_direct_reclaim_end();
+        line = FormatMmVmscanDirectReclaimEnd(inner);
+      } else if (event.has_mm_vmscan_kswapd_sleep()) {
+        const auto& inner = event.mm_vmscan_kswapd_sleep();
+        line = FormatMmVmscanKswapdSleep(inner);
+      } else if (event.has_mm_vmscan_kswapd_wake()) {
+        const auto& inner = event.mm_vmscan_kswapd_wake();
+        line = FormatMmVmscanKswapdWake(inner);
+      } else if (event.has_workqueue_activate_work()) {
+        const auto& inner = event.workqueue_activate_work();
+        line = FormatWorkqueueActivateWork(inner);
+      } else if (event.has_workqueue_execute_end()) {
+        const auto& inner = event.workqueue_execute_end();
+        line = FormatWorkqueueExecuteEnd(inner);
+      } else if (event.has_workqueue_execute_start()) {
+        const auto& inner = event.workqueue_execute_start();
+        line = FormatWorkqueueExecuteStart(inner);
+      } else if (event.has_workqueue_queue_work()) {
+        const auto& inner = event.workqueue_queue_work();
+        line = FormatWorkqueueQueueWork(inner);
       } else {
         continue;
       }