From: Oleg Drokin <green@namesys.com>

Fix trucation-induced large file corruption in reiserfs.


 25-akpm/fs/reiserfs/file.c |    6 +++---
 1 files changed, 3 insertions(+), 3 deletions(-)

diff -puN fs/reiserfs/file.c~reiserfs-large-file-fix fs/reiserfs/file.c
--- 25/fs/reiserfs/file.c~reiserfs-large-file-fix	Fri Sep 12 12:51:23 2003
+++ 25-akpm/fs/reiserfs/file.c	Fri Sep 12 12:51:23 2003
@@ -784,7 +784,7 @@ int reiserfs_prepare_file_region_for_wri
     /* Now if all the write area lies past the file end, no point in
        maping blocks, since there is none, so we just zero out remaining
        parts of first and last pages in write area (if needed) */
-    if ( (pos & ~(PAGE_CACHE_SIZE - 1)) > inode->i_size ) {
+    if ( (pos & ~((loff_t)PAGE_CACHE_SIZE - 1)) > inode->i_size ) {
 	if ( from != 0 ) {/* First page needs to be partially zeroed */
 	    char *kaddr = kmap_atomic(prepared_pages[0], KM_USER0);
 	    memset(kaddr, 0, from);
@@ -806,9 +806,9 @@ int reiserfs_prepare_file_region_for_wri
        we need to allocate (calculated above) */
     /* Mask write position to start on blocksize, we do it out of the
        loop for performance reasons */
-    pos &= ~(inode->i_sb->s_blocksize - 1);
+    pos &= ~((loff_t) inode->i_sb->s_blocksize - 1);
     /* Set cpu key to the starting position in a file (on left block boundary)*/
-    make_cpu_key (&key, inode, 1 + ((pos) & ~(inode->i_sb->s_blocksize - 1)), TYPE_ANY, 3/*key length*/);
+    make_cpu_key (&key, inode, 1 + ((pos) & ~((loff_t) inode->i_sb->s_blocksize - 1)), TYPE_ANY, 3/*key length*/);
 
     reiserfs_write_lock(inode->i_sb); // We need that for at least search_by_key()
     for ( i = 0; i < num_pages ; i++ ) { 

_