]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] reiserfs: fix problem when fs is out of space
authorAndrew Morton <akpm@osdl.org>
Thu, 7 Aug 2003 04:13:19 +0000 (21:13 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Thu, 7 Aug 2003 04:13:19 +0000 (21:13 -0700)
From: Oleg Drokin <green@namesys.com>

This patch fixes various bad stuff that happens when you write to full or
almost full reiserfs filesystem.

fs/reiserfs/bitmap.c
fs/reiserfs/file.c

index a786187eedf02cd8c25a220abf039e408114b605..0550e20ecc52ceae202d6e44cedb6ce04adc9eb7 100644 (file)
@@ -910,11 +910,11 @@ void reiserfs_release_claimed_blocks(
 int reiserfs_can_fit_pages ( struct super_block *sb /* superblock of filesystem
                                                       to estimate space */ )
 {
-       b_blocknr_t space;
+       int space;
 
        spin_lock(&REISERFS_SB(sb)->bitmap_lock);
        space = (SB_FREE_BLOCKS(sb) - REISERFS_SB(sb)->reserved_blocks) >> ( PAGE_CACHE_SHIFT - sb->s_blocksize_bits);
        spin_unlock(&REISERFS_SB(sb)->bitmap_lock);
 
-       return space;
+       return space>0?space:0;
 }
index c6b25b1d1789dc92ed08dc9129814665b9ca8811..f238ff8ab1cb47772ca0f38d2154dc28116b8527 100644 (file)
@@ -1085,6 +1085,8 @@ ssize_t reiserfs_file_write( struct file *file, /* the file we are going to writ
            // 100% of disk space anyway.
            write_bytes = min_t(int, count, inode->i_sb->s_blocksize - (pos & (inode->i_sb->s_blocksize - 1)));
            num_pages = 1;
+           // No blocks were claimed before, so do it now.
+           reiserfs_claim_blocks_to_be_allocated(inode->i_sb, 1 << (PAGE_CACHE_SHIFT - inode->i_blkbits));
        }
 
        /* Prepare for writing into the region, read in all the