2005-04-17 02:20:36 +04:00
/*
2005-11-02 06:58:39 +03:00
* Copyright ( c ) 2000 - 2002 , 2005 Silicon Graphics , Inc .
* All Rights Reserved .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
2005-04-17 02:20:36 +04:00
* published by the Free Software Foundation .
*
2005-11-02 06:58:39 +03:00
* 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 .
2005-04-17 02:20:36 +04:00
*
2005-11-02 06:58:39 +03:00
* 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
2005-04-17 02:20:36 +04:00
*/
# ifndef __XFS_ERROR_H__
# define __XFS_ERROR_H__
struct xfs_mount ;
2010-04-13 09:22:08 +04:00
extern void xfs_error_report ( const char * tag , int level , struct xfs_mount * mp ,
2018-01-08 21:51:25 +03:00
const char * filename , int linenum ,
xfs_failaddr_t failaddr ) ;
2010-04-13 09:22:08 +04:00
extern void xfs_corruption_error ( const char * tag , int level ,
struct xfs_mount * mp , void * p , const char * filename ,
2018-01-08 21:51:25 +03:00
int linenum , xfs_failaddr_t failaddr ) ;
2018-01-08 21:51:03 +03:00
extern void xfs_verifier_error ( struct xfs_buf * bp , int error ,
xfs_failaddr_t failaddr ) ;
2005-04-17 02:20:36 +04:00
# define XFS_ERROR_REPORT(e, lvl, mp) \
xfs_error_report ( e , lvl , mp , __FILE__ , __LINE__ , __return_address )
# define XFS_CORRUPTION_ERROR(e, lvl, mp, mem) \
xfs_corruption_error ( e , lvl , mp , mem , \
__FILE__ , __LINE__ , __return_address )
# define XFS_ERRLEVEL_OFF 0
# define XFS_ERRLEVEL_LOW 1
# define XFS_ERRLEVEL_HIGH 5
2018-01-08 21:51:26 +03:00
/* Dump 128 bytes of any corrupt buffer */
# define XFS_CORRUPTION_DUMP_LEN (128)
2005-11-02 06:38:42 +03:00
/*
* Macros to set EFSCORRUPTED & return / branch .
*/
2015-02-23 14:39:08 +03:00
# define XFS_WANT_CORRUPTED_GOTO(mp, x, l) \
2005-11-02 06:38:42 +03: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 14:39:08 +03:00
XFS_ERRLEVEL_LOW , mp ) ; \
2014-06-25 08:58:08 +04:00
error = - EFSCORRUPTED ; \
2005-11-02 06:38:42 +03:00
goto l ; \
} \
}
2015-02-23 14:39:13 +03:00
# define XFS_WANT_CORRUPTED_RETURN(mp, x) \
2005-11-02 06:38:42 +03: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 14:39:13 +03:00
XFS_ERRLEVEL_LOW , mp ) ; \
2014-06-25 08:58:08 +04:00
return - EFSCORRUPTED ; \
2005-11-02 06:38:42 +03:00
} \
}
2008-08-13 10:17:37 +04:00
# ifdef DEBUG
2017-06-21 03:54:46 +03: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-21 03:54:47 +03:00
# define XFS_TEST_ERROR(expr, mp, tag) \
2017-06-21 03:54:46 +03:00
( ( expr ) | | xfs_errortag_test ( ( mp ) , # expr , __FILE__ , __LINE__ , ( tag ) ) )
2005-04-17 02:20:36 +04:00
2017-06-21 03:54:47 +03:00
extern int xfs_errortag_get ( struct xfs_mount * mp , unsigned int error_tag ) ;
2017-06-21 03:54:46 +03: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-17 02:20:36 +04:00
# else
2017-06-21 03:54:46 +03:00
# define xfs_errortag_init(mp) (0)
# define xfs_errortag_del(mp)
2017-06-21 03:54:47 +03:00
# define XFS_TEST_ERROR(expr, mp, tag) (expr)
2017-06-21 03:54:46 +03: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 10:17:37 +04:00
# endif /* DEBUG */
2005-04-17 02:20:36 +04:00
/*
2011-03-07 02:02:35 +03: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-17 02:20:36 +04: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 05:03:20 +04:00
# define XFS_PTAG_FSBLOCK_ZERO 0x00000080
2005-04-17 02:20:36 +04:00
# endif /* __XFS_ERROR_H__ */