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 __BMAP_DOT_H__
# define __BMAP_DOT_H__
2017-02-16 18:27:16 +03:00
# include <linux/iomap.h>
2008-12-10 13:28:10 +03:00
# include "inode.h"
2006-09-05 18:39:21 +04:00
struct inode ;
struct gfs2_inode ;
struct page ;
2008-12-10 13:28:10 +03:00
/**
* gfs2_write_calc_reserv - calculate number of blocks needed to write to a file
* @ ip : the file
* @ len : the number of bytes to be written to the file
* @ data_blocks : returns the number of data blocks required
* @ ind_blocks : returns the number of indirect blocks required
*
*/
static inline void gfs2_write_calc_reserv ( const struct gfs2_inode * ip ,
unsigned int len ,
unsigned int * data_blocks ,
unsigned int * ind_blocks )
{
const struct gfs2_sbd * sdp = GFS2_SB ( & ip - > i_inode ) ;
unsigned int tmp ;
BUG_ON ( gfs2_is_dir ( ip ) ) ;
* data_blocks = ( len > > sdp - > sd_sb . sb_bsize_shift ) + 3 ;
* ind_blocks = 3 * ( sdp - > sd_max_height - 1 ) ;
for ( tmp = * data_blocks ; tmp > sdp - > sd_diptrs ; ) {
tmp = DIV_ROUND_UP ( tmp , sdp - > sd_inptrs ) ;
* ind_blocks + = tmp ;
}
}
2018-06-04 15:56:51 +03:00
extern const struct iomap_ops gfs2_iomap_ops ;
2019-07-02 00:54:39 +03:00
extern const struct iomap_writeback_ops gfs2_writeback_ops ;
2018-06-04 15:56:51 +03:00
2010-08-11 12:37:53 +04:00
extern int gfs2_unstuff_dinode ( struct gfs2_inode * ip , struct page * page ) ;
extern int gfs2_block_map ( struct inode * inode , sector_t lblock ,
struct buffer_head * bh , int create ) ;
2018-06-04 15:56:51 +03:00
extern int gfs2_iomap_get_alloc ( struct inode * inode , loff_t pos , loff_t length ,
struct iomap * iomap ) ;
2010-08-11 12:37:53 +04:00
extern int gfs2_extent_map ( struct inode * inode , u64 lblock , int * new ,
u64 * dblock , unsigned * extlen ) ;
extern int gfs2_setattr_size ( struct inode * inode , u64 size ) ;
extern void gfs2_trim_blocks ( struct inode * inode ) ;
extern int gfs2_truncatei_resume ( struct gfs2_inode * ip ) ;
extern int gfs2_file_dealloc ( struct gfs2_inode * ip ) ;
extern int gfs2_write_alloc_required ( struct gfs2_inode * ip , u64 offset ,
unsigned int len ) ;
2014-03-03 17:35:57 +04:00
extern int gfs2_map_journal_extents ( struct gfs2_sbd * sdp , struct gfs2_jdesc * jd ) ;
extern void gfs2_free_journal_extents ( struct gfs2_jdesc * jd ) ;
2017-12-14 19:11:03 +03:00
extern int __gfs2_punch_hole ( struct file * file , loff_t offset , loff_t length ) ;
2019-03-25 18:34:19 +03:00
extern int gfs2_lblk_to_dblk ( struct inode * inode , u32 lblock , u64 * dblock ) ;
2006-01-16 19:50:04 +03:00
# endif /* __BMAP_DOT_H__ */