• Andrea Arcangeli's avatar
    [PATCH] writepages drops bh on not uptodate page · 06ce8344
    Andrea Arcangeli authored
    I think I understood why some ext2 fs corruption still happens even after
    the last i_size fix.
    
    what happened I believe is that the writepages layer got a not a fully
    uptodate page (in turn with bh mapped on top of it), and then right before
    unlocking the page and entering the writeback mode, it freed all the bh.
    Without bh a not uptodate page will trigger a full readpage from disk, that
    overwrites the pagecache before the multi-bio gets submitted, generating fs
    corruption.
    
    I believe the below patch should fix it (untested) against kernel CVS.
    
    The testcases developed by Kurt showed the pagecache being overwritten with
    on-disk data at block offsets, and Chris as well was wondering about races
    between wait_on_page_writeback and readpage.  the below fix just explains
    everything we've seen since not-fully-uptodate pages must have always bh on
    them and the below patch enforces just that invariant, and it should fix
    our pagecache-overwritten-by-disk-data problem.
    Signed-off-by: default avatarAndrea Arcangeli <andrea@suse.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    06ce8344
mpage.c 19.6 KB