2006-01-16 16:50:04 +00:00
/*
* Copyright ( C ) Sistina Software , Inc . 1997 - 2003 All rights reserved .
2006-05-18 15:09:15 -04:00
* Copyright ( C ) 2004 - 2006 Red Hat , Inc . All rights reserved .
2006-01-16 16:50:04 +00: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 11:05:15 -04:00
* of the GNU General Public License version 2.
2006-01-16 16:50:04 +00:00
*/
# ifndef __DIO_DOT_H__
# define __DIO_DOT_H__
2006-09-05 10:39:21 -04:00
# include <linux/buffer_head.h>
# include <linux/string.h>
# include "incore.h"
2006-01-16 16:50:04 +00: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 15:42:17 -04:00
BUG_ON ( head > bh - > b_size ) ;
2006-01-16 16:50:04 +00: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 15: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 16:50:04 +00:00
from_bh - > b_size - from_head ) ;
memset ( to_bh - > b_data + to_bh - > b_size + to_head - from_head ,
2006-07-31 15:42:17 -04:00
0 , from_head - to_head ) ;
2006-01-16 16:50:04 +00:00
}
2009-12-08 12:12:13 +00:00
extern const struct address_space_operations gfs2_meta_aops ;
static inline struct gfs2_sbd * gfs2_mapping2sbd ( struct address_space * mapping )
{
struct inode * inode = mapping - > host ;
if ( mapping - > a_ops = = & gfs2_meta_aops )
return ( ( ( struct gfs2_glock * ) mapping ) - 1 ) - > gl_sbd ;
else
return inode - > i_sb - > s_fs_info ;
}
2006-01-16 16:50:04 +00:00
2013-07-03 15:13:32 +01:00
extern struct buffer_head * gfs2_meta_new ( struct gfs2_glock * gl , u64 blkno ) ;
extern int gfs2_meta_read ( struct gfs2_glock * gl , u64 blkno , int flags ,
struct buffer_head * * bhp ) ;
extern int gfs2_meta_wait ( struct gfs2_sbd * sdp , struct buffer_head * bh ) ;
extern struct buffer_head * gfs2_getbuf ( struct gfs2_glock * gl , u64 blkno ,
int create ) ;
extern void gfs2_remove_from_journal ( struct buffer_head * bh ,
struct gfs2_trans * tr , int meta ) ;
extern void gfs2_meta_wipe ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
extern int gfs2_meta_indirect_buffer ( struct gfs2_inode * ip , int height , u64 num ,
struct buffer_head * * bhp ) ;
2006-01-16 16:50:04 +00:00
static inline int gfs2_meta_inode_buffer ( struct gfs2_inode * ip ,
struct buffer_head * * bhp )
{
2012-05-10 08:33:55 -04:00
return gfs2_meta_indirect_buffer ( ip , 0 , ip - > i_no_addr , bhp ) ;
2006-01-16 16:50:04 +00:00
}
2006-09-21 17:05:23 -04:00
struct buffer_head * gfs2_meta_ra ( struct gfs2_glock * gl , u64 dblock , u32 extlen ) ;
2006-01-16 16:50:04 +00:00
2006-10-03 11:10:41 -04:00
# define buffer_busy(bh) \
( ( bh ) - > b_state & ( ( 1ul < < BH_Dirty ) | ( 1ul < < BH_Lock ) | ( 1ul < < BH_Pinned ) ) )
2006-01-16 16:50:04 +00:00
# endif /* __DIO_DOT_H__ */