Index: linux.t/fs/block_dev.c =================================================================== --- linux.t.orig/fs/block_dev.c 2004-03-08 09:56:06.000000000 -0500 +++ linux.t/fs/block_dev.c 2004-03-09 09:48:15.000000000 -0500 @@ -116,9 +116,18 @@ static int blkdev_get_block(struct inode *inode, sector_t iblock, struct buffer_head *bh, int create) { - if (iblock >= max_block(I_BDEV(inode))) - return -EIO; - + if (iblock >= max_block(I_BDEV(inode))) { + if (create) + return -EIO; + + /* + * for reads, we're just trying to fill a partial page. + * return a hole, they will have to call get_block again + * before they can fill it, and they will get -EIO at that + * time + */ + return 0; + } bh->b_bdev = I_BDEV(inode); bh->b_blocknr = iblock; set_buffer_mapped(bh);