[lkml]   [2004]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subjectwritepages drops bh on not uptodate page
    Hi Andrew,

    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: Andrea Arcangeli <>

    Index: writepages-bh-race/fs/mpage.c
    RCS file: /home/andrea/crypto/cvs/linux-2.5/fs/mpage.c,v
    retrieving revision 1.55
    diff -u -p -r1.55 mpage.c
    --- writepages-bh-race/fs/mpage.c 11 Jul 2004 16:38:19 -0000 1.55
    +++ writepages-bh-race/fs/mpage.c 28 Jul 2004 04:39:13 -0000
    @@ -553,7 +553,12 @@ alloc_new:
    bh = bh->b_this_page;
    } while (bh != head);

    - if (buffer_heads_over_limit)
    + /*
    + * we cannot drop the bh if the page is not uptodate
    + * or a concurrent readpage would fail to serialize with the bh
    + * and it would read from disk before we reach the platter.
    + */
    + if (buffer_heads_over_limit && PageUptodate(page))

    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at
     \ /
      Last update: 2005-03-22 14:04    [W:0.021 / U:6.112 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site