sizeof と kobjsize

上記に関連して.
uClinuxで使う mm/nommu.c 中の重要関数 do_mmap_pgoff() では,

...
struct vm_area_struct *vma = NULL;
...
vma = kzalloc(sizeof(struct vm_area_struct), GFP_KERNEL);
...
realalloc += kobjsize(vma);
askedalloc += sizeof(*vma);

としている箇所がある.
ここで,realalloc は実際に確保された値.askedalloc は本来欲しかった値.
sizeof演算子では,struct vm_area_struct のサイズが取得できる.
一方,kobjsize(vma) では,vma が kzalloc()(kmalloc()) によってスラブオブジェクトとして確保されるため,サイズは2の冪乗となり,その値が返る.
よって,realalloc には実際に確保された2の冪乗サイズ.askedalloc には要求された構造体のサイズが入る.
ちなみん,これら二つの変数は,2.6.23-mm1 現在全く使われていない.