• Carsten Otte's avatar
    ext2/xip: refuse to change xip flag during remount with busy inodes · 0e4a9b59
    Carsten Otte authored
    For a reason that I was unable to understand in three months of debugging,
    mount ext2 -o remount stopped working properly when remounting from
    regular operation to xip, or the other way around.  According to a git
    bisect search, the problem was introduced with the VM_MIXEDMAP/PTE_SPECIAL
    rework in the vm:
    
    commit 70688e4d
    Author: Nick Piggin <npiggin@suse.de>
    Date:   Mon Apr 28 02:13:02 2008 -0700
    
        xip: support non-struct page backed memory
    
    In the failing scenario, the filesystem is mounted read only via root=
    kernel parameter on s390x.  During remount (in rc.sysinit), the inodes of
    the bash binary and its libraries are busy and cannot be invalidated (the
    bash which is running rc.sysinit resides on subject filesystem).
    Afterwards, another bash process (running ifup-eth) recurses into a
    subshell, runs dup_mm (via fork).  Some of the mappings in this bash
    process were created from inodes that could not be invalidated during
    remount.
    
    Both parent and child process crash some time later due to inconsistencies
    in their address spaces.  The issue seems to be timing sensitive, various
    attempts to recreate it have failed.
    
    This patch refuses to change the xip flag during remount in case some
    inodes cannot be invalidated.  This patch keeps users from running into
    that issue.
    
    [akpm@linux-foundation.org: cleanup]
    Signed-off-by: default avatarCarsten Otte <cotte@de.ibm.com>
    Cc: Nick Piggin <npiggin@suse.de>
    Cc: Jared Hulbert <jaredeh@gmail.com>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0e4a9b59
super.c 39.5 KB