Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cac23d65 authored by Tom Tucker's avatar Tom Tucker Committed by Eric Van Hensbergen
Browse files

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: default avatarTom Tucker <tom@opengridcomputing.com>
Signed-off-by: default avatarEric Van Hensbergen <ericvh@gmail.com>
parent 517ac45a
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -613,6 +613,7 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
{
	int err;
	struct p9_fid *fid;
	unsigned long flags;

	P9_DPRINTK(P9_DEBUG_FID, "clnt %p\n", clnt);
	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->aux = NULL;

	spin_lock(&clnt->lock);
	spin_lock_irqsave(&clnt->lock, flags);
	list_add(&fid->flist, &clnt->fidlist);
	spin_unlock(&clnt->lock);
	spin_unlock_irqrestore(&clnt->lock, flags);

	return fid;

@@ -646,13 +647,14 @@ static struct p9_fid *p9_fid_create(struct p9_client *clnt)
static void p9_fid_destroy(struct p9_fid *fid)
{
	struct p9_client *clnt;
	unsigned long flags;

	P9_DPRINTK(P9_DEBUG_FID, "fid %d\n", fid->fid);
	clnt = fid->clnt;
	p9_idpool_put(fid->fid, clnt->fidpool);
	spin_lock(&clnt->lock);
	spin_lock_irqsave(&clnt->lock, flags);
	list_del(&fid->flist);
	spin_unlock(&clnt->lock);
	spin_unlock_irqrestore(&clnt->lock, flags);
	kfree(fid);
}