All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gu Zheng <guz.fnst-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
To: Rui Xiang <rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
Cc: containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	serge.hallyn-GeWIH/nMZzLQT0dZR+AlfA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	libo.chen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org,
	akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org,
	ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org
Subject: Re: [PATCH 8/9] syslog_ns: implement ns_printk for specific syslog_ns
Date: Mon, 29 Jul 2013 18:37:24 +0800	[thread overview]
Message-ID: <51F645E4.9070507@cn.fujitsu.com> (raw)
In-Reply-To: <1375065080-26740-9-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>

Hi Rui,

On 07/29/2013 10:31 AM, Rui Xiang wrote:

> Add a new interface named ns_printk, and assign an
> patamater ns. Log which belong to a container can
> be printed by ns_printk.

One question, with the syslog_ns used, do the log we print by *printk* in the
host contains the log in each syslog_ns(print out with ns_printk) or not?

Thanks,
Gu

> 
> Signed-off-by: Rui Xiang <rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
> ---
>  include/linux/printk.h |  4 ++++
>  kernel/printk.c        | 53 ++++++++++++++++++++++++++++++++++++++++++++++----
>  2 files changed, 53 insertions(+), 4 deletions(-)
> 
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index 29e3f85..bf83ad9 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -6,6 +6,7 @@
>  #include <linux/kern_levels.h>
>  #include <linux/linkage.h>
>  
> +struct syslog_namespace;
>  extern const char linux_banner[];
>  extern const char linux_proc_banner[];
>  
> @@ -123,6 +124,9 @@ asmlinkage int printk_emit(int facility, int level,
>  asmlinkage __printf(1, 2) __cold
>  int printk(const char *fmt, ...);
>  
> +asmlinkage __printf(2, 3) __cold
> +int ns_printk(struct syslog_namespace *ns, const char *fmt, ...);
> +
>  /*
>   * Special printk facility for scheduler use only, _DO_NOT_USE_ !
>   */
> diff --git a/kernel/printk.c b/kernel/printk.c
> index 6b561db..56a8b27 100644
> --- a/kernel/printk.c
> +++ b/kernel/printk.c
> @@ -1554,9 +1554,10 @@ static size_t cont_print_text(char *text, size_t size)
>  	return textlen;
>  }
>  
> -asmlinkage int vprintk_emit(int facility, int level,
> -			    const char *dict, size_t dictlen,
> -			    const char *fmt, va_list args)
> +static int ns_vprintk_emit(int facility, int level,
> +			const char *dict, size_t dictlen,
> +			const char *fmt, va_list args,
> +			struct syslog_namespace *ns)
>  {
>  	static int recursion_bug;
>  	static char textbuf[LOG_LINE_MAX];
> @@ -1566,7 +1567,6 @@ asmlinkage int vprintk_emit(int facility, int level,
>  	unsigned long flags;
>  	int this_cpu;
>  	int printed_len = 0;
> -	struct syslog_namespace *ns = &init_syslog_ns;
>  
>  	boot_delay_msec(level);
>  	printk_delay();
> @@ -1697,6 +1697,14 @@ out_restore_irqs:
>  
>  	return printed_len;
>  }
> +
> +asmlinkage int vprintk_emit(int facility, int level,
> +				const char *dict, size_t dictlen,
> +				const char *fmt, va_list args)
> +{
> +	return ns_vprintk_emit(facility, level, dict, dictlen, fmt, args,
> +				&init_syslog_ns);
> +}
>  EXPORT_SYMBOL(vprintk_emit);
>  
>  asmlinkage int vprintk(const char *fmt, va_list args)
> @@ -1762,6 +1770,43 @@ asmlinkage int printk(const char *fmt, ...)
>  }
>  EXPORT_SYMBOL(printk);
>  
> +/**
> + * ns_printk - print a kernel message in syslog_ns
> + * @ns: syslog namespace
> + * @fmt: format string
> + *
> + * This is ns_printk().
> + * It can be called from container context. We add a param
> + * ns to record current syslog namespace, because we need to
> + * print some log which are not generated by host, but contaner.
> + *
> + * See the vsnprintf() documentation for format string extensions over C99.
> + **/
> +asmlinkage int ns_printk(struct syslog_namespace *ns,
> +					const char *fmt, ...)
> +{
> +	va_list args;
> +	int r;
> +
> +	if (!ns)
> +		ns = current_user_ns()->syslog_ns;
> +
> +#ifdef CONFIG_KGDB_KDB
> +	if (unlikely(kdb_trap_printk)) {
> +		va_start(args, fmt);
> +		r = vkdb_printf(fmt, args);
> +		va_end(args);
> +		return r;
> +	}
> +#endif
> +	va_start(args, fmt);
> +	r = ns_vprintk_emit(0, -1, NULL, 0, fmt, args, ns);
> +	va_end(args);
> +
> +	return r;
> +}
> +EXPORT_SYMBOL(ns_printk);
> +

