* [PATCH v3] alloc_tag: check mem_profiling_support in alloc_tag_init
@ 2025-05-12 19:42 Casey Chen
2025-05-12 20:53 ` Suren Baghdasaryan
0 siblings, 1 reply; 4+ messages in thread
From: Casey Chen @ 2025-05-12 19:42 UTC (permalink / raw)
To: linux-mm; +Cc: surenb, kent.overstreet, yzhong, Casey Chen
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.
Signed-off-by: Casey Chen <cachen@purestorage.com>
Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
---
lib/alloc_tag.c | 34 +++++++++++++++++++---------------
1 file changed, 19 insertions(+), 15 deletions(-)
diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
index 25ecc1334b67..7c798778669c 100644
--- a/lib/alloc_tag.c
+++ b/lib/alloc_tag.c
@@ -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 -EAGAIN;
+ }
+
res = alloc_mod_tags_mem();
- if (res)
+ if (res) {
+ pr_err("Failed to allocate module tags\n");
+ shutdown_mem_profiling(true);
return res;
+ }
alloc_tag_cttype = codetag_register_type(&desc);
if (IS_ERR(alloc_tag_cttype)) {
+ pr_err("Failed to register codetag type with desc %s\n", desc.section);
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);
--
2.49.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] alloc_tag: check mem_profiling_support in alloc_tag_init
2025-05-12 19:42 [PATCH v3] alloc_tag: check mem_profiling_support in alloc_tag_init Casey Chen
@ 2025-05-12 20:53 ` Suren Baghdasaryan
2025-05-12 21:02 ` Casey Chen
0 siblings, 1 reply; 4+ messages in thread
From: Suren Baghdasaryan @ 2025-05-12 20:53 UTC (permalink / raw)
To: Casey Chen; +Cc: linux-mm, kent.overstreet, yzhong
On Mon, May 12, 2025 at 12:42 PM Casey Chen <cachen@purestorage.com> wrote:
>
> 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.
>
> Signed-off-by: Casey Chen <cachen@purestorage.com>
> Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
> ---
> lib/alloc_tag.c | 34 +++++++++++++++++++---------------
> 1 file changed, 19 insertions(+), 15 deletions(-)
>
> diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
> index 25ecc1334b67..7c798778669c 100644
> --- a/lib/alloc_tag.c
> +++ b/lib/alloc_tag.c
> @@ -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)) {
I suggest keeping file creation as the last step so that we don't have
to remove it if later steps fail.
> + pr_err("Failed to create %s file\n", ALLOCINFO_FILE_NAME);
> + shutdown_mem_profiling(false);
> + return -EAGAIN;
Why EAGAIN? I would just let it fall through returning 0 (after moving
this to the end as I suggested in my previous comment).
> + }
> +
> res = alloc_mod_tags_mem();
> - if (res)
> + if (res) {
> + pr_err("Failed to allocate module tags\n");
The error message is a bit misleading here since we are not allocating
module tags but reserving virtual space for them. Maybe:
"Failed to reserve address space for module tags"
> + shutdown_mem_profiling(true);
> return res;
> + }
>
> alloc_tag_cttype = codetag_register_type(&desc);
> if (IS_ERR(alloc_tag_cttype)) {
> + pr_err("Failed to register codetag type with desc %s\n", desc.section);
pr_err("Allocation tags registration failed, errno = %d\n", ret);
> 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);
> --
> 2.49.0
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] alloc_tag: check mem_profiling_support in alloc_tag_init
2025-05-12 20:53 ` Suren Baghdasaryan
@ 2025-05-12 21:02 ` Casey Chen
2025-05-13 2:06 ` Suren Baghdasaryan
0 siblings, 1 reply; 4+ messages in thread
From: Casey Chen @ 2025-05-12 21:02 UTC (permalink / raw)
To: Suren Baghdasaryan; +Cc: linux-mm, kent.overstreet, yzhong
On Mon, May 12, 2025 at 1:53 PM Suren Baghdasaryan <surenb@google.com> wrote:
>
> On Mon, May 12, 2025 at 12:42 PM Casey Chen <cachen@purestorage.com> wrote:
> >
> > 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.
> >
> > Signed-off-by: Casey Chen <cachen@purestorage.com>
> > Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
> > ---
> > lib/alloc_tag.c | 34 +++++++++++++++++++---------------
> > 1 file changed, 19 insertions(+), 15 deletions(-)
> >
> > diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
> > index 25ecc1334b67..7c798778669c 100644
> > --- a/lib/alloc_tag.c
> > +++ b/lib/alloc_tag.c
> > @@ -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)) {
>
> I suggest keeping file creation as the last step so that we don't have
> to remove it if later steps fail.
>
If the file creation is the last step, how could it clean up codetag
type registration ? As we miss codetag unregistration function, I
think codetag type registration should be the last step.
> > + pr_err("Failed to create %s file\n", ALLOCINFO_FILE_NAME);
> > + shutdown_mem_profiling(false);
> > + return -EAGAIN;
>
> Why EAGAIN? I would just let it fall through returning 0 (after moving
> this to the end as I suggested in my previous comment).
>
return 0 is fine to me if this fails. EAGAIN sounds fine too.
> > + }
> > +
> > res = alloc_mod_tags_mem();
> > - if (res)
> > + if (res) {
> > + pr_err("Failed to allocate module tags\n");
>
> The error message is a bit misleading here since we are not allocating
> module tags but reserving virtual space for them. Maybe:
> "Failed to reserve address space for module tags"
>
Sounds good!
> > + shutdown_mem_profiling(true);
> > return res;
> > + }
> >
> > alloc_tag_cttype = codetag_register_type(&desc);
> > if (IS_ERR(alloc_tag_cttype)) {
> > + pr_err("Failed to register codetag type with desc %s\n", desc.section);
>
> pr_err("Allocation tags registration failed, errno = %d\n", ret);
>
Sounds good too.
> > 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);
> > --
> > 2.49.0
> >
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3] alloc_tag: check mem_profiling_support in alloc_tag_init
2025-05-12 21:02 ` Casey Chen
@ 2025-05-13 2:06 ` Suren Baghdasaryan
0 siblings, 0 replies; 4+ messages in thread
From: Suren Baghdasaryan @ 2025-05-13 2:06 UTC (permalink / raw)
To: Casey Chen; +Cc: linux-mm, kent.overstreet, yzhong
On Mon, May 12, 2025 at 2:02 PM Casey Chen <cachen@purestorage.com> wrote:
>
> On Mon, May 12, 2025 at 1:53 PM Suren Baghdasaryan <surenb@google.com> wrote:
> >
> > On Mon, May 12, 2025 at 12:42 PM Casey Chen <cachen@purestorage.com> wrote:
> > >
> > > 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.
> > >
> > > Signed-off-by: Casey Chen <cachen@purestorage.com>
> > > Reviewed-by: Yuanyuan Zhong <yzhong@purestorage.com>
> > > ---
> > > lib/alloc_tag.c | 34 +++++++++++++++++++---------------
> > > 1 file changed, 19 insertions(+), 15 deletions(-)
> > >
> > > diff --git a/lib/alloc_tag.c b/lib/alloc_tag.c
> > > index 25ecc1334b67..7c798778669c 100644
> > > --- a/lib/alloc_tag.c
> > > +++ b/lib/alloc_tag.c
> > > @@ -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)) {
> >
> > I suggest keeping file creation as the last step so that we don't have
> > to remove it if later steps fail.
> >
>
> If the file creation is the last step, how could it clean up codetag
> type registration ? As we miss codetag unregistration function, I
> think codetag type registration should be the last step.
I see. Ok, keeping it here sounds reasonable. Implementing
codetag_unregister_type() just for this failure case would not make
sense. Please go ahead and address the other nits and I think it will
be good to go.
>
> > > + pr_err("Failed to create %s file\n", ALLOCINFO_FILE_NAME);
> > > + shutdown_mem_profiling(false);
> > > + return -EAGAIN;
> >
> > Why EAGAIN? I would just let it fall through returning 0 (after moving
> > this to the end as I suggested in my previous comment).
> >
>
> return 0 is fine to me if this fails. EAGAIN sounds fine too.
>
> > > + }
> > > +
> > > res = alloc_mod_tags_mem();
> > > - if (res)
> > > + if (res) {
> > > + pr_err("Failed to allocate module tags\n");
> >
> > The error message is a bit misleading here since we are not allocating
> > module tags but reserving virtual space for them. Maybe:
> > "Failed to reserve address space for module tags"
> >
>
> Sounds good!
>
> > > + shutdown_mem_profiling(true);
> > > return res;
> > > + }
> > >
> > > alloc_tag_cttype = codetag_register_type(&desc);
> > > if (IS_ERR(alloc_tag_cttype)) {
> > > + pr_err("Failed to register codetag type with desc %s\n", desc.section);
> >
> > pr_err("Allocation tags registration failed, errno = %d\n", ret);
> >
>
> Sounds good too.
>
> > > 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);
> > > --
> > > 2.49.0
> > >
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-05-13 2:07 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-05-12 19:42 [PATCH v3] alloc_tag: check mem_profiling_support in alloc_tag_init Casey Chen
2025-05-12 20:53 ` Suren Baghdasaryan
2025-05-12 21:02 ` Casey Chen
2025-05-13 2:06 ` Suren Baghdasaryan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox