Re: Re: mm/zsmalloc.c: count in handle's size when calculating pages_per_zspage

From: Yinghao Xie
Date: Fri Mar 20 2015 - 03:06:53 EST


> Hello,
>
> sorry, I've a question.
>
> On (03/19/15 11:39), Yinghao Xie wrote:
> > @@ -1426,11 +1430,6 @@ unsigned long zs_malloc(struct zs_pool *pool,
> size_t size)
> > /* extra space in chunk to keep the handle */
> > size += ZS_HANDLE_SIZE;
> > class = pool->size_class[get_size_class_index(size)];
> > - /* In huge class size, we store the handle into first_page->private */
> > - if (class->huge) {
> > - size -= ZS_HANDLE_SIZE;
> > - class = pool->size_class[get_size_class_index(size)];
> > - }
>
> if huge class uses page->private to store a handle, shouldn't we pass "size -=
> ZS_HANDLE_SIZE" to get_size_class_index() ?
>
> -ss
>
yes, you're right.it's my misunderstanding, thanks.

> > spin_lock(&class->lock);
> > first_page = find_get_zspage(class); @@ -1856,9 +1855,7 @@ struct
> > zs_pool *zs_create_pool(char *name, gfp_t flags)
> > struct size_class *class;
> >
> > size = ZS_MIN_ALLOC_SIZE + i * ZS_SIZE_CLASS_DELTA;
> > - if (size > ZS_MAX_ALLOC_SIZE)
> > - size = ZS_MAX_ALLOC_SIZE;
> > - pages_per_zspage = get_pages_per_zspage(size);
> > + pages_per_zspage = get_pages_per_zspage(size +
> ZS_HANDLE_SIZE);
> >
> > /*
> > * size_class is used for normal zsmalloc operation such

N‹§²æ¸›yú²X¬¶ÇvØ–)Þ{.nlj·¥Š{±‘êX§¶›¡Ü}©ž²ÆzÚj:+v‰¨¾«‘êZ+€Êzf£¢·hšˆ§~†­†Ûÿû®w¥¢¸?™¨è&¢)ßf”ùy§m…á«a¶Úÿ 0¶ìå