Here can we do some clean up to printk using ns_printk?

>  #else /* CONFIG_PRINTK */
>  
>  #define LOG_LINE_MAX		0

WARNING: multiple messages have this Message-ID (diff)
From: Gu Zheng <guz.fnst@cn.fujitsu.com>
To: Rui Xiang <rui.xiang@huawei.com>
Cc: containers@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, serge.hallyn@ubuntu.com,
	ebiederm@xmission.com, akpm@linux-foundation.org,
	gaofeng@cn.fujitsu.com, libo.chen@huawei.com
Subject: Re: [PATCH 8/9] syslog_ns: implement ns_printk for specific syslog_ns
Date: Mon, 29 Jul 2013 18:37:24 +0800	[thread overview]
Message-ID: <51F645E4.9070507@cn.fujitsu.com> (raw)
In-Reply-To: <1375065080-26740-9-git-send-email-rui.xiang@huawei.com>

Hi Rui,

On 07/29/2013 10:31 AM, Rui Xiang wrote:

> Add a new interface named ns_printk, and assign an
> patamater ns. Log which belong to a container can
> be printed by ns_printk.

One question, with the syslog_ns used, do the log we print by *printk* in the
host contains the log in each syslog_ns(print out with ns_printk) or not?

Thanks,
Gu

> 
> Signed-off-by: Rui Xiang <rui.xiang@huawei.com>
> ---
>  include/linux/printk.h |  4 ++++
>  kernel/printk.c        | 53 ++++++++++++++++++++++++++++++++++++++++++++++----
>  2 files changed, 53 insertions(+), 4 deletions(-)
> 
> diff --git a/include/linux/printk.h b/include/linux/printk.h
> index 29e3f85..bf83ad9 100644
> --- a/include/linux/printk.h
> +++ b/include/linux/printk.h
> @@ -6,6 +6,7 @@
>  #include <linux/kern_levels.h>
>  #include <linux/linkage.h>
>  
> +struct syslog_namespace;
>  extern const char linux_banner[];
>  extern const char linux_proc_banner[];
>  
> @@ -123,6 +124,9 @@ asmlinkage int printk_emit(int facility, int level,
>  asmlinkage __printf(1, 2) __cold
>  int printk(const char *fmt, ...);
>  
> +asmlinkage __printf(2, 3) __cold
> +int ns_printk(struct syslog_namespace *ns, const char *fmt, ...);
> +
>  /*
>   * Special printk facility for scheduler use only, _DO_NOT_USE_ !
>   */
> diff --git a/kernel/printk.c b/kernel/printk.c
> index 6b561db..56a8b27 100644
> --- a/kernel/printk.c
> +++ b/kernel/printk.c
> @@ -1554,9 +1554,10 @@ static size_t cont_print_text(char *text, size_t size)
>  	return textlen;
>  }
>  
> -asmlinkage int vprintk_emit(int facility, int level,
> -			    const char *dict, size_t dictlen,
> -			    const char *fmt, va_list args)
> +static int ns_vprintk_emit(int facility, int level,
> +			const char *dict, size_t dictlen,
> +			const char *fmt, va_list args,
> +			struct syslog_namespace *ns)
>  {
>  	static int recursion_bug;
>  	static char textbuf[LOG_LINE_MAX];
> @@ -1566,7 +1567,6 @@ asmlinkage int vprintk_emit(int facility, int level,
>  	unsigned long flags;
>  	int this_cpu;
>  	int printed_len = 0;
> -	struct syslog_namespace *ns = &init_syslog_ns;
>  
>  	boot_delay_msec(level);
>  	printk_delay();
> @@ -1697,6 +1697,14 @@ out_restore_irqs:
>  
>  	return printed_len;
>  }
> +
> +asmlinkage int vprintk_emit(int facility, int level,
> +				const char *dict, size_t dictlen,
> +				const char *fmt, va_list args)
> +{
> +	return ns_vprintk_emit(facility, level, dict, dictlen, fmt, args,
> +				&init_syslog_ns);
> +}
>  EXPORT_SYMBOL(vprintk_emit);
>  
>  asmlinkage int vprintk(const char *fmt, va_list args)
> @@ -1762,6 +1770,43 @@ asmlinkage int printk(const char *fmt, ...)
>  }
>  EXPORT_SYMBOL(printk);
>  
> +/**
> + * ns_printk - print a kernel message in syslog_ns
> + * @ns: syslog namespace
> + * @fmt: format string
> + *
> + * This is ns_printk().
> + * It can be called from container context. We add a param
> + * ns to record current syslog namespace, because we need to
> + * print some log which are not generated by host, but contaner.
> + *
> + * See the vsnprintf() documentation for format string extensions over C99.
> + **/
> +asmlinkage int ns_printk(struct syslog_namespace *ns,
> +					const char *fmt, ...)
> +{
> +	va_list args;
> +	int r;
> +
> +	if (!ns)
> +		ns = current_user_ns()->syslog_ns;
> +
> +#ifdef CONFIG_KGDB_KDB
> +	if (unlikely(kdb_trap_printk)) {
> +		va_start(args, fmt);
> +		r = vkdb_printf(fmt, args);
> +		va_end(args);
> +		return r;
> +	}
> +#endif
> +	va_start(args, fmt);
> +	r = ns_vprintk_emit(0, -1, NULL, 0, fmt, args, ns);
> +	va_end(args);
> +
> +	return r;
> +}
> +EXPORT_SYMBOL(ns_printk);
> +

