@@ -1360,17 +1360,19 @@ size_t zs_huge_class_size(struct zs_pool *pool)
1360
1360
}
1361
1361
EXPORT_SYMBOL_GPL (zs_huge_class_size );
1362
1362
1363
- static unsigned long obj_malloc (struct size_class * class ,
1363
+ static unsigned long obj_malloc (struct zs_pool * pool ,
1364
1364
struct zspage * zspage , unsigned long handle )
1365
1365
{
1366
1366
int i , nr_page , offset ;
1367
1367
unsigned long obj ;
1368
1368
struct link_free * link ;
1369
+ struct size_class * class ;
1369
1370
1370
1371
struct page * m_page ;
1371
1372
unsigned long m_offset ;
1372
1373
void * vaddr ;
1373
1374
1375
+ class = pool -> size_class [zspage -> class ];
1374
1376
handle |= OBJ_ALLOCATED_TAG ;
1375
1377
obj = get_freeobj (zspage );
1376
1378
@@ -1394,7 +1396,6 @@ static unsigned long obj_malloc(struct size_class *class,
1394
1396
1395
1397
kunmap_atomic (vaddr );
1396
1398
mod_zspage_inuse (zspage , 1 );
1397
- class_stat_inc (class , OBJ_USED , 1 );
1398
1399
1399
1400
obj = location_to_obj (m_page , obj );
1400
1401
@@ -1433,10 +1434,11 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t gfp)
1433
1434
spin_lock (& class -> lock );
1434
1435
zspage = find_get_zspage (class );
1435
1436
if (likely (zspage )) {
1436
- obj = obj_malloc (class , zspage , handle );
1437
+ obj = obj_malloc (pool , zspage , handle );
1437
1438
/* Now move the zspage to another fullness group, if required */
1438
1439
fix_fullness_group (class , zspage );
1439
1440
record_obj (handle , obj );
1441
+ class_stat_inc (class , OBJ_USED , 1 );
1440
1442
spin_unlock (& class -> lock );
1441
1443
1442
1444
return handle ;
@@ -1451,14 +1453,15 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t gfp)
1451
1453
}
1452
1454
1453
1455
spin_lock (& class -> lock );
1454
- obj = obj_malloc (class , zspage , handle );
1456
+ obj = obj_malloc (pool , zspage , handle );
1455
1457
newfg = get_fullness_group (class , zspage );
1456
1458
insert_zspage (class , zspage , newfg );
1457
1459
set_zspage_mapping (zspage , class -> index , newfg );
1458
1460
record_obj (handle , obj );
1459
1461
atomic_long_add (class -> pages_per_zspage ,
1460
1462
& pool -> pages_allocated );
1461
1463
class_stat_inc (class , OBJ_ALLOCATED , class -> objs_per_zspage );
1464
+ class_stat_inc (class , OBJ_USED , 1 );
1462
1465
1463
1466
/* We completely set up zspage so mark them as movable */
1464
1467
SetZsPageMovable (pool , zspage );
@@ -1468,7 +1471,7 @@ unsigned long zs_malloc(struct zs_pool *pool, size_t size, gfp_t gfp)
1468
1471
}
1469
1472
EXPORT_SYMBOL_GPL (zs_malloc );
1470
1473
1471
- static void obj_free (struct size_class * class , unsigned long obj )
1474
+ static void obj_free (int class_size , unsigned long obj )
1472
1475
{
1473
1476
struct link_free * link ;
1474
1477
struct zspage * zspage ;
@@ -1478,7 +1481,7 @@ static void obj_free(struct size_class *class, unsigned long obj)
1478
1481
void * vaddr ;
1479
1482
1480
1483
obj_to_location (obj , & f_page , & f_objidx );
1481
- f_offset = (class -> size * f_objidx ) & ~PAGE_MASK ;
1484
+ f_offset = (class_size * f_objidx ) & ~PAGE_MASK ;
1482
1485
zspage = get_zspage (f_page );
1483
1486
1484
1487
vaddr = kmap_atomic (f_page );
@@ -1489,7 +1492,6 @@ static void obj_free(struct size_class *class, unsigned long obj)
1489
1492
kunmap_atomic (vaddr );
1490
1493
set_freeobj (zspage , f_objidx );
1491
1494
mod_zspage_inuse (zspage , -1 );
1492
- class_stat_dec (class , OBJ_USED , 1 );
1493
1495
}
1494
1496
1495
1497
void zs_free (struct zs_pool * pool , unsigned long handle )
@@ -1513,7 +1515,8 @@ void zs_free(struct zs_pool *pool, unsigned long handle)
1513
1515
class = zspage_class (pool , zspage );
1514
1516
1515
1517
spin_lock (& class -> lock );
1516
- obj_free (class , obj );
1518
+ obj_free (class -> size , obj );
1519
+ class_stat_dec (class , OBJ_USED , 1 );
1517
1520
fullness = fix_fullness_group (class , zspage );
1518
1521
if (fullness != ZS_EMPTY ) {
1519
1522
migrate_read_unlock (zspage );
@@ -1671,7 +1674,7 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class,
1671
1674
}
1672
1675
1673
1676
used_obj = handle_to_obj (handle );
1674
- free_obj = obj_malloc (class , get_zspage (d_page ), handle );
1677
+ free_obj = obj_malloc (pool , get_zspage (d_page ), handle );
1675
1678
zs_object_copy (class , free_obj , used_obj );
1676
1679
obj_idx ++ ;
1677
1680
/*
@@ -1683,7 +1686,7 @@ static int migrate_zspage(struct zs_pool *pool, struct size_class *class,
1683
1686
free_obj |= BIT (HANDLE_PIN_BIT );
1684
1687
record_obj (handle , free_obj );
1685
1688
unpin_tag (handle );
1686
- obj_free (class , used_obj );
1689
+ obj_free (class -> size , used_obj );
1687
1690
}
1688
1691
1689
1692
/* Remember last position in this iteration */
0 commit comments