From fce9b184d390a87e6a99293c2faea8da5b4c718e Mon Sep 17 00:00:00 2001 From: Anthony Liguori Date: Wed, 6 Feb 2008 19:25:04 -0600 Subject: [PATCH] --- yaml --- r: 83721 b: refs/heads/master c: dea7bbb603735ceceb07bb370eca17198faf7c8d h: refs/heads/master i: 83719: cdaa1ae7d27ba4e6d34c447e42e06fd6681b3415 v: v3 --- [refs] | 2 +- trunk/net/9p/util.c | 20 ++++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/[refs] b/[refs] index cb99df817806..1b2fc4a4aed5 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 14b8869ff4f00f105ea76678997b4d49d27baae3 +refs/heads/master: dea7bbb603735ceceb07bb370eca17198faf7c8d diff --git a/trunk/net/9p/util.c b/trunk/net/9p/util.c index 22077b79395d..ef7215565d88 100644 --- a/trunk/net/9p/util.c +++ b/trunk/net/9p/util.c @@ -33,7 +33,7 @@ #include struct p9_idpool { - struct semaphore lock; + spinlock_t lock; struct idr pool; }; @@ -45,7 +45,7 @@ struct p9_idpool *p9_idpool_create(void) if (!p) return ERR_PTR(-ENOMEM); - init_MUTEX(&p->lock); + spin_lock_init(&p->lock); idr_init(&p->pool); return p; @@ -71,19 +71,17 @@ int p9_idpool_get(struct p9_idpool *p) { int i = 0; int error; + unsigned int flags; retry: if (idr_pre_get(&p->pool, GFP_KERNEL) == 0) return 0; - if (down_interruptible(&p->lock) == -EINTR) { - P9_EPRINTK(KERN_WARNING, "Interrupted while locking\n"); - return -1; - } + 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); - up(&p->lock); + spin_unlock_irqrestore(&p->lock, flags); if (error == -EAGAIN) goto retry; @@ -104,12 +102,10 @@ EXPORT_SYMBOL(p9_idpool_get); void p9_idpool_put(int id, struct p9_idpool *p) { - if (down_interruptible(&p->lock) == -EINTR) { - P9_EPRINTK(KERN_WARNING, "Interrupted while locking\n"); - return; - } + unsigned int flags; + spin_lock_irqsave(&p->lock, flags); idr_remove(&p->pool, id); - up(&p->lock); + spin_unlock_irqrestore(&p->lock, flags); } EXPORT_SYMBOL(p9_idpool_put);