Quoting Sukadev Bhattiprolu (sukadev@xxxxxxxxxxxxxxxxxx): > > >From a1fdec1036a952359d02a7c667d126bd2fff6804 Mon Sep 17 00:00:00 2001 > From: Sukadev Bhattiprolu <sukadev@xxxxxxxxxxxxxxxxxx> > Date: Mon, 4 May 2009 01:17:41 -0700 > Subject: [RFC][PATCH 3/7][v2] Add target_pid parameter to alloc_pidmap() > > With support for setting a specific pid number for a process, > alloc_pidmap() will need a paramter a 'target_pid' parameter. > > Changelog[v2]: > - (Serge Hallyn) Check for 'pid < 0' in set_pidmap().(Code > actually checks for 'pid <= 0' for completeness). > > Signed-off-by: Sukadev Bhattiprolu <sukadev@xxxxxxxxxxxxxxxxxx> Acked-by: Serge Hallyn <serue@xxxxxxxxxx> > --- > kernel/pid.c | 28 ++++++++++++++++++++++++++-- > 1 files changed, 26 insertions(+), 2 deletions(-) > > diff --git a/kernel/pid.c b/kernel/pid.c > index b2d6a19..b44dd21 100644 > --- a/kernel/pid.c > +++ b/kernel/pid.c > @@ -147,11 +147,35 @@ 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 <= 0 || pid >= pid_max) > + return -EINVAL; > + > + 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, rc, offset, max_scan, pid, last = pid_ns->last_pid; > struct pidmap *map; > > + if (target_pid) > + return set_pidmap(pid_ns, target_pid); > + > pid = last + 1; > if (pid >= pid_max) > pid = RESERVED_PIDS; > @@ -270,7 +294,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@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers