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 __LOPS_DOT_H__
# define __LOPS_DOT_H__
2006-09-05 18:39:21 +04:00
# include <linux/list.h>
# include "incore.h"
2006-04-07 19:17:32 +04:00
extern const struct gfs2_log_operations gfs2_glock_lops ;
extern const struct gfs2_log_operations gfs2_buf_lops ;
extern const struct gfs2_log_operations gfs2_revoke_lops ;
extern const struct gfs2_log_operations gfs2_rg_lops ;
extern const struct gfs2_log_operations gfs2_databuf_lops ;
2006-01-16 19:50:04 +03:00
2006-04-07 19:17:32 +04:00
extern const struct gfs2_log_operations * gfs2_log_ops [ ] ;
2006-01-16 19:50:04 +03:00
static inline void lops_init_le ( struct gfs2_log_element * le ,
2006-04-07 19:17:32 +04:00
const struct gfs2_log_operations * lops )
2006-01-16 19:50:04 +03:00
{
INIT_LIST_HEAD ( & le - > le_list ) ;
le - > le_ops = lops ;
}
static inline void lops_add ( struct gfs2_sbd * sdp , struct gfs2_log_element * le )
{
if ( le - > le_ops - > lo_add )
le - > le_ops - > lo_add ( sdp , le ) ;
}
static inline void lops_incore_commit ( struct gfs2_sbd * sdp ,
struct gfs2_trans * tr )
{
int x ;
for ( x = 0 ; gfs2_log_ops [ x ] ; x + + )
if ( gfs2_log_ops [ x ] - > lo_incore_commit )
gfs2_log_ops [ x ] - > lo_incore_commit ( sdp , tr ) ;
}
static inline void lops_before_commit ( struct gfs2_sbd * sdp )
{
int x ;
for ( x = 0 ; gfs2_log_ops [ x ] ; x + + )
if ( gfs2_log_ops [ x ] - > lo_before_commit )
gfs2_log_ops [ x ] - > lo_before_commit ( sdp ) ;
}
static inline void lops_after_commit ( struct gfs2_sbd * sdp , struct gfs2_ail * ai )
{
int x ;
for ( x = 0 ; gfs2_log_ops [ x ] ; x + + )
if ( gfs2_log_ops [ x ] - > lo_after_commit )
gfs2_log_ops [ x ] - > lo_after_commit ( sdp , ai ) ;
}
static inline void lops_before_scan ( struct gfs2_jdesc * jd ,
2006-10-14 05:47:13 +04:00
struct gfs2_log_header_host * head ,
2006-01-16 19:50:04 +03:00
unsigned int pass )
{
int x ;
for ( x = 0 ; gfs2_log_ops [ x ] ; x + + )
if ( gfs2_log_ops [ x ] - > lo_before_scan )
gfs2_log_ops [ x ] - > lo_before_scan ( jd , head , pass ) ;
}
static inline int lops_scan_elements ( struct gfs2_jdesc * jd , unsigned int start ,
struct gfs2_log_descriptor * ld ,
__be64 * ptr ,
unsigned int pass )
{
int x , error ;
for ( x = 0 ; gfs2_log_ops [ x ] ; x + + )
if ( gfs2_log_ops [ x ] - > lo_scan_elements ) {
error = gfs2_log_ops [ x ] - > lo_scan_elements ( jd , start ,
ld , ptr , pass ) ;
if ( error )
return error ;
}
return 0 ;
}
static inline void lops_after_scan ( struct gfs2_jdesc * jd , int error ,
unsigned int pass )
{
int x ;
for ( x = 0 ; gfs2_log_ops [ x ] ; x + + )
if ( gfs2_log_ops [ x ] - > lo_before_scan )
gfs2_log_ops [ x ] - > lo_after_scan ( jd , error , pass ) ;
}
# endif /* __LOPS_DOT_H__ */