• Hugh Dickins's avatar
    sysfs: fix some bin_vm_ops errors · 095160ae
    Hugh Dickins authored
    Commit 86c9508eb1c0ce5aa07b5cf1d36b60c54efc3d7a
    "sysfs: don't block indefinitely for unmapped files" in linux-next
    crashes the PowerMac G5 when X starts up.  It's caught out by the way
    powerpc's pci_mmap of legacy_mem uses shmem_zero_setup(), substituting
    a new vma->vm_file whose private_data no longer points to the bin_buffer
    (substitution done because some versions of X crash if that mmap fails).
    
    The fix to this is straightforward: the original vm_file is fput() in
    that case, so this mmap won't block sysfs at all, so just don't switch
    over to bin_vm_ops if vm_file has changed.
    
    But more fixes made before realizing that was the problem:-
    
    It should not be an error if bin_page_mkwrite() finds no underlying
    page_mkwrite().
    
    Check that a file already mmap'ed has the same underlying vm_ops
    _before_ pointing vma->vm_ops at bin_vm_ops.
    
    If the file being mmap'ed is a shmem/tmpfs file, don't fail the mmap
    on CONFIG_NUMA=y, just because that has a set_policy and get_policy:
    provide bin_set_policy, bin_get_policy and bin_migrate.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Acked-by: default avatarEric Biederman <ebiederm@aristanetworks.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    
    095160ae
bin.c 11 KB