• Christian Borntraeger's avatar
    rd: fix data corruption on memory pressure · 5d0360ee
    Christian Borntraeger authored
    We have seen ramdisk based install systems, where some pages of mapped
    libraries and programs were suddendly zeroed under memory pressure.  This
    should not happen, as the ramdisk avoids freeing its pages by keeping them
    dirty all the time.
    
    It turns out that there is a case, where the VM makes a ramdisk page clean,
    without telling the ramdisk driver.  On memory pressure shrink_zone runs
    and it starts to run shrink_active_list.  There is a check for
    buffer_heads_over_limit, and if true, pagevec_strip is called.
    pagevec_strip calls try_to_release_page.  If the mapping has no releasepage
    callback, try_to_free_buffers is called.  try_to_free_buffers has now a
    special logic for some file systems to make a dirty page clean, if all
    buffers are clean.  Thats what happened in our test case.
    
    The simplest solution is to provide a noop-releasepage callback for the
    ramdisk driver.  This avoids try_to_free_buffers for ramdisk pages.
    Signed-off-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
    Acked-by: default avatarNick Piggin <npiggin@suse.de>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5d0360ee
rd.c 14.6 KB