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; .