• Christian Borntraeger's avatar
    Future of Linux 2.6.22.y series · 5ade3f9f
    Christian Borntraeger authored
    commit 5d0360ee upstream.
    
    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>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    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>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    
    5ade3f9f
rd.c 14.4 KB