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;