All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Mladek <pmladek@suse.cz>
To: Andrew Morton <akpm@linux-foundation.org>,
	Oleg Nesterov <oleg@redhat.com>, Tejun Heo <tj@kernel.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>
Cc: Richard Weinberger <richard@nod.at>,
	Steven Rostedt <rostedt@goodmis.org>,
	David Woodhouse <dwmw2@infradead.org>,
	linux-mtd@lists.infradead.org,
	Trond Myklebust <trond.myklebust@primarydata.com>,
	Anna Schumaker <anna.schumaker@netapp.com>,
	linux-nfs@vger.kernel.org, Chris Mason <clm@fb.com>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Jiri Kosina <jkosina@suse.cz>, Borislav Petkov <bp@suse.de>,
	Michal Hocko <mhocko@suse.cz>,
	live-patching@vger.kernel.org, linux-api@vger.kernel.org,
	linux-kernel@vger.kernel.org, Petr Mladek <pmladek@suse.cz>
Subject: [RFC PATCH 13/18] ring_buffer: Use iterant kthreads API in the ring buffer benchmark
Date: Fri,  5 Jun 2015 17:01:12 +0200	[thread overview]
Message-ID: <1433516477-5153-14-git-send-email-pmladek@suse.cz> (raw)
In-Reply-To: <1433516477-5153-1-git-send-email-pmladek@suse.cz>

The new iterant kthread API allows to define a common checkpoint for
freezing, parking, termination, and even signal handling. It will allow
to maintain kthreads more easily and make the operations more reliable.

The kthread function is split into optional init(), func(), destroy() parts
where func() is called in a cycle. The common check point is after
each func() function finishes. See kthread_iterant_fn() for more details.

This patch removes the wait_to_die() cycle. Instead it uses
the main cycle and func() does nothing in the kill_test state.

The threads are not safe for freezing because there is used schedule()
without try_to_freeze() inside the kthread. Let's fix it in separate
patch. In the meantime, we need to disable it explicitly in the init()
function.

Consumer does not need to call schedule in func(). Instead, it sets
KTI_INT_SLEEP type and lets the kthread iterant framework to do the sleep
between iterations.

On the other hand, the producer still need to implement the sleeping
in func() because the iterant kthread framework does not support
this type of sleep. But the plan is to make it possible later.

Signed-off-by: Petr Mladek <pmladek@suse.cz>
---
 kernel/trace/ring_buffer_benchmark.c | 81 +++++++++++++++++-------------------
 1 file changed, 39 insertions(+), 42 deletions(-)

diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c
index 13d945c0d03f..164f3762cc82 100644
--- a/kernel/trace/ring_buffer_benchmark.c
+++ b/kernel/trace/ring_buffer_benchmark.c
@@ -30,6 +30,8 @@ static struct completion read_done;
 static struct ring_buffer *buffer;
 static struct task_struct *producer;
 static struct task_struct *consumer;
+static struct kthread_iterant producer_kti;
+static struct kthread_iterant consumer_kti;
 static unsigned long read;
 
 static int disable_reader;
@@ -354,61 +356,51 @@ static void ring_buffer_producer(void)
 	}
 }
 
-static void wait_to_die(void)
+static void ring_buffer_consumer_thread_init(void *arg)
 {
-	set_current_state(TASK_INTERRUPTIBLE);
-	while (!kthread_should_stop()) {
-		schedule();
-		set_current_state(TASK_INTERRUPTIBLE);
-	}
-	__set_current_state(TASK_RUNNING);
+	/* it does not matter where we freeze */
+	current->flags |= PF_NOFREEZE;
 }
 
