2019-06-01 10:08:20 +02:00
/* SPDX-License-Identifier: GPL-2.0-only */
2021-05-06 18:06:44 -07:00
/*
2005-12-15 14:31:24 -08:00
* extent_map . h
*
* In - memory file extent mappings for OCFS2 .
*
* Copyright ( C ) 2004 Oracle . All rights reserved .
*/
# ifndef _EXTENT_MAP_H
# define _EXTENT_MAP_H
2007-04-23 18:53:12 -07:00
struct ocfs2_extent_map_item {
unsigned int ei_cpos ;
unsigned int ei_phys ;
unsigned int ei_clusters ;
unsigned int ei_flags ;
struct list_head ei_list ;
} ;
# define OCFS2_MAX_EXTENT_MAP_ITEMS 3
struct ocfs2_extent_map {
unsigned int em_num_items ;
struct list_head em_list ;
} ;
void ocfs2_extent_map_init ( struct inode * inode ) ;
void ocfs2_extent_map_trunc ( struct inode * inode , unsigned int cluster ) ;
void ocfs2_extent_map_insert_rec ( struct inode * inode ,
struct ocfs2_extent_rec * rec ) ;
2007-02-09 20:24:12 -08:00
int ocfs2_get_clusters ( struct inode * inode , u32 v_cluster , u32 * p_cluster ,
2007-03-09 16:21:46 -08:00
u32 * num_clusters , unsigned int * extent_flags ) ;
2007-01-17 12:31:35 -08:00
int ocfs2_extent_map_get_blocks ( struct inode * inode , u64 v_blkno , u64 * p_blkno ,
2007-03-09 16:26:50 -08:00
u64 * ret_count , unsigned int * extent_flags ) ;
2005-12-15 14:31:24 -08:00
2008-10-03 17:32:11 -04:00
int ocfs2_fiemap ( struct inode * inode , struct fiemap_extent_info * fieinfo ,
u64 map_start , u64 map_len ) ;
2018-01-31 16:15:21 -08:00
int ocfs2_overwrite_io ( struct inode * inode , struct buffer_head * di_bh ,
u64 map_start , u64 map_len ) ;
2011-07-25 14:58:15 -07:00
int ocfs2_seek_data_hole_offset ( struct file * file , loff_t * offset , int origin ) ;
2008-08-18 17:38:48 +08:00
int ocfs2_xattr_get_clusters ( struct inode * inode , u32 v_cluster ,
u32 * p_cluster , u32 * num_clusters ,
2009-08-18 11:41:57 +08:00
struct ocfs2_extent_list * el ,
unsigned int * extent_flags ) ;
2008-08-18 17:38:48 +08:00
2008-11-13 14:49:20 -08:00
int ocfs2_read_virt_blocks ( struct inode * inode , u64 v_block , int nr ,
struct buffer_head * bhs [ ] , int flags ,
int ( * validate ) ( struct super_block * sb ,
struct buffer_head * bh ) ) ;
2009-08-11 14:33:14 +08:00
int ocfs2_figure_hole_clusters ( struct ocfs2_caching_info * ci ,
struct ocfs2_extent_list * el ,
struct buffer_head * eb_bh ,
u32 v_cluster ,
u32 * num_clusters ) ;
2008-11-13 14:49:20 -08:00
static inline int ocfs2_read_virt_block ( struct inode * inode , u64 v_block ,
struct buffer_head * * bh ,
int ( * validate ) ( struct super_block * sb ,
struct buffer_head * bh ) )
{
int status = 0 ;
if ( bh = = NULL ) {
printk ( " ocfs2: bh == NULL \n " ) ;
status = - EINVAL ;
goto bail ;
}
status = ocfs2_read_virt_blocks ( inode , v_block , 1 , bh , 0 , validate ) ;
bail :
return status ;
}
2005-12-15 14:31:24 -08:00
# endif /* _EXTENT_MAP_H */