• Pavel Emelyanov's avatar
    sysctl: merge equal proc_sys_read and proc_sys_write · 7708bfb1
    Pavel Emelyanov authored
    Many (most of) sysctls do not have a per-container sense.  E.g.
    kernel.print_fatal_signals, vm.panic_on_oom, net.core.netdev_budget and so on
    and so forth.  Besides, tuning then from inside a container is not even
    secure.  On the other hand, hiding them completely from the container's tasks
    sometimes causes user-space to stop working.
    
    When developing net sysctl, the common practice was to duplicate a table and
    drop the write bits in table->mode, but this approach was not very elegant,
    lead to excessive memory consumption and was not suitable in general.
    
    Here's the alternative solution.  To facilitate the per-container sysctls
    ctl_table_root-s were introduced.  Each root contains a list of
    ctl_table_header-s that are visible to different namespaces.  The idea of this
    set is to add the permissions() callback on the ctl_table_root to allow ctl
    root limit permissions to the same ctl_table-s.
    
    The main user of this functionality is the net-namespaces code, but later this
    will (should) be used by more and more namespaces, containers and control
    groups.
    
    Actually, this idea's core is in a single hunk in the third patch.  First two
    patches are cleanups for sysctl code, while the third one mostly extends the
    arguments set of some sysctl functions.
    
    This patch:
    
    These ->read and ->write callbacks act in a very similar way, so merge these
    paths to reduce the number of places to patch later and shrink the .text size
    (a bit).
    Signed-off-by: default avatarPavel Emelyanov <xemul@openvz.org>
    Acked-by: default avatar"David S. Miller" <davem@davemloft.net>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Alexey Dobriyan <adobriyan@sw.ru>
    Cc: Denis V. Lunev <den@openvz.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7708bfb1
proc_sysctl.c 10.4 KB