I waffled over this for ages. On balance, I think it's best to mark those bh's as uptodate. And on reflection, I'm not sure why we go bringing ramdisk blockdev pages uptodate all over the place anyway. But ramdisk is weird and it passes testing. Let those dogs sleep. --- 25-akpm/drivers/block/rd.c | 15 ++++++++++++++- 1 files changed, 14 insertions(+), 1 deletion(-) diff -puN drivers/block/rd.c~ramdisk-buffer-uptodate-fix drivers/block/rd.c --- 25/drivers/block/rd.c~ramdisk-buffer-uptodate-fix Fri May 21 17:17:38 2004 +++ 25-akpm/drivers/block/rd.c Fri May 21 17:17:38 2004 @@ -109,8 +109,21 @@ static void make_page_uptodate(struct pa struct buffer_head *head = bh; do { - if (!buffer_uptodate(bh)) + if (!buffer_uptodate(bh)) { memset(bh->b_data, 0, bh->b_size); + /* + * akpm: I'm totally undecided about this. The + * buffer has just been magically brought "up to + * date", but nobody should want to be reading + * it anyway, because it hasn't been used for + * anything yet. It is still in a "not read + * from disk yet" state. + * + * But non-uptodate buffers against an uptodate + * page are against the rules. So do it anyway. + */ + set_buffer_uptodate(bh); + } } while ((bh = bh->b_this_page) != head); } else { memset(page_address(page), 0, PAGE_CACHE_SIZE); _