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;