return 0;
 
        ext4_msg(sb, KERN_ALERT, "shut down requested (%d)", flags);
+       trace_ext4_shutdown(sb, flags);
 
        switch (flags) {
        case EXT4_GOING_FLAGS_DEFAULT:
 
        if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
                return;
 
+       trace_ext4_error(sb, function, line);
        if (ext4_error_ratelimit(sb)) {
                va_start(args, fmt);
                vaf.fmt = fmt;
        if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
                return;
 
+       trace_ext4_error(inode->i_sb, function, line);
        es->s_last_error_ino = cpu_to_le32(inode->i_ino);
        es->s_last_error_block = cpu_to_le64(block);
        if (ext4_error_ratelimit(inode->i_sb)) {
        if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
                return;
 
+       trace_ext4_error(inode->i_sb, function, line);
        es = EXT4_SB(inode->i_sb)->s_es;
        es->s_last_error_ino = cpu_to_le32(inode->i_ino);
        if (ext4_error_ratelimit(inode->i_sb)) {
        if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
                return;
 
+       trace_ext4_error(sb, function, line);
        es->s_last_error_ino = cpu_to_le32(ino);
        es->s_last_error_block = cpu_to_le64(block);
        __save_error_info(sb, function, line);
 
 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_high_key);
 DEFINE_GETFSMAP_EVENT(ext4_getfsmap_mapping);
 
+TRACE_EVENT(ext4_shutdown,
+       TP_PROTO(struct super_block *sb, unsigned long flags),
+
+       TP_ARGS(sb, flags),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field(     unsigned,  flags                   )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = sb->s_dev;
+               __entry->flags  = flags;
+       ),
+
+       TP_printk("dev %d,%d flags %u",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __entry->flags)
+);
+
+TRACE_EVENT(ext4_error,
+       TP_PROTO(struct super_block *sb, const char *function,
+                unsigned int line),
+
+       TP_ARGS(sb, function, line),
+
+       TP_STRUCT__entry(
+               __field(        dev_t,  dev                     )
+               __field( const char *,  function                )
+               __field(     unsigned,  line                    )
+       ),
+
+       TP_fast_assign(
+               __entry->dev    = sb->s_dev;
+               __entry->function = function;
+               __entry->line   = line;
+       ),
+
+       TP_printk("dev %d,%d function %s line %u",
+                 MAJOR(__entry->dev), MINOR(__entry->dev),
+                 __entry->function, __entry->line)
+);
+
 #endif /* _TRACE_EXT4_H */
 
 /* This part must be outside protection */