-static int ring_buffer_consumer_thread(void *arg)
+static void ring_buffer_consumer_thread_func(void *arg)
 {
-	while (!kthread_should_stop() && !kill_test) {
-		complete(&read_start);
-
-		ring_buffer_consumer();
-
-		set_current_state(TASK_INTERRUPTIBLE);
-		if (kthread_should_stop() || kill_test)
-			break;
-
-		schedule();
-	}
-	__set_current_state(TASK_RUNNING);
-
 	if (kill_test)
-		wait_to_die();
+		return;
 
-	return 0;
+	complete(&read_start);
+
+	ring_buffer_consumer();
 }
 
-static int ring_buffer_producer_thread(void *arg)
+static void ring_buffer_producer_thread_init(void *arg)
 {
 	init_completion(&read_start);
 
-	while (!kthread_should_stop() && !kill_test) {
-		ring_buffer_reset(buffer);
+	/* it does not matter where we freeze */
+	current->flags |= PF_NOFREEZE;
+}
 
-		if (consumer) {
-			smp_wmb();
-			wake_up_process(consumer);
-			wait_for_completion(&read_start);
-		}
+static void ring_buffer_producer_thread_func(void *arg)
+{
+	if (kill_test) {
+		set_kthread_iterant_int_sleep();
+		return;
+	}
 
-		ring_buffer_producer();
+	ring_buffer_reset(buffer);
 
-		trace_printk("Sleeping for 10 secs\n");
-		set_current_state(TASK_INTERRUPTIBLE);
-		schedule_timeout(HZ * SLEEP_TIME);
+	if (consumer) {
+		/* reset ring buffer before waking up the consumer */
+		smp_wmb();
+		wake_up_process(consumer);
+		wait_for_completion(&read_start);
 	}
 
-	if (kill_test)
-		wait_to_die();
+	ring_buffer_producer();
 
-	return 0;
+	trace_printk("Sleeping for 10 secs\n");
+	set_current_state(TASK_INTERRUPTIBLE);
+	schedule_timeout(HZ * SLEEP_TIME);
 }
 
 static int __init ring_buffer_benchmark_init(void)
@@ -420,16 +412,21 @@ static int __init ring_buffer_benchmark_init(void)
 	if (!buffer)
 		return -ENOMEM;
 
+	consumer_kti.type = KTI_INT_SLEEP;
+	consumer_kti.func = ring_buffer_consumer_thread_init;
+	consumer_kti.func = ring_buffer_consumer_thread_func;
+
 	if (!disable_reader) {
-		consumer = kthread_create(ring_buffer_consumer_thread,
-					  NULL, "rb_consumer");
+		consumer = kthread_iterant_create(&consumer_kti, "rb_consumer");
 		ret = PTR_ERR(consumer);
 		if (IS_ERR(consumer))
 			goto out_fail;
 	}
 
-	producer = kthread_run(ring_buffer_producer_thread,
-			       NULL, "rb_producer");
+	producer_kti.init = ring_buffer_producer_thread_init;
+	producer_kti.func = ring_buffer_producer_thread_func;
+
+	producer = kthread_iterant_run(&producer_kti, "rb_producer");
 	ret = PTR_ERR(producer);
 
 	if (IS_ERR(producer))
-- 
1.8.5.6


WARNING: multiple messages have this Message-ID (diff)
From: Petr Mladek <pmladek@suse.cz>
To: Andrew Morton <akpm@linux-foundation.org>,
	Oleg Nesterov <oleg@redhat.com>, Tejun Heo <tj@kernel.org>,
	Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>
Cc: linux-nfs@vger.kernel.org, Borislav Petkov <bp@suse.de>,
	Jiri Kosina <jkosina@suse.cz>,
	Richard Weinberger <richard@nod.at>,
	Trond Myklebust <trond.myklebust@primarydata.com>,
	linux-kernel@vger.kernel.org,
	Steven Rostedt <rostedt@goodmis.org>,
	Michal Hocko <mhocko@suse.cz>, Chris Mason <clm@fb.com>,
	Petr Mladek <pmladek@suse.cz>,
	linux-mtd@lists.infradead.org, linux-api@vger.kernel.org,
	Linus Torvalds <torvalds@linux-foundation.org>,
	live-patching@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	David Woodhouse <dwmw2@infradead.org>,
	Anna Schumaker <anna.schumaker@netapp.com>
Subject: [RFC PATCH 13/18] ring_buffer: Use iterant kthreads API in the ring buffer benchmark
Date: Fri,  5 Jun 2015 17:01:12 +0200	[thread overview]
Message-ID: <1433516477-5153-14-git-send-email-pmladek@suse.cz> (raw)
In-Reply-To: <1433516477-5153-1-git-send-email-pmladek@suse.cz>

The new iterant kthread API allows to define a common checkpoint for
freezing, parking, termination, and even signal handling. It will allow
to maintain kthreads more easily and make the operations more reliable.

The kthread function is split into optional init(), func(), destroy() parts
where func() is called in a cycle. The common check point is after
each func() function finishes. See kthread_iterant_fn() for more details.

This patch removes the wait_to_die() cycle. Instead it uses
the main cycle and func() does nothing in the kill_test state.

The threads are not safe for freezing because there is used schedule()
without try_to_freeze() inside the kthread. Let's fix it in separate
patch. In the meantime, we need to disable it explicitly in the init()
function.

Consumer does not need to call schedule in func(). Instead, it sets
KTI_INT_SLEEP type and lets the kthread iterant framework to do the sleep
between iterations.

On the other hand, the producer still need to implement the sleeping
in func() because the iterant kthread framework does not support
this type of sleep. But the plan is to make it possible later.

Signed-off-by: Petr Mladek <pmladek@suse.cz>
---
 kernel/trace/ring_buffer_benchmark.c | 81 +++++++++++++++++-------------------
 1 file changed, 39 insertions(+), 42 deletions(-)

diff --git a/kernel/trace/ring_buffer_benchmark.c b/kernel/trace/ring_buffer_benchmark.c
index 13d945c0d03f..164f3762cc82 100644
--- a/kernel/trace/ring_buffer_benchmark.c
+++ b/kernel/trace/ring_buffer_benchmark.c
@@ -30,6 +30,8 @@ static struct completion read_done;
 static struct ring_buffer *buffer;
 static struct task_struct *producer;
 static struct task_struct *consumer;
+static struct kthread_iterant producer_kti;
+static struct kthread_iterant consumer_kti;
 static unsigned long read;
 
 static int disable_reader;
@@ -354,61 +356,51 @@ static void ring_buffer_producer(void)
 	}
 }
 
