2018-06-06 05:42:14 +03:00
// SPDX-License-Identifier: GPL-2.0
2011-03-02 06:20:59 +03:00
/*
* Copyright ( c ) 2011 Red Hat , Inc . All Rights Reserved .
*/
# include "xfs.h"
# include "xfs_fs.h"
2015-10-12 08:04:45 +03:00
# include "xfs_error.h"
2019-06-29 05:25:35 +03:00
# include "xfs_shared.h"
2014-11-28 06:25:04 +03:00
# include "xfs_format.h"
2013-10-23 03:50:10 +04:00
# include "xfs_trans_resv.h"
2011-03-02 06:20:59 +03:00
# include "xfs_mount.h"
/*
* XFS logging functions
*/
2011-04-02 22:13:40 +04:00
static void
2011-03-02 06:20:59 +03:00
__xfs_printk (
const char * level ,
const struct xfs_mount * mp ,
struct va_format * vaf )
{
2019-11-05 00:58:40 +03:00
if ( mp & & mp - > m_super ) {
printk ( " %sXFS (%s): %pV \n " , level , mp - > m_super - > s_id , vaf ) ;
2011-04-12 17:34:20 +04:00
return ;
}
2011-04-02 22:13:40 +04:00
printk ( " %sXFS: %pV \n " , level , vaf ) ;
2011-03-02 06:20:59 +03:00
}
# define define_xfs_printk_level(func, kern_level) \
2011-04-02 22:13:40 +04:00
void func ( const struct xfs_mount * mp , const char * fmt , . . . ) \
2011-03-02 06:20:59 +03:00
{ \
struct va_format vaf ; \
va_list args ; \
2015-10-12 08:04:45 +03:00
int level ; \
2011-03-02 06:20:59 +03:00
\
va_start ( args , fmt ) ; \
\
vaf . fmt = fmt ; \
vaf . va = & args ; \
\
2011-04-02 22:13:40 +04:00
__xfs_printk ( kern_level , mp , & vaf ) ; \
2011-03-02 06:20:59 +03:00
va_end ( args ) ; \
2015-10-12 08:04:45 +03:00
\
if ( ! kstrtoint ( kern_level , 0 , & level ) & & \
level < = LOGLEVEL_ERR & & \
xfs_error_level > = XFS_ERRLEVEL_HIGH ) \
xfs_stack_trace ( ) ; \
2011-03-02 06:20:59 +03: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 22:13:40 +04:00
void
2011-03-02 06:20:59 +03: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 15:39:51 +03:00
int do_panic = 0 ;
2011-03-02 06:20:59 +03:00
if ( xfs_panic_mask & & ( xfs_panic_mask & panic_tag ) ) {
2011-05-04 00:14:44 +04:00
xfs_alert ( mp , " Transforming an alert into a BUG. " ) ;
2011-03-11 15:39:51 +03:00
do_panic = 1 ;
2011-03-02 06:20:59 +03:00
}
va_start ( args , fmt ) ;
vaf . fmt = fmt ;
vaf . va = & args ;
2011-04-02 22:13:40 +04:00
__xfs_printk ( KERN_ALERT , mp , & vaf ) ;
2011-03-02 06:20:59 +03:00
va_end ( args ) ;
2011-03-11 15:39:51 +03:00
BUG_ON ( do_panic ) ;
2011-03-02 06:20:59 +03:00
}
2011-03-07 02:09:35 +03:00
2013-04-30 15:39:34 +04:00
void
2019-11-02 19:41:19 +03:00
asswarn (
struct xfs_mount * mp ,
char * expr ,
char * file ,
int line )
2013-04-30 15:39:34 +04:00
{
2019-11-02 19:41:19 +03:00
xfs_warn ( mp , " Assertion failed: %s, file: %s, line: %d " ,
2013-04-30 15:39:34 +04:00
expr , file , line ) ;
WARN_ON ( 1 ) ;
}
2011-03-07 02:09:35 +03:00
void
2019-11-02 19:41:19 +03:00
assfail (
struct xfs_mount * mp ,
char * expr ,
char * file ,
int line )
2011-03-07 02:09:35 +03:00
{
2019-11-02 19:41:19 +03:00
xfs_emerg ( mp , " Assertion failed: %s, file: %s, line: %d " ,
2011-03-07 02:09:35 +03:00
expr , file , line ) ;
2017-06-15 07:29:12 +03:00
if ( xfs_globals . bug_on_assert )
BUG ( ) ;
else
WARN_ON ( 1 ) ;
2011-03-07 02:09:35 +03:00
}
void
2019-11-02 19:40:36 +03:00
xfs_hex_dump ( const void * p , int length )
2011-03-07 02:09:35 +03:00
{
2018-11-06 18:50:50 +03:00
print_hex_dump ( KERN_ALERT , " " , DUMP_PREFIX_OFFSET , 16 , 1 , p , length , 1 ) ;
2011-03-07 02:09:35 +03:00
}
2020-05-06 23:25:21 +03:00
void
xfs_buf_alert_ratelimited (
struct xfs_buf * bp ,
const char * rlmsg ,
const char * fmt ,
. . . )
{
struct xfs_mount * mp = bp - > b_mount ;
struct va_format vaf ;
va_list args ;
/* use the more aggressive per-target rate limit for buffers */
if ( ! ___ratelimit ( & bp - > b_target - > bt_ioerror_rl , rlmsg ) )
return ;
va_start ( args , fmt ) ;
vaf . fmt = fmt ;
vaf . va = & args ;
__xfs_printk ( KERN_ALERT , mp , & vaf ) ;
va_end ( args ) ;
}