diff options
Diffstat (limited to 'kernel/pid.c')
| -rw-r--r-- | kernel/pid.c | 8 | 
1 files changed, 5 insertions, 3 deletions
diff --git a/kernel/pid.c b/kernel/pid.c index b13b624e2c49..1e8bb6550ec4 100644 --- a/kernel/pid.c +++ b/kernel/pid.c @@ -193,10 +193,8 @@ struct pid *alloc_pid(struct pid_namespace *ns)  	}  	if (unlikely(is_child_reaper(pid))) { -		if (pid_ns_prepare_proc(ns)) { -			disable_pid_allocation(ns); +		if (pid_ns_prepare_proc(ns))  			goto out_free; -		}  	}  	get_pid_ns(ns); @@ -226,6 +224,10 @@ out_free:  	while (++i <= ns->level)  		idr_remove(&ns->idr, (pid->numbers + i)->nr); +	/* On failure to allocate the first pid, reset the state */ +	if (ns->pid_allocated == PIDNS_ADDING) +		idr_set_cursor(&ns->idr, 0); +  	spin_unlock_irq(&pidmap_lock);  	kmem_cache_free(ns->pid_cachep, pid);  |