Commit 6f14a668f1a8b715a6e855f4e32705e54a6e86a1

Authored by Tejun Heo
Committed by Linus Torvalds
1 parent e9e70bc14e

idr: revert misallocation bug fix

Commit 859ddf09743a8cc680af33f7259ccd0fd36bfe9d tried to fix
misallocation bug but broke full bit marking by not clearing
pa[idp->layers] and also is causing X failures due to lookup failure
in drm code.  The cause of the latter hasn't been found yet.  Revert
the fix for now.

Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 4 additions and 3 deletions Side-by-side Diff

... ... @@ -140,7 +140,8 @@
140 140 id = *starting_id;
141 141 restart:
142 142 p = idp->top;
143   - l = p->layer;
  143 + l = idp->layers;
  144 + pa[l--] = NULL;
144 145 while (1) {
145 146 /*
146 147 * We run around this while until we reach the leaf node...
... ... @@ -154,8 +155,8 @@
154 155 oid = id;
155 156 id = (id | ((1 << (IDR_BITS * l)) - 1)) + 1;
156 157  
157   - /* did id go over the limit? */
158   - if (id >= (1 << (idp->layers * IDR_BITS))) {
  158 + /* if already at the top layer, we need to grow */
  159 + if (!(p = pa[l])) {
159 160 *starting_id = id;
160 161 return IDR_NEED_TO_GROW;
161 162 }