2011-03-02 06:20:59 +03:00
/*
* Copyright ( c ) 2011 Red Hat , Inc . All Rights Reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation .
*
* This program is distributed in the hope that it would be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
# include "xfs.h"
# include "xfs_fs.h"
2015-10-12 08:04:45 +03:00
# include "xfs_error.h"
2014-11-28 06:25:04 +03:00
# include "xfs_format.h"
2013-10-23 03:50:10 +04:00
# include "xfs_log_format.h"
# 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 )
{
2011-04-12 17:34:20 +04:00
if ( mp & & mp - > m_fsname ) {
2011-04-02 22:13:40 +04:00
printk ( " %sXFS (%s): %pV \n " , level , mp - > m_fsname , 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
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 02:09:35 +03:00
void
assfail ( char * expr , char * file , int line )
{
xfs_emerg ( NULL , " Assertion failed: %s, file: %s, line: %d " ,
expr , file , line ) ;
BUG ( ) ;
}
void
xfs_hex_dump ( void * p , int length )
{
print_hex_dump ( KERN_ALERT , " " , DUMP_PREFIX_ADDRESS , 16 , 1 , p , length , 1 ) ;
}