Here can we do some clean up to printk using ns_printk?

>  #else /* CONFIG_PRINTK */
>  
>  #define LOG_LINE_MAX		0



  parent reply	other threads:[~2013-07-29 10:37 UTC|newest]

Thread overview: 65+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-29  2:31 [PATCH 0/9] Add namespace support for syslog v2 Rui Xiang
2013-07-29  2:31 ` [PATCH 1/9] syslog_ns: add syslog_namespace and put/get_syslog_ns Rui Xiang
     [not found]   ` <1375065080-26740-2-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29  9:40     ` Gu Zheng
2013-07-29  9:40       ` Gu Zheng
     [not found]       ` <51F6388B.8000308-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-07-29 11:47         ` Rui Xiang
2013-07-29 11:47           ` Rui Xiang
     [not found]           ` <51F65636.6080505-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-30  0:46             ` Gu Zheng
2013-07-30  0:46               ` Gu Zheng
2013-07-29  2:31 ` [PATCH 3/9] syslog_ns: add init syslog_ns for global syslog Rui Xiang
2013-07-29  2:31 ` [PATCH 4/9] syslog_ns: make syslog handling per namespace Rui Xiang
     [not found]   ` <1375065080-26740-5-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29  9:50     ` Gu Zheng
2013-07-29  9:50       ` Gu Zheng
2013-08-01  1:36     ` Gao feng
2013-08-01  1:36       ` Gao feng
     [not found]       ` <51F9BBAB.1080306-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-08-01  3:10         ` Rui Xiang
2013-08-01  3:10           ` Rui Xiang
     [not found]           ` <51F9D1A2.406-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-08-01  5:38             ` Gao feng
2013-08-01  5:38               ` Gao feng
     [not found]               ` <51F9F452.9060308-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-08-01  6:29                 ` Rui Xiang
2013-08-01  6:29                   ` Rui Xiang
2013-07-29  2:31 ` [PATCH 5/9] syslog_ns: make permisiion check per user namespace Rui Xiang
2013-07-29  2:31 ` [PATCH 6/9] syslog_ns: use init syslog_ns for console action Rui Xiang
2013-07-29  2:31 ` [PATCH 8/9] syslog_ns: implement ns_printk for specific syslog_ns Rui Xiang
     [not found]   ` <1375065080-26740-9-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29 10:37     ` Gu Zheng [this message]
2013-07-29 10:37       ` Gu Zheng
     [not found]       ` <51F645E4.9070507-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-07-29 12:17         ` Rui Xiang
