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 __DIO_DOT_H__
# define __DIO_DOT_H__
2006-09-05 18:39:21 +04:00
# include <linux/buffer_head.h>
# include <linux/string.h>
# include "incore.h"
2006-01-16 19:50:04 +03:00
static inline void gfs2_buffer_clear ( struct buffer_head * bh )
{
memset ( bh - > b_data , 0 , bh - > b_size ) ;
}
static inline void gfs2_buffer_clear_tail ( struct buffer_head * bh , int head )
{
2006-07-31 23:42:17 +04:00
BUG_ON ( head > bh - > b_size ) ;
2006-01-16 19:50:04 +03:00
memset ( bh - > b_data + head , 0 , bh - > b_size - head ) ;
}
static inline void gfs2_buffer_copy_tail ( struct buffer_head * to_bh ,
int to_head ,
struct buffer_head * from_bh ,
int from_head )
{
2006-07-31 23:42:17 +04:00
BUG_ON ( from_head < to_head ) ;
memcpy ( to_bh - > b_data + to_head , from_bh - > b_data + from_head ,
2006-01-16 19:50:04 +03:00
from_bh - > b_size - from_head ) ;
memset ( to_bh - > b_data + to_bh - > b_size + to_head - from_head ,
2006-07-31 23:42:17 +04:00
0 , from_head - to_head ) ;
2006-01-16 19:50:04 +03:00
}
struct inode * gfs2_aspace_get ( struct gfs2_sbd * sdp ) ;
void gfs2_aspace_put ( struct inode * aspace ) ;
void gfs2_meta_inval ( struct gfs2_glock * gl ) ;
2006-09-22 01:05:23 +04:00
void gfs2_meta_sync ( struct gfs2_glock * gl ) ;
2006-01-16 19:50:04 +03:00
2006-09-04 20:49:07 +04:00
struct buffer_head * gfs2_meta_new ( struct gfs2_glock * gl , u64 blkno ) ;
int gfs2_meta_read ( struct gfs2_glock * gl , u64 blkno ,
2006-01-16 19:50:04 +03:00
int flags , struct buffer_head * * bhp ) ;
2006-09-22 01:05:23 +04:00
int gfs2_meta_wait ( struct gfs2_sbd * sdp , struct buffer_head * bh ) ;
2008-05-21 20:03:22 +04:00
struct buffer_head * gfs2_getbuf ( struct gfs2_glock * gl , u64 blkno , int create ) ;
2006-01-16 19:50:04 +03:00
2006-02-27 20:00:42 +03:00
void gfs2_attach_bufdata ( struct gfs2_glock * gl , struct buffer_head * bh ,
int meta ) ;
2006-01-16 19:50:04 +03:00
2007-09-17 13:59:52 +04:00
void gfs2_remove_from_journal ( struct buffer_head * bh , struct gfs2_trans * tr ,
int meta ) ;
2006-09-04 20:49:07 +04:00
void gfs2_meta_wipe ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
2006-01-16 19:50:04 +03:00
2006-09-04 20:49:07 +04:00
int gfs2_meta_indirect_buffer ( struct gfs2_inode * ip , int height , u64 num ,
2006-01-16 19:50:04 +03:00
int new , struct buffer_head * * bhp ) ;
static inline int gfs2_meta_inode_buffer ( struct gfs2_inode * ip ,
struct buffer_head * * bhp )
{
2007-05-15 18:37:50 +04:00
return gfs2_meta_indirect_buffer ( ip , 0 , ip - > i_no_addr , 0 , bhp ) ;
2006-01-16 19:50:04 +03:00
}
2006-09-22 01:05:23 +04:00
struct buffer_head * gfs2_meta_ra ( struct gfs2_glock * gl , u64 dblock , u32 extlen ) ;
2006-01-16 19:50:04 +03:00
2006-10-03 19:10:41 +04:00
# define buffer_busy(bh) \
( ( bh ) - > b_state & ( ( 1ul < < BH_Dirty ) | ( 1ul < < BH_Lock ) | ( 1ul < < BH_Pinned ) ) )
# define buffer_in_io(bh) \
( ( bh ) - > b_state & ( ( 1ul < < BH_Dirty ) | ( 1ul < < BH_Lock ) ) )
2006-01-16 19:50:04 +03:00
# endif /* __DIO_DOT_H__ */