On Tue, 2004-07-06 at 19:16, Andrew Morton wrote: Jim Houston <jim.houston@xxxxxxxxxxx> wrote: > > > > With out the test above an id beyond the allocated space will alias > > to one that exists. Perhaps the highest id currently allocated is > > 100, there will be two layers in the radix tree and the while loop > > above will only look at the 10 least significant bits. If you call > > idr_find with 1025 it will return the pointer associated with id 1. > > OK. > > > The patch I sent was against linux-2.6.7, so I missed the change to > > MAX_ID_SHIFT. > > How about this? > > n = idp->layers * IDR_BITS; > + if (id >= (1 << n)) > + return NULL; > + > p = idp->top; > + > /* Mask off upper bits we don't use for the search. */ > id &= MAX_ID_MASK; > Hi Andrew, It's not quite right. If you want to keep a count in the upper bits you have to mask off that count before checking if the id is beyond the end of the allocated space. Jim Houston - Concurrent Computer Corp.