[PATCH] Fix rewriting on a full reiserfs filesystem
authorJan Kara <jack@suse.cz>
Sun, 1 May 2005 15:59:07 +0000 (08:59 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sun, 1 May 2005 15:59:07 +0000 (08:59 -0700)
Allow rewriting of a file and extending a file upto the end of the
allocated block on a full filesystem.

From: Chris Mason <mason@suse.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/reiserfs/file.c

index 26950113af8cc6a299d2f7086b1df1ba9ee62b14..f6860e83521d2e66880c05ce3d59841f560b7914 100644 (file)
@@ -1284,10 +1284,11 @@ static ssize_t reiserfs_file_write( struct file *file, /* the file we are going
        reiserfs_claim_blocks_to_be_allocated(inode->i_sb, num_pages << (PAGE_CACHE_SHIFT - inode->i_blkbits));
        reiserfs_write_unlock(inode->i_sb);
 
-       if ( !num_pages ) { /* If we do not have enough space even for */
-           res = -ENOSPC;  /* single page, return -ENOSPC */
-           if ( pos > (inode->i_size & (inode->i_sb->s_blocksize-1)))
-               break; // In case we are writing past the file end, break.
+       if ( !num_pages ) { /* If we do not have enough space even for a single page... */
+           if ( pos > inode->i_size+inode->i_sb->s_blocksize-(pos & (inode->i_sb->s_blocksize-1))) {
+               res = -ENOSPC;
+               break; // In case we are writing past the end of the last file block, break.
+           }
            // Otherwise we are possibly overwriting the file, so
            // let's set write size to be equal or less than blocksize.
            // This way we get it correctly for file holes.