lkml.org 
[lkml]   [2009]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[RFC][v7][PATCH 3/9] Make pid_max a pid_ns property


    From: Serge Hallyn <serue@us.ibm.com>
    Subject: [RFC][v7][PATCH 3/9] Make pid_max a pid_ns property

    Remove the pid_max global, and make it a property of the
    pid_namespace. When a pid_ns is created, it inherits
    the parent's pid_ns.

    Fixing up sysctl (trivial akin to ipc version, but
    potentially tedious to get right for all CONFIG*
    combinations) is left for later.

    Changelog[v2]:
    - Port to newer kernel
    - Make pid_max a local variable in alloc_pidmap() to simplify code/patch

    Signed-off-by: Serge Hallyn <serue@us.ibm.com>
    Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com>
    ---
    include/linux/pid_namespace.h | 1 +
    kernel/pid.c | 4 ++--
    kernel/pid_namespace.c | 1 +
    kernel/sysctl.c | 4 ++--
    4 files changed, 6 insertions(+), 4 deletions(-)

    Index: linux-2.6/include/linux/pid_namespace.h
    ===================================================================
    --- linux-2.6.orig/include/linux/pid_namespace.h 2009-09-09 19:06:21.000000000 -0700
    +++ linux-2.6/include/linux/pid_namespace.h 2009-09-09 19:07:20.000000000 -0700
    @@ -30,6 +30,7 @@ struct pid_namespace {
    #ifdef CONFIG_BSD_PROCESS_ACCT
    struct bsd_acct_struct *bacct;
    #endif
    + int pid_max;
    };

    extern struct pid_namespace init_pid_ns;
    Index: linux-2.6/kernel/pid.c
    ===================================================================
    --- linux-2.6.orig/kernel/pid.c 2009-09-09 19:06:46.000000000 -0700
    +++ linux-2.6/kernel/pid.c 2009-09-09 19:07:20.000000000 -0700
    @@ -43,8 +43,6 @@ static struct hlist_head *pid_hash;
    static int pidhash_shift;
    struct pid init_struct_pid = INIT_STRUCT_PID;

    -int pid_max = PID_MAX_DEFAULT;
    -
    #define RESERVED_PIDS 300

    int pid_max_min = RESERVED_PIDS + 1;
    @@ -78,6 +76,7 @@ struct pid_namespace init_pid_ns = {
    .last_pid = 0,
    .level = 0,
    .child_reaper = &init_task,
    + .pid_max = PID_MAX_DEFAULT,
    };
    EXPORT_SYMBOL_GPL(init_pid_ns);

    @@ -151,6 +150,7 @@ static int alloc_pidmap(struct pid_names
    {
    int i, offset, max_scan, pid, last = pid_ns->last_pid;
    int rc = -EAGAIN;
    + int pid_max = pid_ns->pid_max;
    struct pidmap *map;

    pid = last + 1;
    Index: linux-2.6/kernel/pid_namespace.c
    ===================================================================
    --- linux-2.6.orig/kernel/pid_namespace.c 2009-09-09 19:06:21.000000000 -0700
    +++ linux-2.6/kernel/pid_namespace.c 2009-09-09 19:07:20.000000000 -0700
    @@ -87,6 +87,7 @@ static struct pid_namespace *create_pid_

    kref_init(&ns->kref);
    ns->level = level;
    + ns->pid_max = parent_pid_ns->pid_max;
    ns->parent = get_pid_ns(parent_pid_ns);

    set_bit(0, ns->pidmap[0].page);
    Index: linux-2.6/kernel/sysctl.c
    ===================================================================
    --- linux-2.6.orig/kernel/sysctl.c 2009-09-09 19:06:21.000000000 -0700
    +++ linux-2.6/kernel/sysctl.c 2009-09-09 19:07:20.000000000 -0700
    @@ -55,6 +55,7 @@

    #include <asm/uaccess.h>
    #include <asm/processor.h>
    +#include <linux/pid_namespace.h>

    #ifdef CONFIG_X86
    #include <asm/nmi.h>
    @@ -78,7 +79,6 @@ extern int max_threads;
    extern int core_uses_pid;
    extern int suid_dumpable;
    extern char core_pattern[];
    -extern int pid_max;
    extern int min_free_kbytes;
    extern int pid_max_min, pid_max_max;
    extern int sysctl_drop_caches;
    @@ -670,7 +670,7 @@ static struct ctl_table kern_table[] = {
    {
    .ctl_name = KERN_PIDMAX,
    .procname = "pid_max",
    - .data = &pid_max,
    + .data = &init_pid_ns.pid_max,
    .maxlen = sizeof (int),
    .mode = 0644,
    .proc_handler = &proc_dointvec_minmax,

    \
     
     \ /
      Last update: 2009-09-24 19:05    [W:0.029 / U:31.388 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site