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
}
2009-12-08 15:12:13 +03:00
extern const struct address_space_operations gfs2_meta_aops ;
2014-03-31 20:48:27 +04:00
extern const struct address_space_operations gfs2_rgrp_aops ;
2009-12-08 15:12:13 +03:00
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 ;
2014-03-31 20:48:27 +04:00
else if ( mapping - > a_ops = = & gfs2_rgrp_aops )
return container_of ( mapping , struct gfs2_sbd , sd_aspace ) ;
2009-12-08 15:12:13 +03:00
else
return inode - > i_sb - > s_fs_info ;
}
2006-01-16 19:50:04 +03:00
2013-07-03 18:13:32 +04: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 19:50:04 +03:00
static inline int gfs2_meta_inode_buffer ( struct gfs2_inode * ip ,
struct buffer_head * * bhp )
{
2012-05-10 16:33:55 +04:00
return gfs2_meta_indirect_buffer ( ip , 0 , ip - > i_no_addr , 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 ) ) )
2006-01-16 19:50:04 +03:00
# endif /* __DIO_DOT_H__ */