9p: Make all client spin locks IRQ safe

The client lock must be IRQ safe. Some of the lock acquisition paths
took regular spin locks.

Signed-off-by: Tom Tucker <tom@opengridcomputing.com>
Signed-off-by: Eric Van Hensbergen <ericvh@gmail.com>
This commit is contained in:
Tom Tucker 2008-10-23 16:31:02 -05:00 committed by Eric Van Hensbergen
parent 517ac45af4
commit cac23d6505

View File

@ -613,6 +613,7 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
{ {
int err; int err;
struct p9_fid *fid; struct p9_fid *fid;
unsigned long flags;
P9_DPRINTK(P9_DEBUG_FID, "clnt %p\n", clnt); P9_DPRINTK(P9_DEBUG_FID, "clnt %p\n", clnt);
fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL); fid = kmalloc(sizeof(struct p9_fid), GFP_KERNEL);
@ -632,9 +633,9 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
fid->clnt = clnt; fid->clnt = clnt;
fid->aux = NULL; fid->aux = NULL;
spin_lock(&clnt->lock); spin_lock_irqsave(&clnt->lock, flags);
list_add(&fid->flist, &clnt->fidlist); list_add(&fid->flist, &clnt->fidlist);
spin_unlock(&clnt->lock); spin_unlock_irqrestore(&clnt->lock, flags);
return fid; return fid;
@ -646,13 +647,14 @@ error:
static void p9_fid_destroy(struct p9_fid *fid) static void p9_fid_destroy(struct p9_fid *fid)
{ {
struct p9_client *clnt; struct p9_client *clnt;
unsigned long flags;
P9_DPRINTK(P9_DEBUG_FID, "fid %d\n", fid->fid); P9_DPRINTK(P9_DEBUG_FID, "fid %d\n", fid->fid);
clnt = fid->clnt; clnt = fid->clnt;
p9_idpool_put(fid->fid, clnt->fidpool); p9_idpool_put(fid->fid, clnt->fidpool);
spin_lock(&clnt->lock); spin_lock_irqsave(&clnt->lock, flags);
list_del(&fid->flist); list_del(&fid->flist);
spin_unlock(&clnt->lock); spin_unlock_irqrestore(&clnt->lock, flags);
kfree(fid); kfree(fid);
} }