]> www.infradead.org Git - users/willy/xarray.git/commitdiff
debugobjects: Reuse put_objects() on OOM
authorThomas Gleixner <tglx@linutronix.de>
Mon, 7 Oct 2024 16:49:58 +0000 (18:49 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 15 Oct 2024 15:30:31 +0000 (17:30 +0200)
Reuse the helper function instead of having a open coded copy.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Zhen Lei <thunder.leizhen@huawei.com>
Link: https://lore.kernel.org/all/20241007164913.326834268@linutronix.de
lib/debugobjects.c

index a3d4c54f08399e9c0202e4925c4a54a987e5002d..2c866d0bdd68aaf56871edebbfbc5d610850b647 100644 (file)
@@ -429,7 +429,6 @@ static void free_object(struct debug_obj *obj)
        }
 }
 
-#ifdef CONFIG_HOTPLUG_CPU
 static void put_objects(struct hlist_head *list)
 {
        struct hlist_node *tmp;
@@ -445,6 +444,7 @@ static void put_objects(struct hlist_head *list)
        }
 }
 
+#ifdef CONFIG_HOTPLUG_CPU
 static int object_cpu_offline(unsigned int cpu)
 {
        /* Remote access is safe as the CPU is dead already */
@@ -456,31 +456,19 @@ static int object_cpu_offline(unsigned int cpu)
 }
 #endif
 
-/*
- * We run out of memory. That means we probably have tons of objects
- * allocated.
- */
+/* Out of memory. Free all objects from hash */
 static void debug_objects_oom(void)
 {
        struct debug_bucket *db = obj_hash;
-       struct hlist_node *tmp;
        HLIST_HEAD(freelist);
-       struct debug_obj *obj;
-       unsigned long flags;
-       int i;
 
        pr_warn("Out of memory. ODEBUG disabled\n");
 
-       for (i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
-               raw_spin_lock_irqsave(&db->lock, flags);
-               hlist_move_list(&db->list, &freelist);
-               raw_spin_unlock_irqrestore(&db->lock, flags);
+       for (int i = 0; i < ODEBUG_HASH_SIZE; i++, db++) {
+               scoped_guard(raw_spinlock_irqsave, &db->lock)
+                       hlist_move_list(&db->list, &freelist);
 
-               /* Now free them */
-               hlist_for_each_entry_safe(obj, tmp, &freelist, node) {
-                       hlist_del(&obj->node);
-                       free_object(obj);
-               }
+               put_objects(&freelist);
        }
 }