2006-01-16 19:50:04 +03:00
/*
* Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2006-05-18 23:09:15 +04:00
* Copyright ( C ) 2004 - 2006 Red Hat , Inc . All rights reserved .
2006-01-16 19:50:04 +03:00
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2006-09-01 19:05:15 +04:00
* of the GNU General Public License version 2.
2006-01-16 19:50:04 +03:00
*/
# ifndef __UTIL_DOT_H__
# define __UTIL_DOT_H__
2012-03-08 16:10:23 +04:00
# include <linux/mempool.h>
2006-09-05 18:39:21 +04:00
# include "incore.h"
2006-01-16 19:50:04 +03:00
# define fs_printk(level, fs, fmt, arg...) \
printk ( level " GFS2: fsid=%s: " fmt , ( fs ) - > sd_fsname , # # arg )
# define fs_info(fs, fmt, arg...) \
fs_printk ( KERN_INFO , fs , fmt , # # arg )
# define fs_warn(fs, fmt, arg...) \
fs_printk ( KERN_WARNING , fs , fmt , # # arg )
# define fs_err(fs, fmt, arg...) \
fs_printk ( KERN_ERR , fs , fmt , # # arg )
void gfs2_assert_i ( struct gfs2_sbd * sdp ) ;
# define gfs2_assert(sdp, assertion) \
do { \
if ( unlikely ( ! ( assertion ) ) ) { \
gfs2_assert_i ( sdp ) ; \
2006-04-21 23:52:46 +04:00
BUG ( ) ; \
2006-01-16 19:50:04 +03:00
} \
} while ( 0 )
int gfs2_assert_withdraw_i ( struct gfs2_sbd * sdp , char * assertion ,
const char * function , char * file , unsigned int line ) ;
# define gfs2_assert_withdraw(sdp, assertion) \
( ( likely ( assertion ) ) ? 0 : gfs2_assert_withdraw_i ( ( sdp ) , # assertion , \
2008-04-30 11:55:09 +04:00
__func__ , __FILE__ , __LINE__ ) )
2006-01-16 19:50:04 +03:00
int gfs2_assert_warn_i ( struct gfs2_sbd * sdp , char * assertion ,
const char * function , char * file , unsigned int line ) ;
# define gfs2_assert_warn(sdp, assertion) \
( ( likely ( assertion ) ) ? 0 : gfs2_assert_warn_i ( ( sdp ) , # assertion , \
2008-04-30 11:55:09 +04:00
__func__ , __FILE__ , __LINE__ ) )
2006-01-16 19:50:04 +03:00
int gfs2_consist_i ( struct gfs2_sbd * sdp , int cluster_wide ,
const char * function , char * file , unsigned int line ) ;
# define gfs2_consist(sdp) \
2008-04-30 11:55:09 +04:00
gfs2_consist_i ( ( sdp ) , 0 , __func__ , __FILE__ , __LINE__ )
2006-01-16 19:50:04 +03:00
int gfs2_consist_inode_i ( struct gfs2_inode * ip , int cluster_wide ,
const char * function , char * file , unsigned int line ) ;
# define gfs2_consist_inode(ip) \
2008-04-30 11:55:09 +04:00
gfs2_consist_inode_i ( ( ip ) , 0 , __func__ , __FILE__ , __LINE__ )
2006-01-16 19:50:04 +03:00
int gfs2_consist_rgrpd_i ( struct gfs2_rgrpd * rgd , int cluster_wide ,
const char * function , char * file , unsigned int line ) ;
# define gfs2_consist_rgrpd(rgd) \
2008-04-30 11:55:09 +04:00
gfs2_consist_rgrpd_i ( ( rgd ) , 0 , __func__ , __FILE__ , __LINE__ )
2006-01-16 19:50:04 +03:00
int gfs2_meta_check_ii ( struct gfs2_sbd * sdp , struct buffer_head * bh ,
const char * type , const char * function ,
char * file , unsigned int line ) ;
2012-05-29 13:47:51 +04:00
static inline int gfs2_meta_check ( struct gfs2_sbd * sdp ,
struct buffer_head * bh )
2006-01-16 19:50:04 +03:00
{
struct gfs2_meta_header * mh = ( struct gfs2_meta_header * ) bh - > b_data ;
2006-10-14 18:46:30 +04:00
u32 magic = be32_to_cpu ( mh - > mh_magic ) ;
2012-05-29 13:47:51 +04:00
if ( unlikely ( magic ! = GFS2_MAGIC ) ) {
printk ( KERN_ERR " GFS2: Magic number missing at %llu \n " ,
( unsigned long long ) bh - > b_blocknr ) ;
return - EIO ;
}
2006-01-16 19:50:04 +03:00
return 0 ;
}
int gfs2_metatype_check_ii ( struct gfs2_sbd * sdp , struct buffer_head * bh ,
2006-09-04 20:49:07 +04:00
u16 type , u16 t ,
2006-01-16 19:50:04 +03:00
const char * function ,
char * file , unsigned int line ) ;
static inline int gfs2_metatype_check_i ( struct gfs2_sbd * sdp ,
struct buffer_head * bh ,
2006-09-04 20:49:07 +04:00
u16 type ,
2006-01-16 19:50:04 +03:00
const char * function ,
char * file , unsigned int line )
{
struct gfs2_meta_header * mh = ( struct gfs2_meta_header * ) bh - > b_data ;
2006-10-14 18:46:30 +04:00
u32 magic = be32_to_cpu ( mh - > mh_magic ) ;
2006-09-04 20:49:07 +04:00
u16 t = be32_to_cpu ( mh - > mh_type ) ;
2006-01-16 19:50:04 +03:00
if ( unlikely ( magic ! = GFS2_MAGIC ) )
return gfs2_meta_check_ii ( sdp , bh , " magic number " , function ,
file , line ) ;
if ( unlikely ( t ! = type ) )
return gfs2_metatype_check_ii ( sdp , bh , type , t , function ,
file , line ) ;
return 0 ;
}
# define gfs2_metatype_check(sdp, bh, type) \
2008-04-30 11:55:09 +04:00
gfs2_metatype_check_i ( ( sdp ) , ( bh ) , ( type ) , __func__ , __FILE__ , __LINE__ )
2006-01-16 19:50:04 +03:00
2006-09-04 20:49:07 +04:00
static inline void gfs2_metatype_set ( struct buffer_head * bh , u16 type ,
u16 format )
2006-01-16 19:50:04 +03:00
{
struct gfs2_meta_header * mh ;
mh = ( struct gfs2_meta_header * ) bh - > b_data ;
2006-03-31 00:46:23 +04:00
mh - > mh_type = cpu_to_be32 ( type ) ;
mh - > mh_format = cpu_to_be32 ( format ) ;
2006-01-16 19:50:04 +03:00
}
int gfs2_io_error_i ( struct gfs2_sbd * sdp , const char * function ,
char * file , unsigned int line ) ;
# define gfs2_io_error(sdp) \
2008-04-30 11:55:09 +04:00
gfs2_io_error_i ( ( sdp ) , __func__ , __FILE__ , __LINE__ ) ;
2006-01-16 19:50:04 +03:00
int gfs2_io_error_bh_i ( struct gfs2_sbd * sdp , struct buffer_head * bh ,
const char * function , char * file , unsigned int line ) ;
# define gfs2_io_error_bh(sdp, bh) \
2008-04-30 11:55:09 +04:00
gfs2_io_error_bh_i ( ( sdp ) , ( bh ) , __func__ , __FILE__ , __LINE__ ) ;
2006-01-16 19:50:04 +03:00
2006-12-07 07:33:20 +03:00
extern struct kmem_cache * gfs2_glock_cachep ;
2009-12-08 15:12:13 +03:00
extern struct kmem_cache * gfs2_glock_aspace_cachep ;
2006-12-07 07:33:20 +03:00
extern struct kmem_cache * gfs2_inode_cachep ;
extern struct kmem_cache * gfs2_bufdata_cachep ;
2008-01-29 02:20:26 +03:00
extern struct kmem_cache * gfs2_rgrpd_cachep ;
2008-11-17 17:25:37 +03:00
extern struct kmem_cache * gfs2_quotad_cachep ;
2012-04-11 20:59:32 +04:00
extern struct kmem_cache * gfs2_rsrv_cachep ;
2012-04-16 12:28:31 +04:00
extern mempool_t * gfs2_page_pool ;
2006-01-16 19:50:04 +03:00
static inline unsigned int gfs2_tune_get_i ( struct gfs2_tune * gt ,
unsigned int * p )
{
unsigned int x ;
spin_lock ( & gt - > gt_spin ) ;
x = * p ;
spin_unlock ( & gt - > gt_spin ) ;
return x ;
}
# define gfs2_tune_get(sdp, field) \
gfs2_tune_get_i ( & ( sdp ) - > sd_tune , & ( sdp ) - > sd_tune . field )
void gfs2_icbit_munge ( struct gfs2_sbd * sdp , unsigned char * * bitmap ,
unsigned int bit , int new_value ) ;
2008-01-30 18:34:04 +03:00
int gfs2_lm_withdraw ( struct gfs2_sbd * sdp , char * fmt , . . . ) ;
2006-01-16 19:50:04 +03:00
# endif /* __UTIL_DOT_H__ */