]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
alloc_tag: check mem_profiling_support in alloc_tag_init
authorCasey Chen <cachen@purestorage.com>
Tue, 13 May 2025 18:26:02 +0000 (12:26 -0600)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 22 May 2025 21:55:38 +0000 (14:55 -0700)
If mem_profiling_support is false, for example by
sysctl.vm.mem_profiling=never, alloc_tag_init should skip module tags
allocation, codetag type registration and procfs init.

Link: https://lkml.kernel.org/r/20250513182602.121843-1-cachen@purestorage.com
Signed-off-by: Casey Chen <cachen@purestorage.com>
Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
Acked-by: Suren Baghdasaryan <surenb@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/alloc_tag.c

index 25ecc1334b67ddd238b86d2ec785d1b6b3b7ce85..3baf19879c8e628e9b621fa7f11fc1a830d78f7b 100644 (file)
@@ -244,17 +244,6 @@ static void shutdown_mem_profiling(bool remove_file)
        mem_profiling_support = false;
 }
 
-static void __init procfs_init(void)
-{
-       if (!mem_profiling_support)
-               return;
-
-       if (!proc_create_seq(ALLOCINFO_FILE_NAME, 0400, NULL, &allocinfo_seq_op)) {
-               pr_err("Failed to create %s file\n", ALLOCINFO_FILE_NAME);
-               shutdown_mem_profiling(false);
-       }
-}
-
 void __init alloc_tag_sec_init(void)
 {
        struct alloc_tag *last_codetag;
@@ -762,19 +751,34 @@ static int __init alloc_tag_init(void)
        };
        int res;
 
+       sysctl_init();
+
+       if (!mem_profiling_support) {
+               pr_info("Memory allocation profiling is not supported!\n");
+               return 0;
+       }
+
+       if (!proc_create_seq(ALLOCINFO_FILE_NAME, 0400, NULL, &allocinfo_seq_op)) {
+               pr_err("Failed to create %s file\n", ALLOCINFO_FILE_NAME);
+               shutdown_mem_profiling(false);
+               return -ENOMEM;
+       }
+
        res = alloc_mod_tags_mem();
-       if (res)
+       if (res) {
+               pr_err("Failed to reserve address space for module tags, errno = %d\n", res);
+               shutdown_mem_profiling(true);
                return res;
+       }
 
        alloc_tag_cttype = codetag_register_type(&desc);
        if (IS_ERR(alloc_tag_cttype)) {
+               pr_err("Allocation tags registration failed, errno = %ld\n", PTR_ERR(alloc_tag_cttype));
                free_mod_tags_mem();
+               shutdown_mem_profiling(true);
                return PTR_ERR(alloc_tag_cttype);
        }
 
-       sysctl_init();
-       procfs_init();
-
        return 0;
 }
 module_init(alloc_tag_init);