diff options
| -rw-r--r-- | lib/idr.c | 8 |
1 files changed, 7 insertions, 1 deletions
| @@ -220,8 +220,14 @@ build_up: | |||
| 220 | */ | 220 | */ |
| 221 | while ((layers < (MAX_LEVEL - 1)) && (id >= (1 << (layers*IDR_BITS)))) { | 221 | while ((layers < (MAX_LEVEL - 1)) && (id >= (1 << (layers*IDR_BITS)))) { |
| 222 | layers++; | 222 | layers++; |
| 223 | if (!p->count) | 223 | if (!p->count) { |
| 224 | /* special case: if the tree is currently empty, | ||
| 225 | * then we grow the tree by moving the top node | ||
| 226 | * upwards. | ||
| 227 | */ | ||
| 228 | p->layer++; | ||
| 224 | continue; | 229 | continue; |
| 230 | } | ||
| 225 | if (!(new = get_from_free_list(idp))) { | 231 | if (!(new = get_from_free_list(idp))) { |
| 226 | /* | 232 | /* |
| 227 | * The allocation failed. If we built part of | 233 | * The allocation failed. If we built part of |
