Hello, On (02/17/16 09:56), YiPing Xu wrote: > static int create_handle_cache(struct zs_pool *pool) > @@ -1127,11 +1126,9 @@ static void __zs_unmap_object(struct mapping_area > *area, > goto out; > > buf = area->vm_buf; > - if (!area->huge) { > - buf = buf + ZS_HANDLE_SIZE; > - size -= ZS_HANDLE_SIZE; > - off += ZS_HANDLE_SIZE; > - } > + buf = buf + ZS_HANDLE_SIZE; > + size -= ZS_HANDLE_SIZE; > + off += ZS_HANDLE_SIZE; > > sizes[0] = PAGE_SIZE - off; > sizes[1] = size - sizes[0];
hm, indeed. shouldn't it depend on class->huge? void *zs_map_object() { void *ret = __zs_map_object(area, pages, off, class->size); if (!class->huge) ret += ZS_HANDLE_SIZE; /* area->vm_buf + ZS_HANDLE_SIZE */ return ret; } static void __zs_unmap_object(struct mapping_area *area...) { char *buf = area->vm_buf; /* handle is in page->private for class->huge */ buf = buf + ZS_HANDLE_SIZE; size -= ZS_HANDLE_SIZE; off += ZS_HANDLE_SIZE; memcpy(..); } -ss