If get_block() returns -ENOSPC __block_write_full_page() is currently clearing PG_uptodate. Tht doesn't make any sense - failure to allocate space (or an IO error) does not make the page not uptodate. It will create pages which are dirty, mapped into pagetables and not uptodate, which is a nonsensical state. fs/buffer.c | 1 - 1 files changed, 1 deletion(-) diff -puN fs/buffer.c~dont-clear-PG_uptodate-on-ENOSPC fs/buffer.c --- 25/fs/buffer.c~dont-clear-PG_uptodate-on-ENOSPC 2003-04-12 16:21:06.000000000 -0700 +++ 25-akpm/fs/buffer.c 2003-04-12 16:21:06.000000000 -0700 @@ -1754,7 +1754,6 @@ recover: * exposing stale data. * The page is currently locked and not marked for writeback */ - ClearPageUptodate(page); bh = head; /* Recovery: lock and submit the mapped buffers */ do { _