2019-05-31 11:09:56 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
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
*/
# 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 )
2015-03-16 19:52:05 +03:00
return ( ( ( struct gfs2_glock * ) mapping ) - 1 ) - > gl_name . ln_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 ,
2015-11-12 00:00:35 +03:00
int rahead , struct buffer_head * * bhp ) ;
2013-07-03 18:13:32 +04:00
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 ) ;
2016-05-02 19:53:35 +03:00
enum {
REMOVE_JDATA = 0 ,
REMOVE_META = 1 ,
} ;
extern void gfs2_remove_from_journal ( struct buffer_head * bh , int meta ) ;
2013-07-03 18:13:32 +04:00
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__ */