diff -urN -X dontdiff linux/fs/bfs/file.c linux-bfs/fs/bfs/file.c
--- linux/fs/bfs/file.c Tue Feb  8 09:32:33 2000
+++ linux-bfs/fs/bfs/file.c     Tue Feb  8 09:48:34 2000
@@ -46,8 +46,6 @@
       if (!bh)
               return -EIO;
       new = getblk(dev, to, BFS_BSIZE);
-       if (!buffer_uptodate(new))
-               wait_on_buffer(new);
       memcpy(new->b_data, bh->b_data, bh->b_size);
       mark_buffer_dirty(new, 1);
       bforget(bh);
@@ -62,7 +60,7 @@

       dprintf("%08lx-%08lx->%08lx\n", start, end, where);
       for (i = start; i <= end; i++)
-               if(i && bfs_move_block(i, where + i, dev)) {
+               if(bfs_move_block(i, where + i, dev)) {
                       dprintf("failed to move block %08lx -> %08lx\n", i, where + i);
                       return -EIO;
               }
@@ -119,11 +117,14 @@

       /* Ok, we have to move this entire file to the next free block */
       next_free_block = s->su_lf_eblk + 1;
-       err = bfs_move_blocks(inode->i_dev, inode->iu_sblock, inode->iu_eblock, next_free_block);
-       if (err) {
-               dprintf("failed to move ino=%08lx -> possible fs corruption\n", inode->i_ino);
-               goto out;
-       }
+       if (inode->iu_sblock) { /* if data starts on block 0 then there is no data */
+               err = bfs_move_blocks(inode->i_dev, inode->iu_sblock, inode->iu_eblock, next_free_block);
+               if (err) {
+                       dprintf("failed to move ino=%08lx -> possible fs corruption\n", inode->i_ino);
+                       goto out;
+               }
+       } else
+               err = 0;

       inode->iu_sblock = next_free_block;
       s->su_lf_eblk = inode->iu_eblock = next_free_block + block;