[Devel] Re: [PATCH 3/7] [PATCH] Add target_pid parameter to alloc_pidmap()
Serge E. Hallyn
serue at us.ibm.com
Wed May 27 10:56:02 PDT 2009
Quoting Sukadev Bhattiprolu (sukadev at linux.vnet.ibm.com):
>
> From: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
> Date: Mon, 4 May 2009 01:17:41 -0700
> Subject: [PATCH 3/7] [PATCH] Add target_pid parameter to alloc_pidmap()
>
> Signed-off-by: Sukadev Bhattiprolu <sukadev at linux.vnet.ibm.com>
How about
#define TARGET_PID_UNSPECIFIED 0
or something to pass to alloc_pidmap() from alloc_pid()?
Up to you.... More importantly:
> ---
> kernel/pid.c | 28 ++++++++++++++++++++++++++--
> 1 files changed, 26 insertions(+), 2 deletions(-)
>
> diff --git a/kernel/pid.c b/kernel/pid.c
> index fd72ad9..93406c6 100644
> --- a/kernel/pid.c
> +++ b/kernel/pid.c
> @@ -147,12 +147,36 @@ static int alloc_pidmap_page(struct pidmap *map)
> return 0;
> }
>
> -static int alloc_pidmap(struct pid_namespace *pid_ns)
> +static int set_pidmap(struct pid_namespace *pid_ns, int pid)
> +{
> + int offset;
> + struct pidmap *map;
> +
> + if (pid >= pid_max)
> + return -EINVAL;
what about pid < 0?
> +
> + offset = pid & BITS_PER_PAGE_MASK;
> + map = &pid_ns->pidmap[pid/BITS_PER_PAGE];
> +
> + if (alloc_pidmap_page(map))
> + return -ENOMEM;
> +
> + if (test_and_set_bit(offset, map->page))
> + return -EBUSY;
> +
> + atomic_dec(&map->nr_free);
> + return pid;
> +}
> +
> +static int alloc_pidmap(struct pid_namespace *pid_ns, int target_pid)
> {
> int i, offset, max_scan, pid, last = pid_ns->last_pid;
> struct pidmap *map;
> int rc = -EAGAIN;
>
> + if (target_pid)
> + return set_pidmap(pid_ns, target_pid);
> +
> pid = last + 1;
> if (pid >= pid_max)
> pid = RESERVED_PIDS;
> @@ -269,7 +293,7 @@ struct pid *alloc_pid(struct pid_namespace *ns)
>
> tmp = ns;
> for (i = ns->level; i >= 0; i--) {
> - nr = alloc_pidmap(tmp);
> + nr = alloc_pidmap(tmp, 0);
> if (nr < 0)
> goto out_free;
>
> --
> 1.5.2.5
_______________________________________________
Containers mailing list
Containers at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list