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

Commit 94bfa3b6 authored by Paul E. McKenney's avatar Paul E. McKenney
Browse files

idr: fix RCU lockdep splat in idr_get_next()



Convert to rcu_dereference_raw() given that many callers may have many
different locking models.

Located-by: default avatarMiles Lane <miles.lane@gmail.com>
Tested-by: default avatarMiles Lane <miles.lane@gmail.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@linux.vnet.ibm.com>
parent f3b577de
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -602,7 +602,7 @@ void *idr_get_next(struct idr *idp, int *nextidp)
	/* find first ent */
	n = idp->layers * IDR_BITS;
	max = 1 << n;
	p = rcu_dereference(idp->top);
	p = rcu_dereference_raw(idp->top);
	if (!p)
		return NULL;

@@ -610,7 +610,7 @@ void *idr_get_next(struct idr *idp, int *nextidp)
		while (n > 0 && p) {
			n -= IDR_BITS;
			*paa++ = p;
			p = rcu_dereference(p->ary[(id >> n) & IDR_MASK]);
			p = rcu_dereference_raw(p->ary[(id >> n) & IDR_MASK]);
		}

		if (p) {