2018-06-05 19:42:14 -07:00
// SPDX-License-Identifier: GPL-2.0
2005-04-16 15:20:36 -07:00
/*
2005-11-02 14:58:39 +11:00
* Copyright ( c ) 2000 - 2002 , 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-16 15:20:36 -07:00
*/
# ifndef __XFS_ERROR_H__
# define __XFS_ERROR_H__
struct xfs_mount ;
2010-04-13 15:22:08 +10:00
extern void xfs_error_report ( const char * tag , int level , struct xfs_mount * mp ,
2018-01-08 10:51:25 -08:00
const char * filename , int linenum ,
xfs_failaddr_t failaddr ) ;
2010-04-13 15:22:08 +10:00
extern void xfs_corruption_error ( const char * tag , int level ,
2018-06-04 10:23:54 -07:00
struct xfs_mount * mp , void * buf , size_t bufsize ,
const char * filename , int linenum ,
xfs_failaddr_t failaddr ) ;
2018-03-23 10:06:53 -07:00
extern void xfs_buf_verifier_error ( struct xfs_buf * bp , int error ,
const char * name , void * buf , size_t bufsz ,
xfs_failaddr_t failaddr ) ;
2018-01-08 10:51:03 -08:00
extern void xfs_verifier_error ( struct xfs_buf * bp , int error ,
xfs_failaddr_t failaddr ) ;
2018-01-22 18:09:48 -08:00
extern void xfs_inode_verifier_error ( struct xfs_inode * ip , int error ,
const char * name , void * buf , size_t bufsz ,
xfs_failaddr_t failaddr ) ;
2005-04-16 15:20:36 -07:00
# define XFS_ERROR_REPORT(e, lvl, mp) \
xfs_error_report ( e , lvl , mp , __FILE__ , __LINE__ , __return_address )
2018-06-04 10:23:54 -07:00
# define XFS_CORRUPTION_ERROR(e, lvl, mp, buf, bufsize) \
xfs_corruption_error ( e , lvl , mp , buf , bufsize , \
2005-04-16 15:20:36 -07:00
__FILE__ , __LINE__ , __return_address )
# define XFS_ERRLEVEL_OFF 0
# define XFS_ERRLEVEL_LOW 1
# define XFS_ERRLEVEL_HIGH 5
2018-01-08 10:51:26 -08:00
/* Dump 128 bytes of any corrupt buffer */
# define XFS_CORRUPTION_DUMP_LEN (128)
2005-11-02 14:38:42 +11:00
/*
* Macros to set EFSCORRUPTED & return / branch .
*/
2015-02-23 22:39:08 +11:00
# define XFS_WANT_CORRUPTED_GOTO(mp, x, l) \
2005-11-02 14:38:42 +11:00
{ \
int fs_is_ok = ( x ) ; \
ASSERT ( fs_is_ok ) ; \
if ( unlikely ( ! fs_is_ok ) ) { \
XFS_ERROR_REPORT ( " XFS_WANT_CORRUPTED_GOTO " , \
2015-02-23 22:39:08 +11:00
XFS_ERRLEVEL_LOW , mp ) ; \
2014-06-25 14:58:08 +10:00
error = - EFSCORRUPTED ; \
2005-11-02 14:38:42 +11:00
goto l ; \
} \
}
2015-02-23 22:39:13 +11:00
# define XFS_WANT_CORRUPTED_RETURN(mp, x) \
2005-11-02 14:38:42 +11:00
{ \
int fs_is_ok = ( x ) ; \
ASSERT ( fs_is_ok ) ; \
if ( unlikely ( ! fs_is_ok ) ) { \
XFS_ERROR_REPORT ( " XFS_WANT_CORRUPTED_RETURN " , \
2015-02-23 22:39:13 +11:00
XFS_ERRLEVEL_LOW , mp ) ; \
2014-06-25 14:58:08 +10:00
return - EFSCORRUPTED ; \
2005-11-02 14:38:42 +11:00
} \
}
2008-08-13 16:17:37 +10:00
# ifdef DEBUG
2017-06-20 17:54:46 -07:00
extern int xfs_errortag_init ( struct xfs_mount * mp ) ;
extern void xfs_errortag_del ( struct xfs_mount * mp ) ;
extern bool xfs_errortag_test ( struct xfs_mount * mp , const char * expression ,
const char * file , int line , unsigned int error_tag ) ;
2017-06-20 17:54:47 -07:00
# define XFS_TEST_ERROR(expr, mp, tag) \
2017-06-20 17:54:46 -07:00
( ( expr ) | | xfs_errortag_test ( ( mp ) , # expr , __FILE__ , __LINE__ , ( tag ) ) )
2005-04-16 15:20:36 -07:00
2017-06-20 17:54:47 -07:00
extern int xfs_errortag_get ( struct xfs_mount * mp , unsigned int error_tag ) ;
2017-06-20 17:54:46 -07:00
extern int xfs_errortag_set ( struct xfs_mount * mp , unsigned int error_tag ,
unsigned int tag_value ) ;
extern int xfs_errortag_add ( struct xfs_mount * mp , unsigned int error_tag ) ;
extern int xfs_errortag_clearall ( struct xfs_mount * mp ) ;
2005-04-16 15:20:36 -07:00
# else
2017-06-20 17:54:46 -07:00
# define xfs_errortag_init(mp) (0)
# define xfs_errortag_del(mp)
2017-06-20 17:54:47 -07:00
# define XFS_TEST_ERROR(expr, mp, tag) (expr)
2017-06-20 17:54:46 -07:00
# define xfs_errortag_set(mp, tag, val) (ENOSYS)
# define xfs_errortag_add(mp, tag) (ENOSYS)
# define xfs_errortag_clearall(mp) (ENOSYS)
2008-08-13 16:17:37 +10:00
# endif /* DEBUG */
2005-04-16 15:20:36 -07:00
/*
2011-03-07 10:02:35 +11:00
* XFS panic tags - - allow a call to xfs_alert_tag ( ) be turned into
* a panic by setting xfs_panic_mask in a sysctl .
2005-04-16 15:20:36 -07:00
*/
# define XFS_NO_PTAG 0
# define XFS_PTAG_IFLUSH 0x00000001
# define XFS_PTAG_LOGRES 0x00000002
# define XFS_PTAG_AILDELETE 0x00000004
# define XFS_PTAG_ERROR_REPORT 0x00000008
# define XFS_PTAG_SHUTDOWN_CORRUPT 0x00000010
# define XFS_PTAG_SHUTDOWN_IOERROR 0x00000020
# define XFS_PTAG_SHUTDOWN_LOGERROR 0x00000040
2006-09-28 11:03:20 +10:00
# define XFS_PTAG_FSBLOCK_ZERO 0x00000080
2019-02-01 09:12:20 -08:00
# define XFS_PTAG_VERIFIER_ERROR 0x00000100
2005-04-16 15:20:36 -07:00
# endif /* __XFS_ERROR_H__ */