diff options
Diffstat (limited to 'net/9p/util.c')
| -rw-r--r-- | net/9p/util.c | 23 | 
1 files changed, 9 insertions, 14 deletions
diff --git a/net/9p/util.c b/net/9p/util.c index e048701a72d..59f278e64f5 100644 --- a/net/9p/util.c +++ b/net/9p/util.c @@ -67,7 +67,7 @@ EXPORT_SYMBOL(p9_idpool_create);  /**   * p9_idpool_destroy - create a new per-connection id pool - * @p: idpool to destory + * @p: idpool to destroy   */  void p9_idpool_destroy(struct p9_idpool *p) @@ -87,26 +87,21 @@ EXPORT_SYMBOL(p9_idpool_destroy);  int p9_idpool_get(struct p9_idpool *p)  { -	int i = 0; -	int error; +	int i;  	unsigned long flags; -retry: -	if (idr_pre_get(&p->pool, GFP_KERNEL) == 0) -		return 0; - +	idr_preload(GFP_NOFS);  	spin_lock_irqsave(&p->lock, flags);  	/* no need to store exactly p, we just need something non-null */ -	error = idr_get_new(&p->pool, p, &i); -	spin_unlock_irqrestore(&p->lock, flags); +	i = idr_alloc(&p->pool, p, 0, 0, GFP_NOWAIT); -	if (error == -EAGAIN) -		goto retry; -	else if (error) +	spin_unlock_irqrestore(&p->lock, flags); +	idr_preload_end(); +	if (i < 0)  		return -1; -	P9_DPRINTK(P9_DEBUG_MUX, " id %d pool %p\n", i, p); +	p9_debug(P9_DEBUG_MUX, " id %d pool %p\n", i, p);  	return i;  }  EXPORT_SYMBOL(p9_idpool_get); @@ -124,7 +119,7 @@ void p9_idpool_put(int id, struct p9_idpool *p)  {  	unsigned long flags; -	P9_DPRINTK(P9_DEBUG_MUX, " id %d pool %p\n", id, p); +	p9_debug(P9_DEBUG_MUX, " id %d pool %p\n", id, p);  	spin_lock_irqsave(&p->lock, flags);  	idr_remove(&p->pool, id);  | 
