@@ -1385,63 +1385,6 @@ static inline int free_consistency_checks(struct kmem_cache *s,
1385
1385
return 1 ;
1386
1386
}
1387
1387
1388
- /* Supports checking bulk free of a constructed freelist */
1389
- static noinline int free_debug_processing (
1390
- struct kmem_cache * s , struct slab * slab ,
1391
- void * head , void * tail , int bulk_cnt ,
1392
- unsigned long addr )
1393
- {
1394
- struct kmem_cache_node * n = get_node (s , slab_nid (slab ));
1395
- void * object = head ;
1396
- int cnt = 0 ;
1397
- unsigned long flags , flags2 ;
1398
- int ret = 0 ;
1399
- depot_stack_handle_t handle = 0 ;
1400
-
1401
- if (s -> flags & SLAB_STORE_USER )
1402
- handle = set_track_prepare ();
1403
-
1404
- spin_lock_irqsave (& n -> list_lock , flags );
1405
- slab_lock (slab , & flags2 );
1406
-
1407
- if (s -> flags & SLAB_CONSISTENCY_CHECKS ) {
1408
- if (!check_slab (s , slab ))
1409
- goto out ;
1410
- }
1411
-
1412
- next_object :
1413
- cnt ++ ;
1414
-
1415
- if (s -> flags & SLAB_CONSISTENCY_CHECKS ) {
1416
- if (!free_consistency_checks (s , slab , object , addr ))
1417
- goto out ;
1418
- }
1419
-
1420
- if (s -> flags & SLAB_STORE_USER )
1421
- set_track_update (s , object , TRACK_FREE , addr , handle );
1422
- trace (s , slab , object , 0 );
1423
- /* Freepointer not overwritten by init_object(), SLAB_POISON moved it */
1424
- init_object (s , object , SLUB_RED_INACTIVE );
1425
-
1426
- /* Reached end of constructed freelist yet? */
1427
- if (object != tail ) {
1428
- object = get_freepointer (s , object );
1429
- goto next_object ;
1430
- }
1431
- ret = 1 ;
1432
-
1433
- out :
1434
- if (cnt != bulk_cnt )
1435
- slab_err (s , slab , "Bulk freelist count(%d) invalid(%d)\n" ,
1436
- bulk_cnt , cnt );
1437
-
1438
- slab_unlock (slab , & flags2 );
1439
- spin_unlock_irqrestore (& n -> list_lock , flags );
1440
- if (!ret )
1441
- slab_fix (s , "Object at 0x%p not freed" , object );
1442
- return ret ;
1443
- }
1444
-
1445
1388
/*
1446
1389
* Parse a block of slub_debug options. Blocks are delimited by ';'
1447
1390
*
@@ -2788,6 +2731,63 @@ static inline unsigned long node_nr_objs(struct kmem_cache_node *n)
2788
2731
{
2789
2732
return atomic_long_read (& n -> total_objects );
2790
2733
}
2734
+
2735
+ /* Supports checking bulk free of a constructed freelist */
2736
+ static noinline int free_debug_processing (
2737
+ struct kmem_cache * s , struct slab * slab ,
2738
+ void * head , void * tail , int bulk_cnt ,
2739
+ unsigned long addr )
2740
+ {
2741
+ struct kmem_cache_node * n = get_node (s , slab_nid (slab ));
2742
+ void * object = head ;
2743
+ int cnt = 0 ;
2744
+ unsigned long flags , flags2 ;
2745
+ int ret = 0 ;
2746
+ depot_stack_handle_t handle = 0 ;
2747
+
2748
+ if (s -> flags & SLAB_STORE_USER )
2749
+ handle = set_track_prepare ();
2750
+
2751
+ spin_lock_irqsave (& n -> list_lock , flags );
2752
+ slab_lock (slab , & flags2 );
2753
+
2754
+ if (s -> flags & SLAB_CONSISTENCY_CHECKS ) {
2755
+ if (!check_slab (s , slab ))
2756
+ goto out ;
2757
+ }
2758
+
2759
+ next_object :
2760
+ cnt ++ ;
2761
+
2762
+ if (s -> flags & SLAB_CONSISTENCY_CHECKS ) {
2763
+ if (!free_consistency_checks (s , slab , object , addr ))
2764
+ goto out ;
2765
+ }
2766
+
2767
+ if (s -> flags & SLAB_STORE_USER )
2768
+ set_track_update (s , object , TRACK_FREE , addr , handle );
2769
+ trace (s , slab , object , 0 );
2770
+ /* Freepointer not overwritten by init_object(), SLAB_POISON moved it */
2771
+ init_object (s , object , SLUB_RED_INACTIVE );
2772
+
2773
+ /* Reached end of constructed freelist yet? */
2774
+ if (object != tail ) {
2775
+ object = get_freepointer (s , object );
2776
+ goto next_object ;
2777
+ }
2778
+ ret = 1 ;
2779
+
2780
+ out :
2781
+ if (cnt != bulk_cnt )
2782
+ slab_err (s , slab , "Bulk freelist count(%d) invalid(%d)\n" ,
2783
+ bulk_cnt , cnt );
2784
+
2785
+ slab_unlock (slab , & flags2 );
2786
+ spin_unlock_irqrestore (& n -> list_lock , flags );
2787
+ if (!ret )
2788
+ slab_fix (s , "Object at 0x%p not freed" , object );
2789
+ return ret ;
2790
+ }
2791
2791
#endif /* CONFIG_SLUB_DEBUG */
2792
2792
2793
2793
#if defined(CONFIG_SLUB_DEBUG ) || defined(CONFIG_SYSFS )
0 commit comments