All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Hocko <mhocko@kernel.org>
To: Joe Perches <joe@perches.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH] mm/page_alloc: Avoid KERN_CONT uses in warn_alloc
Date: Tue, 7 Nov 2017 13:50:55 +0100	[thread overview]
Message-ID: <20171107125055.cl5pyp2zwon44x5l@dhcp22.suse.cz> (raw)
In-Reply-To: <b31236dfe3fc924054fd7842bde678e71d193638.1509991345.git.joe@perches.com>

On Mon 06-11-17 10:02:56, Joe Perches wrote:
> KERN_CONT/pr_cont uses should be avoided where possible.
> Use single pr_warn calls instead.
> 
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
>  mm/page_alloc.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 536431bf0f0c..82e6d2c914ab 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -3275,19 +3275,17 @@ void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...)
>  	if ((gfp_mask & __GFP_NOWARN) || !__ratelimit(&nopage_rs))
>  		return;
>  
> -	pr_warn("%s: ", current->comm);
> -
>  	va_start(args, fmt);
>  	vaf.fmt = fmt;
>  	vaf.va = &args;
> -	pr_cont("%pV", &vaf);
> -	va_end(args);
> -
> -	pr_cont(", mode:%#x(%pGg), nodemask=", gfp_mask, &gfp_mask);
>  	if (nodemask)
> -		pr_cont("%*pbl\n", nodemask_pr_args(nodemask));
> +		pr_warn("%s: %pV, mode:%#x(%pGg), nodemask=%*pbl\n",
> +			current->comm, &vaf, gfp_mask, &gfp_mask,
> +			nodemask_pr_args(nodemask));
>  	else
> -		pr_cont("(null)\n");
> +		pr_warn("%s: %pV, mode:%#x(%pGg), nodemask=(null)\n",
> +			current->comm, &vaf, gfp_mask, &gfp_mask);
> +	va_end(args);
>  
>  	cpuset_print_current_mems_allowed();

I do not like the duplication. It just calls for inconsistencies over
time. Can we instead make %*pbl consume NULL nodemask instead?
Something like the following pseudo patch + the if/else removed.
If this would be possible we could simplify other code as well I think
(at least oom code has to special case NULL nodemask).

What do you think?
---
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index de1c50b93c61..106fac744f49 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -104,7 +104,7 @@ extern nodemask_t _unused_nodemask_arg_;
  *
  * Can be used to provide arguments for '%*pb[l]' when printing a nodemask.
  */
-#define nodemask_pr_args(maskp)		MAX_NUMNODES, (maskp)->bits
+#define nodemask_pr_args(maskp)		MAX_NUMNODES, (maskp) ? (maskp)->bits : NULL
 
 /*
  * The inline keyword gives the compiler room to decide to inline, or
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 1746bae94d41..6f40cf319a76 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -902,6 +902,9 @@ char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap,
 	int cur, rbot, rtop;
 	bool first = true;
 
+	if (!bitmap)
+		return buf;
+
 	/* reused to print numbers */
 	spec = (struct printf_spec){ .base = 10 };
 
-- 
Michal Hocko
SUSE Labs

WARNING: multiple messages have this Message-ID (diff)
From: Michal Hocko <mhocko@kernel.org>
To: Joe Perches <joe@perches.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH] mm/page_alloc: Avoid KERN_CONT uses in warn_alloc
Date: Tue, 7 Nov 2017 13:50:55 +0100	[thread overview]
Message-ID: <20171107125055.cl5pyp2zwon44x5l@dhcp22.suse.cz> (raw)
In-Reply-To: <b31236dfe3fc924054fd7842bde678e71d193638.1509991345.git.joe@perches.com>

