vserver 1.9.5.x5
[linux-2.6.git] / fs / hfs / extent.c
index b7ce3f0..2ea3c89 100644 (file)
@@ -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;
 }