forked from Minki/linux
461cb419f0
Function gfs2_write_alloc_required always returned zero as its return code. Therefore, it doesn't need to return a return code at all. Given that, we can use the return value to return whether or not the dinode needs block allocations rather than passing that value in, which in turn simplifies a bunch of error checking. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
58 lines
1.7 KiB
C
58 lines
1.7 KiB
C
/*
|
|
* Copyright (C) Sistina Software, Inc. 1997-2003 All rights reserved.
|
|
* Copyright (C) 2004-2006 Red Hat, Inc. All rights reserved.
|
|
*
|
|
* This copyrighted material is made available to anyone wishing to use,
|
|
* modify, copy, or redistribute it subject to the terms and conditions
|
|
* of the GNU General Public License version 2.
|
|
*/
|
|
|
|
#ifndef __BMAP_DOT_H__
|
|
#define __BMAP_DOT_H__
|
|
|
|
#include "inode.h"
|
|
|
|
struct inode;
|
|
struct gfs2_inode;
|
|
struct page;
|
|
|
|
|
|
/**
|
|
* 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;
|
|
}
|
|
}
|
|
|
|
int gfs2_unstuff_dinode(struct gfs2_inode *ip, struct page *page);
|
|
int gfs2_block_map(struct inode *inode, sector_t lblock, struct buffer_head *bh, int create);
|
|
int gfs2_extent_map(struct inode *inode, u64 lblock, int *new, u64 *dblock, unsigned *extlen);
|
|
|
|
int gfs2_truncatei(struct gfs2_inode *ip, u64 size);
|
|
int gfs2_truncatei_resume(struct gfs2_inode *ip);
|
|
int gfs2_file_dealloc(struct gfs2_inode *ip);
|
|
int gfs2_write_alloc_required(struct gfs2_inode *ip, u64 offset,
|
|
unsigned int len);
|
|
|
|
#endif /* __BMAP_DOT_H__ */
|