X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fhfs%2Fextent.c;h=2ea3c8932bd30c9718f404084c578c908e017358;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=b7ce3f04805fdfb4f5e52cd820900c90701c4d85;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/fs/hfs/extent.c b/fs/hfs/extent.c index b7ce3f048..2ea3c8932 100644 --- a/fs/hfs/extent.c +++ b/fs/hfs/extent.c @@ -328,8 +328,8 @@ int hfs_get_block(struct inode *inode, sector_t block, /* Convert inode block to disk allocation block */ ablock = (u32)block / HFS_SB(sb)->fs_div; - if (block >= inode->i_blocks) { - if (block > inode->i_blocks || !create) + if (block >= HFS_I(inode)->fs_blocks) { + if (block > HFS_I(inode)->fs_blocks || !create) return -EIO; if (ablock >= HFS_I(inode)->alloc_blocks) { res = hfs_extend_file(inode); @@ -363,7 +363,8 @@ done: if (create) { set_buffer_new(bh_result); HFS_I(inode)->phys_size += sb->s_blocksize; - inode->i_blocks++; + HFS_I(inode)->fs_blocks++; + inode_add_bytes(inode, sb->s_blocksize); mark_inode_dirty(inode); } return 0; @@ -521,6 +522,7 @@ void hfs_file_truncate(struct inode *inode) HFS_I(inode)->alloc_blocks = blk_cnt; out: HFS_I(inode)->phys_size = inode->i_size; + HFS_I(inode)->fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits; + inode_set_bytes(inode, HFS_I(inode)->fs_blocks << sb->s_blocksize_bits); mark_inode_dirty(inode); - inode->i_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits; }