[PATCH 2/9] Revert "mm/kmemleak: make create_object return void"

George Prekas
2023-01-23T17:05:12Z

This reverts commit b955aa70a3ac9f1dd5e26d4c7673ec3c28a8c2af.

The function delete_object_part can use the return value of
create_object to propagate flags from the old object to the new objects.

Signed-off-by: George Prekas <george@enfabrica.net>
---
mm/kmemleak.c | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index b40735539abd..2b9c9ad68806 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -616,8 +616,9 @@ static noinline depot_stack_handle_t set_track_prepare(void)
* memory block and add it to the object_list and object_tree_root (or
* object_phys_tree_root).
*/
-static void __create_object(unsigned long ptr, size_t size,
- int min_count, gfp_t gfp, bool is_phys)
+static struct kmemleak_object *__create_object(unsigned long ptr, size_t size,
+ int min_count, gfp_t gfp,
+ bool is_phys)
{
unsigned long flags;
struct kmemleak_object *object, *parent;
@@ -629,7 +630,7 @@ static void __create_object(unsigned long ptr, size_t size,
if (!object) {
pr_warn("Cannot allocate a kmemleak_object structure\n");
kmemleak_disable();
- return;
+ return NULL;
}

INIT_LIST_HEAD(&object->object_list);
@@ -698,6 +699,7 @@ static void __create_object(unsigned long ptr, size_t size,
*/
dump_object_info(parent);
kmem_cache_free(object_cache, object);
+ object = NULL;
goto out;
}
}
@@ -707,20 +709,21 @@ static void __create_object(unsigned long ptr, size_t size,
list_add_tail_rcu(&object->object_list, &object_list);
out:
raw_spin_unlock_irqrestore(&kmemleak_lock, flags);
+ return object;
}

/* Create kmemleak object which allocated with virtual address. */
-static void create_object(unsigned long ptr, size_t size,
- int min_count, gfp_t gfp)
+static struct kmemleak_object *create_object(unsigned long ptr, size_t size,
+ int min_count, gfp_t gfp)
{
- __create_object(ptr, size, min_count, gfp, false);
+ return __create_object(ptr, size, min_count, gfp, false);
}

/* Create kmemleak object which allocated with physical address. */
-static void create_object_phys(unsigned long ptr, size_t size,
- int min_count, gfp_t gfp)
+static struct kmemleak_object *create_object_phys(unsigned long ptr, size_t size,
+ int min_count, gfp_t gfp)
{
- __create_object(ptr, size, min_count, gfp, true);
+ return __create_object(ptr, size, min_count, gfp, true);
}

/*
--
2.37.1