On Mon 06-11-17 10:02:56, Joe Perches wrote:
> KERN_CONT/pr_cont uses should be avoided where possible.
> Use single pr_warn calls instead.
> 
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
>  mm/page_alloc.c | 14 ++++++--------
>  1 file changed, 6 insertions(+), 8 deletions(-)
> 
> diff --git a/mm/page_alloc.c b/mm/page_alloc.c
> index 536431bf0f0c..82e6d2c914ab 100644
> --- a/mm/page_alloc.c
> +++ b/mm/page_alloc.c
> @@ -3275,19 +3275,17 @@ void warn_alloc(gfp_t gfp_mask, nodemask_t *nodemask, const char *fmt, ...)
>  	if ((gfp_mask & __GFP_NOWARN) || !__ratelimit(&nopage_rs))
>  		return;
>  
> -	pr_warn("%s: ", current->comm);
> -
>  	va_start(args, fmt);
>  	vaf.fmt = fmt;
>  	vaf.va = &args;
> -	pr_cont("%pV", &vaf);
> -	va_end(args);
> -
> -	pr_cont(", mode:%#x(%pGg), nodemask=", gfp_mask, &gfp_mask);
>  	if (nodemask)
> -		pr_cont("%*pbl\n", nodemask_pr_args(nodemask));
> +		pr_warn("%s: %pV, mode:%#x(%pGg), nodemask=%*pbl\n",
> +			current->comm, &vaf, gfp_mask, &gfp_mask,
> +			nodemask_pr_args(nodemask));
>  	else
> -		pr_cont("(null)\n");
> +		pr_warn("%s: %pV, mode:%#x(%pGg), nodemask=(null)\n",
> +			current->comm, &vaf, gfp_mask, &gfp_mask);
> +	va_end(args);
>  
>  	cpuset_print_current_mems_allowed();

I do not like the duplication. It just calls for inconsistencies over
time. Can we instead make %*pbl consume NULL nodemask instead?
Something like the following pseudo patch + the if/else removed.
If this would be possible we could simplify other code as well I think
(at least oom code has to special case NULL nodemask).

What do you think?
---
diff --git a/include/linux/nodemask.h b/include/linux/nodemask.h
index de1c50b93c61..106fac744f49 100644
--- a/include/linux/nodemask.h
+++ b/include/linux/nodemask.h
@@ -104,7 +104,7 @@ extern nodemask_t _unused_nodemask_arg_;
  *
  * Can be used to provide arguments for '%*pb[l]' when printing a nodemask.
  */
-#define nodemask_pr_args(maskp)		MAX_NUMNODES, (maskp)->bits
+#define nodemask_pr_args(maskp)		MAX_NUMNODES, (maskp) ? (maskp)->bits : NULL
 
 /*
  * The inline keyword gives the compiler room to decide to inline, or
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 1746bae94d41..6f40cf319a76 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -902,6 +902,9 @@ char *bitmap_list_string(char *buf, char *end, unsigned long *bitmap,
 	int cur, rbot, rtop;
 	bool first = true;
 
+	if (!bitmap)
+		return buf;
+
 	/* reused to print numbers */
 	spec = (struct printf_spec){ .base = 10 };
 
-- 
Michal Hocko
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2017-11-07 12:50 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-11-06 18:02 [PATCH] mm/page_alloc: Avoid KERN_CONT uses in warn_alloc Joe Perches
2017-11-06 18:02 ` Joe Perches
2017-11-07 12:50 ` Michal Hocko [this message]
2017-11-07 12:50   ` Michal Hocko
2017-11-07 15:34   ` Joe Perches
2017-11-07 15:34     ` Joe Perches
2017-11-07 15:43     ` Michal Hocko
2017-11-07 15:43       ` Michal Hocko
2017-11-07 16:03       ` Joe Perches
2017-11-07 16:03         ` Joe Perches
2017-11-09 10:05         ` Michal Hocko
2017-11-09 10:05           ` Michal Hocko
2017-11-09 15:49           ` Joe Perches
2017-11-09 15:49             ` Joe Perches
2017-11-09 16:03             ` Michal Hocko
2017-11-09 16:03               ` Michal Hocko
2017-11-09 16:27           ` Joe Perches
2017-11-09 16:27             ` Joe Perches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20171107125055.cl5pyp2zwon44x5l@dhcp22.suse.cz \
    --to=mhocko@kernel.org \
    --cc=joe@perches.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.