}
} else if (inode->i_size == HFSPLUS_I(inode).phys_size) return;
void hfsplus_file_truncate(struct inode *inode){	struct super_block *sb = inode->i_sb;	struct hfs_find_data fd;	u32 alloc_cnt, blk_cnt, start;	int res;	dprint(DBG_INODE, "truncate: %lu, %Lu -> %Lu\n", inode->i_ino,	       (long long)HFSPLUS_I(inode).phys_size, inode->i_size);	if (inode->i_size > HFSPLUS_I(inode).phys_size) {		struct address_space *mapping = inode->i_mapping;		struct page *page;		u32 size = inode->i_size - 1;		int res;		page = grab_cache_page(mapping, size >> PAGE_CACHE_SHIFT);		if (!page)			return;		size &= PAGE_CACHE_SIZE - 1;		size++;		res = mapping->a_ops->prepare_write(NULL, page, size, size);		if (!res)			res = mapping->a_ops->commit_write(NULL, page, size, size);		if (res)			inode->i_size = HFSPLUS_I(inode).phys_size;		unlock_page(page);		page_cache_release(page);		mark_inode_dirty(inode);		return;	}	blk_cnt = (inode->i_size + HFSPLUS_SB(sb).alloc_blksz - 1) >> HFSPLUS_SB(sb).alloc_blksz_shift;	alloc_cnt = HFSPLUS_I(inode).alloc_blocks;	if (blk_cnt == alloc_cnt)		goto out;	down(&HFSPLUS_I(inode).extents_lock);	hfs_find_init(HFSPLUS_SB(sb).ext_tree, &fd);	while (1) {		if (alloc_cnt == HFSPLUS_I(inode).first_blocks) {			hfsplus_free_extents(sb, HFSPLUS_I(inode).first_extents,					     alloc_cnt, alloc_cnt - blk_cnt);			hfsplus_dump_extent(HFSPLUS_I(inode).first_extents);			HFSPLUS_I(inode).first_blocks = blk_cnt;			break;		}		res = __hfsplus_ext_cache_extent(&fd, inode, alloc_cnt);		if (res)			break;		start = HFSPLUS_I(inode).cached_start;		hfsplus_free_extents(sb, HFSPLUS_I(inode).cached_extents,				     alloc_cnt - start, alloc_cnt - blk_cnt);		hfsplus_dump_extent(HFSPLUS_I(inode).cached_extents);		if (blk_cnt > start) {			HFSPLUS_I(inode).flags |= HFSPLUS_FLG_EXT_DIRTY;			break;		}		alloc_cnt = start;		HFSPLUS_I(inode).cached_start = HFSPLUS_I(inode).cached_blocks = 0;		HFSPLUS_I(inode).flags &= ~(HFSPLUS_FLG_EXT_DIRTY | HFSPLUS_FLG_EXT_NEW);		hfs_brec_remove(&fd);	}	hfs_find_exit(&fd);	up(&HFSPLUS_I(inode).extents_lock);	HFSPLUS_I(inode).alloc_blocks = blk_cnt;out:	HFSPLUS_I(inode).phys_size = inode->i_size;	HFSPLUS_I(inode).fs_blocks = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits;	inode_set_bytes(inode, HFSPLUS_I(inode).fs_blocks << sb->s_blocksize_bits);	mark_inode_dirty(inode);}