find_block may very well return no error but set block to zero. This indicates that the block in question has not been allocated. Skip those blocks instead.
* ext2fs/pager.c (file_pager_write_page): Skip unallocated blocks. --- ext2fs/pager.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ext2fs/pager.c b/ext2fs/pager.c index 6e99c83..4ea4b74 100644 --- a/ext2fs/pager.c +++ b/ext2fs/pager.c @@ -398,8 +398,10 @@ file_pager_write_page (struct node *node, vm_offset_t offset, void *buf) err = find_block (node, offset, &block, &lock); if (err) break; - assert (block); - pending_blocks_add (&pb, block); + if (block) + pending_blocks_add (&pb, block); + else + pending_blocks_skip (&pb); offset += block_size; left -= block_size; } -- 1.9.0