diff -rup v2.4.untoched/linux/fs/reiserfs/inode.c linux/fs/reiserfs/inode.c --- v2.4.untoched/linux/fs/reiserfs/inode.c Sat Jul 21 21:05:18 2001 +++ linux/fs/reiserfs/inode.c Thu Aug 2 20:46:50 2001 @@ -562,10 +562,9 @@ int reiserfs_get_block (struct inode * i windex = push_journal_writer("reiserfs_get_block") ; /* set the key of the first byte in the 'block'-th block of file */ - make_cpu_key (&key, inode, - (loff_t)block * inode->i_sb->s_blocksize + 1, // k_offset + make_cpu_key (&key, inode, new_offset, TYPE_ANY, 3/*key length*/); - if ((new_offset + inode->i_sb->s_blocksize) >= inode->i_size) { + if ((new_offset + inode->i_sb->s_blocksize - 1) > inode->i_size) { journal_begin(&th, inode->i_sb, jbegin_count) ; transaction_started = 1 ; } @@ -618,9 +617,12 @@ int reiserfs_get_block (struct inode * i } if (indirect_item_found (retval, ih)) { + unsigned long unfm_ptr; + /* 'block'-th block is in the file already (there is corresponding cell in some indirect item). But it may be zero unformatted node pointer (hole) */ + unfm_ptr = le32_to_cpu (item[pos_in_item]); if (!item[pos_in_item]) { /* use allocated block to plug the hole */ reiserfs_prepare_for_journal(inode->i_sb, bh, 1) ; @@ -630,11 +632,12 @@ int reiserfs_get_block (struct inode * i } bh_result->b_state |= (1UL << BH_New); item[pos_in_item] = cpu_to_le32 (allocated_block_nr); + unfm_ptr = allocated_block_nr; journal_mark_dirty (&th, inode->i_sb, bh); inode->i_blocks += (inode->i_sb->s_blocksize / 512) ; reiserfs_update_sd(&th, inode) ; } - set_block_dev_mapped(bh_result, le32_to_cpu (item[pos_in_item]), inode); + set_block_dev_mapped(bh_result, unfm_ptr, inode); pathrelse (&path); #ifdef REISERFS_CHECK pop_journal_writer(windex) ; diff -rup v2.4.untoched/linux/fs/reiserfs/stree.c linux/fs/reiserfs/stree.c --- v2.4.untoched/linux/fs/reiserfs/stree.c Sat Jul 21 21:05:18 2001 +++ linux/fs/reiserfs/stree.c Tue Aug 7 19:52:32 2001 @@ -1857,6 +1857,7 @@ void reiserfs_do_truncate (struct reiser return; } if (retval == POSITION_FOUND || retval == FILE_NOT_FOUND) { + pathrelse (&s_search_path); reiserfs_warning ("PAP-5660: reiserfs_do_truncate: " "wrong result %d of search for %K\n", retval, &s_item_key); return; .