projects
/
linux.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
| inline |
side by side
IB/qib: Fix QP locate/remove race
[linux.git]
/
drivers
/
infiniband
/
hw
/
qib
/
qib_qp.c
diff --git
a/drivers/infiniband/hw/qib/qib_qp.c
b/drivers/infiniband/hw/qib/qib_qp.c
index 35275099cafd660cd2fc20ab865d08c417f51735..a6a2cc2ba260ddd80ca6e23982864ec8e969e9b4 100644
(file)
--- a/
drivers/infiniband/hw/qib/qib_qp.c
+++ b/
drivers/infiniband/hw/qib/qib_qp.c
@@
-268,8
+268,9
@@
static void remove_qp(struct qib_ibdev *dev, struct qib_qp *qp)
qpp = &q->next)
if (q == qp) {
atomic_dec(&qp->refcount);
- *qpp = qp->next;
- rcu_assign_pointer(qp->next, NULL);
+ rcu_assign_pointer(*qpp,
+ rcu_dereference_protected(qp->next,
+ lockdep_is_held(&dev->qpt_lock)));
break;
}
}