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
}
2022-04-11 06:06:28 +03: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 06:20:59 +03:00
2022-04-11 06:06:28 +03: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 06:20:59 +03:00
2011-04-02 22:13:40 +04:00
void
2022-04-11 06:06:39 +03:00
_xfs_alert_tag (
2011-03-02 06:20:59 +03:00
const struct xfs_mount * mp ,
2022-04-21 03:47:25 +03:00
uint32_t panic_tag ,
2011-03-02 06:20:59 +03:00
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 ) ;
}