2018-06-05 19:42:14 -07:00
// SPDX-License-Identifier: GPL-2.0
2011-03-02 14:20:59 +11:00
/*
* Copyright ( c ) 2011 Red Hat , Inc . All Rights Reserved .
*/
# include "xfs.h"
# include "xfs_fs.h"
2015-10-12 16:04:45 +11:00
# include "xfs_error.h"
2014-11-28 14:25:04 +11:00
# include "xfs_format.h"
2013-10-23 10:50:10 +11:00
# include "xfs_log_format.h"
# include "xfs_trans_resv.h"
2011-03-02 14:20:59 +11:00
# include "xfs_mount.h"
/*
* XFS logging functions
*/
2011-04-02 18:13:40 +00:00
static void
2011-03-02 14:20:59 +11:00
__xfs_printk (
const char * level ,
const struct xfs_mount * mp ,
struct va_format * vaf )
{
2011-04-12 13:34:20 +00:00
if ( mp & & mp - > m_fsname ) {
2011-04-02 18:13:40 +00:00
printk ( " %sXFS (%s): %pV \n " , level , mp - > m_fsname , vaf ) ;
2011-04-12 13:34:20 +00:00
return ;
}
2011-04-02 18:13:40 +00:00
printk ( " %sXFS: %pV \n " , level , vaf ) ;
2011-03-02 14:20:59 +11:00
}
# define define_xfs_printk_level(func, kern_level) \
2011-04-02 18:13:40 +00:00
void func ( const struct xfs_mount * mp , const char * fmt , . . . ) \
2011-03-02 14:20:59 +11:00
{ \
struct va_format vaf ; \
va_list args ; \
2015-10-12 16:04:45 +11:00
int level ; \
2011-03-02 14:20:59 +11:00
\
va_start ( args , fmt ) ; \
\
vaf . fmt = fmt ; \
vaf . va = & args ; \
\
2011-04-02 18:13:40 +00:00
__xfs_printk ( kern_level , mp , & vaf ) ; \
2011-03-02 14:20:59 +11:00
va_end ( args ) ; \
2015-10-12 16:04:45 +11:00
\
if ( ! kstrtoint ( kern_level , 0 , & level ) & & \
level < = LOGLEVEL_ERR & & \
xfs_error_level > = XFS_ERRLEVEL_HIGH ) \
xfs_stack_trace ( ) ; \
2011-03-02 14:20:59 +11:00
} \
define_xfs_printk_level ( xfs_emerg , KERN_EMERG ) ;
define_xfs_printk_level ( xfs_alert , KERN_ALERT ) ;
define_xfs_printk_level ( xfs_crit , KERN_CRIT ) ;
define_xfs_printk_level ( xfs_err , KERN_ERR ) ;
define_xfs_printk_level ( xfs_warn , KERN_WARNING ) ;
define_xfs_printk_level ( xfs_notice , KERN_NOTICE ) ;
define_xfs_printk_level ( xfs_info , KERN_INFO ) ;
# ifdef DEBUG
define_xfs_printk_level ( xfs_debug , KERN_DEBUG ) ;
# endif
2011-04-02 18:13:40 +00:00
void
2011-03-02 14:20:59 +11:00
xfs_alert_tag (
const struct xfs_mount * mp ,
int panic_tag ,
const char * fmt , . . . )
{
struct va_format vaf ;
va_list args ;
2011-03-11 12:39:51 +00:00
int do_panic = 0 ;
2011-03-02 14:20:59 +11:00
if ( xfs_panic_mask & & ( xfs_panic_mask & panic_tag ) ) {
2011-05-03 20:14:44 +00:00
xfs_alert ( mp , " Transforming an alert into a BUG. " ) ;
2011-03-11 12:39:51 +00:00
do_panic = 1 ;
2011-03-02 14:20:59 +11:00
}
va_start ( args , fmt ) ;
vaf . fmt = fmt ;
vaf . va = & args ;
2011-04-02 18:13:40 +00:00
__xfs_printk ( KERN_ALERT , mp , & vaf ) ;
2011-03-02 14:20:59 +11:00
va_end ( args ) ;
2011-03-11 12:39:51 +00:00
BUG_ON ( do_panic ) ;
2011-03-02 14:20:59 +11:00
}
2011-03-07 10:09:35 +11:00
2013-04-30 21:39:34 +10:00
void
asswarn ( char * expr , char * file , int line )
{
xfs_warn ( NULL , " Assertion failed: %s, file: %s, line: %d " ,
expr , file , line ) ;
WARN_ON ( 1 ) ;
}
2011-03-07 10:09:35 +11:00
void
assfail ( char * expr , char * file , int line )
{
xfs_emerg ( NULL , " Assertion failed: %s, file: %s, line: %d " ,
expr , file , line ) ;
2017-06-14 21:29:12 -07:00
if ( xfs_globals . bug_on_assert )
BUG ( ) ;
else
WARN_ON ( 1 ) ;
2011-03-07 10:09:35 +11:00
}
void
xfs_hex_dump ( void * p , int length )
{
print_hex_dump ( KERN_ALERT , " " , DUMP_PREFIX_ADDRESS , 16 , 1 , p , length , 1 ) ;
}