-static void wait_to_die(void)
+static void ring_buffer_consumer_thread_init(void *arg)
 {
-	set_current_state(TASK_INTERRUPTIBLE);
-	while (!kthread_should_stop()) {
-		schedule();
-		set_current_state(TASK_INTERRUPTIBLE);
-	}
-	__set_current_state(TASK_RUNNING);
+	/* it does not matter where we freeze */
+	current->flags |= PF_NOFREEZE;
 }
 
-static int ring_buffer_consumer_thread(void *arg)
+static void ring_buffer_consumer_thread_func(void *arg)
 {
-	while (!kthread_should_stop() && !kill_test) {
-		complete(&read_start);
-
-		ring_buffer_consumer();
-
-		set_current_state(TASK_INTERRUPTIBLE);
-		if (kthread_should_stop() || kill_test)
-			break;
-
-		schedule();
-	}
-	__set_current_state(TASK_RUNNING);
-
 	if (kill_test)
-		wait_to_die();
+		return;
 
-	return 0;
+	complete(&read_start);
+
+	ring_buffer_consumer();
 }
 
-static int ring_buffer_producer_thread(void *arg)
+static void ring_buffer_producer_thread_init(void *arg)
 {
 	init_completion(&read_start);
 
-	while (!kthread_should_stop() && !kill_test) {
-		ring_buffer_reset(buffer);
+	/* it does not matter where we freeze */
+	current->flags |= PF_NOFREEZE;
+}
 
-		if (consumer) {
-			smp_wmb();
-			wake_up_process(consumer);
-			wait_for_completion(&read_start);
-		}
+static void ring_buffer_producer_thread_func(void *arg)
+{
+	if (kill_test) {
+		set_kthread_iterant_int_sleep();
+		return;
+	}
 
-		ring_buffer_producer();
+	ring_buffer_reset(buffer);
 
-		trace_printk("Sleeping for 10 secs\n");
-		set_current_state(TASK_INTERRUPTIBLE);
-		schedule_timeout(HZ * SLEEP_TIME);
+	if (consumer) {
+		/* reset ring buffer before waking up the consumer */
+		smp_wmb();
+		wake_up_process(consumer);
+		wait_for_completion(&read_start);
 	}
 
-	if (kill_test)
-		wait_to_die();
+	ring_buffer_producer();
 
-	return 0;
+	trace_printk("Sleeping for 10 secs\n");
+	set_current_state(TASK_INTERRUPTIBLE);
+	schedule_timeout(HZ * SLEEP_TIME);
 }
 
 static int __init ring_buffer_benchmark_init(void)
@@ -420,16 +412,21 @@ static int __init ring_buffer_benchmark_init(void)
 	if (!buffer)
 		return -ENOMEM;
 
+	consumer_kti.type = KTI_INT_SLEEP;
+	consumer_kti.func = ring_buffer_consumer_thread_init;
+	consumer_kti.func = ring_buffer_consumer_thread_func;
+
 	if (!disable_reader) {
-		consumer = kthread_create(ring_buffer_consumer_thread,
-					  NULL, "rb_consumer");
+		consumer = kthread_iterant_create(&consumer_kti, "rb_consumer");
 		ret = PTR_ERR(consumer);
 		if (IS_ERR(consumer))
 			goto out_fail;
 	}
 
-	producer = kthread_run(ring_buffer_producer_thread,
-			       NULL, "rb_producer");
+	producer_kti.init = ring_buffer_producer_thread_init;
+	producer_kti.func = ring_buffer_producer_thread_func;
+
+	producer = kthread_iterant_run(&producer_kti, "rb_producer");
 	ret = PTR_ERR(producer);
 
 	if (IS_ERR(producer))
-- 
1.8.5.6

  parent reply	other threads:[~2015-06-05 15:02 UTC|newest]

Thread overview: 175+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-05 15:00 [RFC PATCH 00/18] kthreads/signal: Safer kthread API and signal handling Petr Mladek
2015-06-05 15:00 ` Petr Mladek
2015-06-05 15:00 ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 01/18] kthread: Allow to call __kthread_create_on_node() with va_list args Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 02/18] kthread: Add API for iterant kthreads Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-09  6:23   ` Tejun Heo
2015-06-09  6:23     ` Tejun Heo
2015-06-09  6:23     ` Tejun Heo
2015-06-15 12:46     ` Petr Mladek
2015-06-15 12:46       ` Petr Mladek
2015-06-15 12:46       ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 03/18] kthread: Add kthread_stop_current() Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 04/18] signal: Rename kernel_sigaction() to kthread_sigaction() and clean it up Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 05/18] freezer/scheduler: Add freezable_cond_resched() Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 06/18] signal/kthread: Initial implementation of kthread signal handling Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-06 21:58   ` Oleg Nesterov
2015-06-06 21:58     ` Oleg Nesterov
2015-06-06 21:58     ` Oleg Nesterov
2015-06-08 13:51     ` Petr Mladek
2015-06-08 13:51       ` Petr Mladek
2015-06-08 13:51       ` Petr Mladek
2015-06-08 21:13       ` Oleg Nesterov
2015-06-08 21:13         ` Oleg Nesterov
2015-06-08 21:13         ` Oleg Nesterov
2015-06-15 13:13         ` Petr Mladek
2015-06-15 13:13           ` Petr Mladek
2015-06-15 13:13           ` Petr Mladek
2015-06-15 19:14           ` Oleg Nesterov
2015-06-15 19:14             ` Oleg Nesterov
2015-06-15 19:14             ` Oleg Nesterov
2015-06-16  7:54             ` Petr Mladek
2015-06-16  7:54               ` Petr Mladek
2015-06-16  7:54               ` Petr Mladek
2015-06-09  7:10   ` Tejun Heo
2015-06-09  7:10     ` Tejun Heo
2015-06-09  7:10     ` Tejun Heo
2015-06-09 12:15     ` Jiri Kosina
2015-06-09 12:15       ` Jiri Kosina
2015-06-09 12:15       ` Jiri Kosina
2015-06-10  3:13       ` Tejun Heo
2015-06-10  3:13         ` Tejun Heo
2015-06-10  3:13         ` Tejun Heo
2015-06-05 15:01 ` [RFC PATCH 07/18] kthread: Make iterant kthreads freezable by default Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-09  7:20   ` Tejun Heo
2015-06-09  7:20     ` Tejun Heo
2015-06-09  7:20     ` Tejun Heo
2015-06-09 15:53     ` Petr Mladek
2015-06-09 15:53       ` Petr Mladek
2015-06-09 15:53       ` Petr Mladek
2015-06-10  4:31       ` Tejun Heo
2015-06-10  4:31         ` Tejun Heo
2015-06-10  4:31         ` Tejun Heo
2015-06-12 13:24         ` Petr Mladek
2015-06-12 13:24           ` Petr Mladek
2015-06-12 13:24           ` Petr Mladek
2015-06-13 23:22           ` Tejun Heo
2015-06-13 23:22             ` Tejun Heo
2015-06-13 23:22             ` Tejun Heo
2015-06-15  9:28             ` Petr Mladek
2015-06-15  9:28               ` Petr Mladek
2015-06-15  9:28               ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 08/18] kthread: Allow to get struct kthread_iterant from task_struct Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 09/18] kthread: Make it easier to correctly sleep in iterant kthreads Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 16:10   ` Peter Zijlstra
2015-06-05 16:10     ` Peter Zijlstra
2015-06-05 16:10     ` Peter Zijlstra
2015-06-08 10:01     ` Petr Mladek
2015-06-08 10:01       ` Petr Mladek
2015-06-08 10:01       ` Petr Mladek
2015-06-08 11:39       ` Peter Zijlstra
2015-06-08 11:39         ` Peter Zijlstra
2015-06-09 15:25         ` Petr Mladek
2015-06-09 15:25           ` Petr Mladek
2015-06-09 15:25           ` Petr Mladek
2015-06-10  9:05           ` Peter Zijlstra
2015-06-10  9:05             ` Peter Zijlstra
2015-06-10  9:05             ` Peter Zijlstra
2015-06-09  7:32       ` Tejun Heo
2015-06-09  7:32         ` Tejun Heo
2015-06-09  7:32         ` Tejun Heo
2015-06-08 17:48     ` Steven Rostedt
2015-06-08 17:48       ` Steven Rostedt
2015-06-08 17:48       ` Steven Rostedt
2015-06-10  9:07       ` Peter Zijlstra
2015-06-10  9:07         ` Peter Zijlstra
2015-06-10  9:07         ` Peter Zijlstra
2015-06-10 14:07         ` Steven Rostedt
2015-06-10 14:07           ` Steven Rostedt
2015-06-11  4:28           ` Jiri Kosina
2015-06-11  4:28             ` Jiri Kosina
2015-06-11  4:28             ` Jiri Kosina
2015-06-05 15:01 ` [RFC PATCH 10/18] jffs2: Remove forward definition of jffs2_garbage_collect_thread() Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 11/18] jffs2: Convert jffs2_gcd_mtd kthread into the iterant API Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-06 21:16   ` Oleg Nesterov
2015-06-06 21:16     ` Oleg Nesterov
2015-06-06 21:16     ` Oleg Nesterov
2015-06-06 21:32     ` Jiri Kosina
2015-06-06 21:32       ` Jiri Kosina
2015-06-06 21:32       ` Jiri Kosina
2015-06-06 22:30       ` Oleg Nesterov
2015-06-06 22:30         ` Oleg Nesterov
2015-06-06 22:30         ` Oleg Nesterov
2015-06-06 22:44         ` Jiri Kosina
2015-06-06 22:44           ` Jiri Kosina
2015-06-06 22:44           ` Jiri Kosina
2015-06-06 22:58           ` Oleg Nesterov
2015-06-06 22:58             ` Oleg Nesterov
2015-06-06 22:58             ` Oleg Nesterov
2015-06-05 15:01 ` [RFC PATCH 12/18] lockd: Convert the central lockd service to kthread_iterant API Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` Petr Mladek [this message]
2015-06-05 15:01   ` [RFC PATCH 13/18] ring_buffer: Use iterant kthreads API in the ring buffer benchmark Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 14/18] ring_buffer: Allow to cleanly freeze the ring buffer benchmark kthreads Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 15/18] ring_buffer: Allow to exit the ring buffer benchmark immediately Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-08 17:44   ` Steven Rostedt
2015-06-08 17:44     ` Steven Rostedt
2015-06-08 17:44     ` Steven Rostedt
2015-06-15 15:23     ` Petr Mladek
2015-06-15 15:23       ` Petr Mladek
2015-06-15 15:23       ` Petr Mladek
2015-06-15 15:23       ` Petr Mladek
2015-06-15 15:33       ` Steven Rostedt
2015-06-15 15:33         ` Steven Rostedt
2015-06-15 15:33         ` Steven Rostedt
2015-06-15 15:54         ` Petr Mladek
2015-06-15 15:54           ` Petr Mladek
2015-06-15 15:54           ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 16/18] kthread: Support interruptible sleep with a timeout by iterant kthreads Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 17/18] ring_buffer: Use the new API for a sleep with a timeout in the benchmark Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 15:01 ` [RFC PATCH 18/18] jffs2: Use the new API for a sleep with a timeout Petr Mladek
2015-06-05 15:01   ` Petr Mladek
2015-06-05 16:22 ` [RFC PATCH 00/18] kthreads/signal: Safer kthread API and signal handling Peter Zijlstra
2015-06-05 16:22   ` Peter Zijlstra
2015-06-09  6:14   ` Tejun Heo
2015-06-09  6:14     ` Tejun Heo
2015-06-09  6:14     ` Tejun Heo
2015-06-10 10:40     ` Peter Zijlstra
2015-06-10 10:40       ` Peter Zijlstra
2015-06-10 10:40       ` Peter Zijlstra
2015-06-11 22:02       ` Tejun Heo
2015-06-11 22:02         ` Tejun Heo
2015-06-11 22:02         ` Tejun Heo
2015-06-09  6:10 ` Tejun Heo
2015-06-09  6:10   ` Tejun Heo
2015-06-09  6:10   ` Tejun Heo
2015-06-09  7:58   ` Tejun Heo
2015-06-09  7:58     ` Tejun Heo
2015-06-09  7:58     ` Tejun Heo
2015-06-17 11:34 ` Christoph Hellwig
2015-06-17 11:34   ` Christoph Hellwig
2015-06-17 11:34   ` Christoph Hellwig

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=1433516477-5153-14-git-send-email-pmladek@suse.cz \
    --to=pmladek@suse.cz \
    --cc=akpm@linux-foundation.org \
    --cc=anna.schumaker@netapp.com \
    --cc=bp@suse.de \
    --cc=clm@fb.com \
    --cc=dwmw2@infradead.org \
    --cc=jkosina@suse.cz \
    --cc=linux-api@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=live-patching@vger.kernel.org \
    --cc=mhocko@suse.cz \
    --cc=mingo@redhat.com \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=richard@nod.at \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=trond.myklebust@primarydata.com \
    /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.