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


Reply via email to