2019-05-31 01:09:56 -07:00
/* SPDX-License-Identifier: GPL-2.0-only */
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
*/
# 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 ;
2014-03-31 17:48:27 +01:00
extern const struct address_space_operations gfs2_rgrp_aops ;
2009-12-08 12:12:13 +00:00
static inline struct gfs2_sbd * gfs2_mapping2sbd ( struct address_space * mapping )
{
struct inode * inode = mapping - > host ;
2022-05-08 03:06:30 -07:00
if ( mapping - > a_ops = = & gfs2_meta_aops ) {
struct gfs2_glock_aspace * gla =
container_of ( mapping , struct gfs2_glock_aspace , mapping ) ;
return gla - > glock . gl_name . ln_sbd ;
} else if ( mapping - > a_ops = = & gfs2_rgrp_aops )
2014-03-31 17:48:27 +01:00
return container_of ( mapping , struct gfs2_sbd , sd_aspace ) ;
2009-12-08 12:12:13 +00:00
else
return inode - > i_sb - > s_fs_info ;
}
2006-01-16 16:50:04 +00:00
2023-10-09 18:49:31 +02:00
struct buffer_head * gfs2_meta_new ( struct gfs2_glock * gl , u64 blkno ) ;
int gfs2_meta_read ( struct gfs2_glock * gl , u64 blkno , int flags ,
int rahead , struct buffer_head * * bhp ) ;
int gfs2_meta_wait ( struct gfs2_sbd * sdp , struct buffer_head * bh ) ;
struct buffer_head * gfs2_getbuf ( struct gfs2_glock * gl , u64 blkno ,
int create ) ;
2016-05-02 11:53:35 -05:00
enum {
REMOVE_JDATA = 0 ,
REMOVE_META = 1 ,
} ;
2023-10-09 18:49:31 +02:00
void gfs2_remove_from_journal ( struct buffer_head * bh , int meta ) ;
void gfs2_journal_wipe ( struct gfs2_inode * ip , u64 bstart , u32 blen ) ;
int gfs2_meta_buffer ( struct gfs2_inode * ip , u32 mtype , 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 )
{
2021-03-25 18:48:49 +01:00
return gfs2_meta_buffer ( ip , GFS2_METATYPE_DI , 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__ */