2013-07-29 12:17           ` Rui Xiang
2013-07-29  2:31 ` [PATCH 9/9] netfilter: use ns_printk in iptable context Rui Xiang
     [not found]   ` <1375065080-26740-10-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29  9:48     ` Gao feng
2013-07-29  9:48       ` Gao feng
     [not found]       ` <51F63A88.4090405-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-07-29 12:37         ` Rui Xiang
2013-07-29 12:37           ` Rui Xiang
     [not found] ` <1375065080-26740-1-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29  2:31   ` [PATCH 1/9] syslog_ns: add syslog_namespace and put/get_syslog_ns Rui Xiang
2013-07-29  2:31   ` [PATCH 2/9] syslog_ns: add syslog_ns into user_namespace Rui Xiang
2013-07-29  2:31     ` Rui Xiang
     [not found]     ` <1375065080-26740-3-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29  9:46       ` Gu Zheng
2013-07-29  9:46         ` Gu Zheng
     [not found]         ` <51F639FB.304-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-07-29  9:54           ` Gao feng
2013-07-29  9:54             ` Gao feng
     [not found]             ` <51F63BD2.6090902-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-07-29  9:56               ` Gu Zheng
2013-07-29  9:56                 ` Gu Zheng
2013-07-29  2:31   ` [PATCH 3/9] syslog_ns: add init syslog_ns for global syslog Rui Xiang
2013-07-29  2:31   ` [PATCH 4/9] syslog_ns: make syslog handling per namespace Rui Xiang
2013-07-29  2:31   ` [PATCH 5/9] syslog_ns: make permisiion check per user namespace Rui Xiang
2013-07-29  2:31   ` [PATCH 6/9] syslog_ns: use init syslog_ns for console action Rui Xiang
2013-07-29  2:31   ` [PATCH 7/9] syslog_ns: implement function for creating syslog ns Rui Xiang
2013-07-29  2:31     ` Rui Xiang
     [not found]     ` <1375065080-26740-8-git-send-email-rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-29 10:25       ` Gu Zheng
2013-07-29 10:25         ` Gu Zheng
     [not found]         ` <51F64313.4010700-BthXqXjhjHXQFUHtdCDX3A@public.gmane.org>
2013-07-30  3:39           ` Rui Xiang
2013-07-30  3:39             ` Rui Xiang
     [not found]             ` <51F73555.1020204-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2013-07-30  3:42               ` Gu Zheng
2013-07-30  3:42                 ` Gu Zheng
2013-07-29 10:39       ` Gao feng
2013-07-29 10:39         ` Gao feng
2013-07-29  2:31   ` [PATCH 8/9] syslog_ns: implement ns_printk for specific syslog_ns Rui Xiang
2013-07-29  2:31   ` [PATCH 9/9] netfilter: use ns_printk in iptable context Rui Xiang
2013-07-29  9:33   ` [PATCH 0/9] Add namespace support for syslog v2 Gu Zheng
2013-07-29  9:33     ` Gu Zheng
2013-07-29 18:58   ` Eric W. Biederman
2013-07-29 18:58     ` Eric W. Biederman
     [not found]     ` <87wqo9urao.fsf-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
2013-07-30  2:11       ` Rui Xiang
2013-07-30  2:11         ` Rui Xiang
2013-07-30  6:05       ` Bruno Prémont
2013-07-30  6:05         ` Bruno Prémont

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=51F645E4.9070507@cn.fujitsu.com \
    --to=guz.fnst-bthxqxjhjhxqfuhtdcdx3a@public.gmane.org \
    --cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
    --cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \
    --cc=libo.chen-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=rui.xiang-hv44wF8Li93QT0dZR+AlfA@public.gmane.org \
    --cc=serge.hallyn-GeWIH/nMZzLQT0dZR+AlfA@public.gmane.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.