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"
2019-06-28 19:25:35 -07:00
# include "xfs_shared.h"
2014-11-28 14:25:04 +11:00
# include "xfs_format.h"
2013-10-23 10:50:10 +11:00
# 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 )
{
2019-11-04 13:58:40 -08:00
if ( mp & & mp - > m_super ) {
printk ( " %sXFS (%s): %pV \n " , level , mp - > m_super - > s_id , 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
}
2022-04-11 13:06:28 +10:00
void
xfs_printk_level (
const char * kern_level ,
const struct xfs_mount * mp ,
const char * fmt , . . . )
{
struct va_format vaf ;
va_list args ;
int level ;
2011-03-02 14:20:59 +11:00
2022-04-11 13:06:28 +10:00
va_start ( args , fmt ) ;
vaf . fmt = fmt ;
vaf . va = & args ;
__xfs_printk ( kern_level , mp , & vaf ) ;
va_end ( args ) ;
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
2011-04-02 18:13:40 +00:00
void
2022-04-11 13:06:39 +10:00
_xfs_alert_tag (
2011-03-02 14:20:59 +11:00
const struct xfs_mount * mp ,
2022-04-21 10:47:25 +10:00
uint32_t panic_tag ,
2011-03-02 14:20:59 +11:00
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
2019-11-02 09:41:19 -07:00
asswarn (
struct xfs_mount * mp ,
char * expr ,
char * file ,
int line )
2013-04-30 21:39:34 +10:00
{
2019-11-02 09:41:19 -07:00
xfs_warn ( mp , " Assertion failed: %s, file: %s, line: %d " ,
2013-04-30 21:39:34 +10:00
expr , file , line ) ;
WARN_ON ( 1 ) ;
}
2011-03-07 10:09:35 +11:00
void
2019-11-02 09:41:19 -07:00
assfail (
struct xfs_mount * mp ,
char * expr ,
char * file ,
int line )
2011-03-07 10:09:35 +11:00
{
2019-11-02 09:41:19 -07:00
xfs_emerg ( mp , " Assertion failed: %s, file: %s, line: %d " ,
2011-03-07 10:09:35 +11:00
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
2019-11-02 09:40:36 -07:00
xfs_hex_dump ( const void * p , int length )
2011-03-07 10:09:35 +11:00
{
2018-11-06 07:50:50 -08:00
print_hex_dump ( KERN_ALERT , " " , DUMP_PREFIX_OFFSET , 16 , 1 , p , length , 1 ) ;
2011-03-07 10:09:35 +11:00
}
2020-05-06 13:25:21 -07: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 ) ;
}