Hi...
there
are codes like the following which I can not understand:
        unsigned int objnr = obj_to_index(cachep, slabp, objp);
        slab_bufctl(slabp)[objnr] = slabp->free;
        slabp->free = objnr;
        slabp->inuse--;

and  slab_bufctl(slabp) is (kmem_bufctl_t *)(slabp + 1).
Since slabp is a pointer to struct slab, then what does slabp + 1 point to?
the next slab? what is the meaning of slab_bufctl(slabp)[objnr] ?

Interesting ... I read UTLK and here's my understanding. slabp+1 points to the object descriptor array ( +1 here means an address right after slab descriptor). On the freed object descriptor (slab_bufctl(slabp)[objnr] ), it is assigned the number of last freed object's descriptor. In the slab-> free itself, it will be assigned the current freed object descriptor number.

So, in ASCII art, it's like below:

slabp-> free ====pointing to === > current freed object descriptor ====pointing to==> second to last freed object

That way, the last freed will be the first one used again when a similar object is allocated. The ASCII art itself, as you can guess, depict a linked list LIFO style.

I can give wrong impression here, so feel free to argue.

regards,

Mulyadi.


--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to [EMAIL PROTECTED]
Please read the FAQ at http://kernelnewbies.org/FAQ

Reply via email to