2013-06-19 1 views
0
리눅스 커널에서

, 우리는/slab.c mm의 기능을 가지고 내가 무엇을 slab_bufctl() 또는 다음 무료 슬래브를 찾는 방법을 이해하지 못하는slab_get_obj()의 slab_bufclt()는 무엇을 의미합니까?

static inline kmem_bufctl_t *slab_bufctl(struct slab *slabp) 
{ 
     return (kmem_bufctl_t *) (slabp + 1); 
} 

static void *slab_get_obj(struct kmem_cache *cachep, struct slab 
*slabp, 
           int nodeid) { 
     void *objp = index_to_obj(cachep, slabp, slabp->free); 
     kmem_bufctl_t next; 

     slabp->inuse++; 
     next = slab_bufctl(slabp)[slabp->free]; 
#if DEBUG 
     slab_bufctl(slabp)[slabp->free] = BUFCTL_FREE; 
     WARN_ON(slabp->nodeid != nodeid); 
#endif 
     slabp->free = next; 

     return objp; } 

경우, 그것으로.

+0

그것은'구조체 슬래브 것 같아 * slabp ''struct slab'의 배열입니다. 그러므로,'slabp + 1 '은'slab_bufctl'에서'slabp' 옆에있는 원소를 반환합니다. – n3rd4n1

답변

0

struct slab *slabpstruct slab의 배열입니다. 따라서 (slabp + 1)slab_bufctl()slabp 옆에있는 요소를 반환합니다. 또한

, slab_bufctl() 이후 반환 나중에 배열로 액세스 할 kmem_bufctl_t * 등의 요소가, 나는 다음과 같이 우리가 struct slab의 느슨한 정의를 가질 수 있다고 생각 :

struct slab { 
    kmem_bufctl_t *_name; 
} 
관련 문제