All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: rjw-KKrjLPT3xs0@public.gmane.org,
	oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org
Cc: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: [PATCH 4/7] cgroup_freezer: don't stall transition to FROZEN for PF_NOFREEZE or PF_FREEZER_SKIP tasks
Date: Tue, 16 Oct 2012 15:28:43 -0700	[thread overview]
Message-ID: <1350426526-14254-5-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1350426526-14254-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

cgroup_freezer doesn't transition from FREEZING to FROZEN if the
cgroup contains PF_NOFREEZE tasks or tasks sleeping with
PF_FREEZER_SKIP set.

Only kernel tasks can be non-freezable (PF_NOFREEZE) and there's
nothing cgroup_freezer or userland can do about or to it.  It's
pointless to stall the transition for PF_NOFREEZE tasks.

PF_FREEZER_SKIP indicates that the task can be skipped when
determining whether frozen state is reached.  A task with
PF_FREEZER_SKIP is guaranteed to perform try_to_freeze() after it
wakes up and can be considered frozen much like stopped or traced
tasks.  Note that a vfork parent uses PF_FREEZER_SKIP while waiting
for the child.

This updates update_if_frozen() such that it only considers freezable
tasks and treats %true freezer_should_skip() tasks as frozen.

This allows cgroups w/ kthreads and vfork parents successfully reach
FROZEN state.

Signed-off-by: Tejun Heo <tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
Cc: Oleg Nesterov <oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Rafael J. Wysocki <rjw-KKrjLPT3xs0@public.gmane.org>
---
 kernel/cgroup_freezer.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
index 05d5218..557f367 100644
--- a/kernel/cgroup_freezer.c
+++ b/kernel/cgroup_freezer.c
@@ -214,10 +214,18 @@ static void update_if_frozen(struct cgroup *cgroup,
 
 	cgroup_iter_start(cgroup, &it);
 	while ((task = cgroup_iter_next(cgroup, &it))) {
-		ntotal++;
-		if (freezing(task) && (frozen(task) ||
-				       task_is_stopped_or_traced(task)))
-			nfrozen++;
+		if (freezing(task)) {
+			ntotal++;
+			/*
+			 * freezer_should_skip() indicates that the task
+			 * should be skipped when determining freezing
+			 * completion.  Consider it frozen in addition to
+			 * the usual frozen condition.
+			 */
+			if (frozen(task) || task_is_stopped_or_traced(task) ||
+			    freezer_should_skip(task))
+				nfrozen++;
+		}
 	}
 
 	if (old_state == CGROUP_THAWED) {
-- 
1.7.7.3

WARNING: multiple messages have this Message-ID (diff)
From: Tejun Heo <tj@kernel.org>
To: rjw@sisk.pl, oleg@redhat.com
Cc: linux-kernel@vger.kernel.org, lizefan@huawei.com,
	containers@lists.linux-foundation.org, cgroups@vger.kernel.org,
	Tejun Heo <tj@kernel.org>
Subject: [PATCH 4/7] cgroup_freezer: don't stall transition to FROZEN for PF_NOFREEZE or PF_FREEZER_SKIP tasks
Date: Tue, 16 Oct 2012 15:28:43 -0700	[thread overview]
Message-ID: <1350426526-14254-5-git-send-email-tj@kernel.org> (raw)
In-Reply-To: <1350426526-14254-1-git-send-email-tj@kernel.org>

cgroup_freezer doesn't transition from FREEZING to FROZEN if the
cgroup contains PF_NOFREEZE tasks or tasks sleeping with
PF_FREEZER_SKIP set.

Only kernel tasks can be non-freezable (PF_NOFREEZE) and there's
nothing cgroup_freezer or userland can do about or to it.  It's
pointless to stall the transition for PF_NOFREEZE tasks.

PF_FREEZER_SKIP indicates that the task can be skipped when
determining whether frozen state is reached.  A task with
PF_FREEZER_SKIP is guaranteed to perform try_to_freeze() after it
wakes up and can be considered frozen much like stopped or traced
tasks.  Note that a vfork parent uses PF_FREEZER_SKIP while waiting
for the child.

This updates update_if_frozen() such that it only considers freezable
tasks and treats %true freezer_should_skip() tasks as frozen.

This allows cgroups w/ kthreads and vfork parents successfully reach
FROZEN state.

Signed-off-by: Tejun Heo <tj@kernel.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
---
 kernel/cgroup_freezer.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/kernel/cgroup_freezer.c b/kernel/cgroup_freezer.c
index 05d5218..557f367 100644
--- a/kernel/cgroup_freezer.c
+++ b/kernel/cgroup_freezer.c
@@ -214,10 +214,18 @@ static void update_if_frozen(struct cgroup *cgroup,
 
 	cgroup_iter_start(cgroup, &it);
 	while ((task = cgroup_iter_next(cgroup, &it))) {
-		ntotal++;
-		if (freezing(task) && (frozen(task) ||
-				       task_is_stopped_or_traced(task)))
-			nfrozen++;
+		if (freezing(task)) {
+			ntotal++;
+			/*
+			 * freezer_should_skip() indicates that the task
+			 * should be skipped when determining freezing
+			 * completion.  Consider it frozen in addition to
+			 * the usual frozen condition.
+			 */
+			if (frozen(task) || task_is_stopped_or_traced(task) ||
+			    freezer_should_skip(task))
+				nfrozen++;
+		}
 	}
 
 	if (old_state == CGROUP_THAWED) {
-- 
1.7.7.3


  parent reply	other threads:[~2012-10-16 22:28 UTC|newest]

Thread overview: 148+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-16 22:28 [PATCHSET cgroup/for-3.8] cgroup_freezer: allow migration regardless of freezer state and update locking Tejun Heo
2012-10-16 22:28 ` Tejun Heo
2012-10-16 22:28 ` [PATCH 5/7] cgroup_freezer: allow moving tasks in and out of a frozen cgroup Tejun Heo
     [not found]   ` <1350426526-14254-6-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-22 19:25     ` Oleg Nesterov
2012-10-22 19:25     ` Oleg Nesterov
2012-10-22 19:25       ` Oleg Nesterov
     [not found]       ` <20121022192506.GA27163-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-22 21:25         ` Tejun Heo
2012-10-22 21:25           ` Tejun Heo
     [not found]           ` <20121022212505.GG5951-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-23 16:14             ` Oleg Nesterov
2012-10-23 16:14             ` Oleg Nesterov
2012-10-23 16:14               ` Oleg Nesterov
2012-10-22 21:25         ` Tejun Heo
     [not found] ` <1350426526-14254-1-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-16 22:28   ` [PATCH 1/7] cgroup: cgroup_subsys->fork() should be called after the task is added to css_set Tejun Heo
2012-10-16 22:28     ` Tejun Heo
     [not found]     ` <1350426526-14254-2-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-17  8:28       ` Li Zefan
2012-10-17  8:28         ` Li Zefan
     [not found]         ` <507E6C4B.6000704-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2012-10-18  1:25           ` Li Zefan
2012-10-18  1:25           ` Li Zefan
2012-10-18  1:25             ` Li Zefan
2012-10-21 19:11       ` Oleg Nesterov
2012-10-21 19:11         ` Oleg Nesterov
     [not found]         ` <20121021191141.GA26218-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-21 19:22           ` Tejun Heo
2012-10-21 19:22             ` Tejun Heo
     [not found]             ` <20121021192222.GB5951-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-22 18:04               ` Oleg Nesterov
2012-10-22 18:04                 ` Oleg Nesterov
     [not found]                 ` <20121022180445.GB21553-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-22 21:16                   ` Tejun Heo
2012-10-22 21:16                     ` Tejun Heo
     [not found]                     ` <20121022211631.GE5951-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-23 15:51                       ` Oleg Nesterov
2012-10-23 15:51                         ` Oleg Nesterov
     [not found]                         ` <20121023155128.GB16201-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-24 19:04                           ` Tejun Heo
2012-10-24 19:04                             ` Tejun Heo
     [not found]                             ` <20121024190458.GB12182-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-25 17:42                               ` Oleg Nesterov
2012-10-25 17:42                                 ` Oleg Nesterov
2012-10-21 19:22           ` Tejun Heo
2012-12-20  5:25       ` Herton Ronaldo Krzesinski
2012-12-20  5:25         ` Herton Ronaldo Krzesinski
2012-12-28 21:22         ` [PATCH] cgroup: remove unused dummy cgroup_fork_callbacks() Tejun Heo
2012-12-28 21:22           ` Tejun Heo
2012-10-16 22:28   ` [PATCH 2/7] freezer: add missing mb's to freezer_count() and freezer_should_skip() Tejun Heo
2012-10-16 22:28     ` Tejun Heo
     [not found]     ` <1350426526-14254-3-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-22 17:44       ` Oleg Nesterov
2012-10-22 17:44         ` Oleg Nesterov
     [not found]         ` <20121022174404.GA21553-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-22 21:13           ` Tejun Heo
2012-10-22 21:13             ` Tejun Heo
     [not found]             ` <20121022211317.GD5951-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-23 15:39               ` Oleg Nesterov
2012-10-23 15:39                 ` Oleg Nesterov
     [not found]                 ` <20121023153919.GA16201-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-24 18:57                   ` Tejun Heo
2012-10-24 18:57                   ` Tejun Heo
2012-10-24 18:57                     ` Tejun Heo
     [not found]                     ` <20121024185710.GA12182-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-25 16:39                       ` [PATCH 0/1] (Was: freezer: add missing mb's to freezer_count() and freezer_should_skip()) Oleg Nesterov
2012-10-25 16:39                         ` Oleg Nesterov
     [not found]                         ` <20121025163941.GA3801-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-25 16:39                           ` [PATCH 1/1] freezer: change ptrace_stop/do_signal_stop to use freezable_schedule() Oleg Nesterov
2012-10-25 16:39                             ` Oleg Nesterov
     [not found]                             ` <20121025163959.GB3801-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-25 17:18                               ` Tejun Heo
2012-10-25 17:18                               ` Tejun Heo
2012-10-25 17:18                                 ` Tejun Heo
     [not found]                                 ` <20121025171812.GE11442-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-10-25 17:34                                   ` Oleg Nesterov
2012-10-25 17:34                                     ` Oleg Nesterov
     [not found]                                     ` <20121025173433.GA7650-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-25 17:36                                       ` Tejun Heo
2012-10-25 17:36                                         ` Tejun Heo
     [not found]                                         ` <20121025173632.GI11442-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-10-26 17:45                                           ` [PATCH v2 0/1] " Oleg Nesterov
2012-10-26 17:45                                             ` Oleg Nesterov
     [not found]                                             ` <20121026174545.GA21639-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-26 17:46                                               ` [PATCH v2 1/1] " Oleg Nesterov
2012-10-26 17:46                                                 ` Oleg Nesterov
     [not found]                                                 ` <20121026174606.GB21639-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-26 17:52                                                   ` Tejun Heo
2012-10-26 17:52                                                     ` Tejun Heo
     [not found]                                                     ` <20121026175258.GV11442-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-10-26 18:01                                                       ` Oleg Nesterov
2012-10-26 18:01                                                       ` Oleg Nesterov
2012-10-26 18:01                                                         ` Oleg Nesterov
     [not found]                                                         ` <20121026180149.GA22421-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-26 21:14                                                           ` Rafael J. Wysocki
2012-10-26 21:14                                                           ` Rafael J. Wysocki
2012-10-26 21:14                                                             ` Rafael J. Wysocki
     [not found]                                                             ` <2566006.UzAQbpOjNQ-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2012-10-26 21:29                                                               ` Rafael J. Wysocki
2012-10-26 21:29                                                                 ` Rafael J. Wysocki
     [not found]                                                                 ` <2718983.vORnrfWdbE-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2012-10-26 21:29                                                                   ` Tejun Heo
2012-10-26 21:29                                                                   ` Tejun Heo
2012-10-26 21:29                                                                     ` Tejun Heo
     [not found]                                                                     ` <20121026212909.GW11442-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-10-28  0:16                                                                       ` Rafael J. Wysocki
2012-10-28  0:16                                                                         ` Rafael J. Wysocki
2012-10-28  0:16                                                                       ` Rafael J. Wysocki
2012-10-27 22:22                                                   ` Ben Hutchings
2012-10-27 22:22                                                   ` Ben Hutchings
2012-10-27 22:22                                                     ` Ben Hutchings
     [not found]                                                     ` <1351376558.21585.1.camel-nDn/Rdv9kqW9Jme8/bJn5UCKIB8iOfG2tUK59QYPAWc@public.gmane.org>
2012-10-28 13:45                                                       ` Oleg Nesterov
2012-10-28 13:45                                                         ` Oleg Nesterov
2012-10-25 17:34                                   ` [PATCH " Oleg Nesterov
2012-10-16 22:28   ` [PATCH 3/7] cgroup_freezer: make it official that writes to freezer.state don't fail Tejun Heo
2012-10-16 22:28     ` Tejun Heo
2012-10-16 22:28   ` Tejun Heo [this message]
2012-10-16 22:28     ` [PATCH 4/7] cgroup_freezer: don't stall transition to FROZEN for PF_NOFREEZE or PF_FREEZER_SKIP tasks Tejun Heo
     [not found]     ` <1350426526-14254-5-git-send-email-tj-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2012-10-22 18:34       ` Oleg Nesterov
2012-10-22 18:34         ` Oleg Nesterov
     [not found]         ` <20121022183453.GA24687-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-22 21:18           ` Tejun Heo
2012-10-22 21:18             ` Tejun Heo
     [not found]             ` <20121022211822.GF5951-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-23 15:55               ` Oleg Nesterov
2012-10-23 15:55                 ` Oleg Nesterov
     [not found]                 ` <20121023155533.GC16201-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-24 19:06                   ` Tejun Heo
2012-10-24 19:06                     ` Tejun Heo
     [not found]                     ` <20121024190651.GC12182-OlzNCW9NnSVy/B6EtB590w@public.gmane.org>
2012-10-25 17:12                       ` [PATCH 0/1] (Was: cgroup_freezer: don't stall transition to FROZEN for PF_NOFREEZE or PF_FREEZER_SKIP tasks) Oleg Nesterov
2012-10-25 17:12                         ` Oleg Nesterov
     [not found]                         ` <20121025171236.GA6776-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-25 17:12                           ` [PATCH 1/1] freezer: exec should clear PF_NOFREEZE along with PF_KTHREAD Oleg Nesterov
2012-10-25 17:12                             ` Oleg Nesterov
     [not found]                             ` <20121025171256.GB6776-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-25 17:20                               ` Tejun Heo
2012-10-25 17:20                               ` Tejun Heo
2012-10-25 17:20                                 ` Tejun Heo
     [not found]                                 ` <20121025172016.GF11442-Gd/HAXX7CRxy/B6EtB590w@public.gmane.org>
2012-10-25 17:37                                   ` Oleg Nesterov
2012-10-25 17:37                                     ` Oleg Nesterov
     [not found]                                     ` <20121025173756.GB7650-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-25 17:37                                       ` Tejun Heo
2012-10-25 17:37                                         ` Tejun Heo
2012-10-25 20:13                                         ` Rafael J. Wysocki
     [not found]                                         ` <CAOS58YPAVVr=itauGD9eTpfRLSBLuM8Bpyuq9AP73MDr8dPmiQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2012-10-25 20:13                                           ` Rafael J. Wysocki
2012-10-23 15:55               ` [PATCH 4/7] cgroup_freezer: don't stall transition to FROZEN for PF_NOFREEZE or PF_FREEZER_SKIP tasks Oleg Nesterov
2012-10-22 18:34       ` Oleg Nesterov
2012-10-16 22:28   ` [PATCH 5/7] cgroup_freezer: allow moving tasks in and out of a frozen cgroup Tejun Heo
2012-10-16 22:28   ` [PATCH 6/7] cgroup_freezer: prepare update_if_frozen() for locking change Tejun Heo
2012-10-16 22:28     ` Tejun Heo
2012-10-16 22:28   ` [PATCH 7/7] cgroup_freezer: don't use cgroup_lock_live_group() Tejun Heo
2012-10-16 22:28     ` Tejun Heo
2012-10-17 19:16   ` [PATCHSET cgroup/for-3.8] cgroup_freezer: allow migration regardless of freezer state and update locking Matt Helsley
2012-10-17 19:16     ` Matt Helsley
     [not found]     ` <20121017191606.GA6223-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2012-10-18 21:14       ` Tejun Heo
2012-10-18 21:14         ` Tejun Heo
     [not found]         ` <20121018211434.GI13370-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-10-18 22:21           ` Matt Helsley
2012-10-18 22:21             ` Matt Helsley
     [not found]             ` <20121018222155.GB6223-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2012-10-18 22:35               ` Tejun Heo
2012-10-18 22:35                 ` Tejun Heo
     [not found]                 ` <20121018223517.GQ13370-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-10-18 23:47                   ` Matt Helsley
2012-10-18 23:47                     ` Matt Helsley
     [not found]                     ` <20121018234726.GC6223-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2012-10-19  0:01                       ` Tejun Heo
2012-10-19  0:01                         ` Tejun Heo
     [not found]                         ` <20121019000153.GZ13370-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-10-19  1:29                           ` Matt Helsley
2012-10-19  1:29                           ` Matt Helsley
2012-10-19  1:29                             ` Matt Helsley
     [not found]                             ` <20121019012945.GD6223-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2012-10-19 20:02                               ` Tejun Heo
2012-10-19 20:02                                 ` Tejun Heo
2012-10-19 20:02                               ` Tejun Heo
2012-10-19  0:01                       ` Tejun Heo
2012-10-18 21:14       ` Tejun Heo
2012-10-19 16:54   ` Rafael J. Wysocki
2012-10-19 16:54   ` Rafael J. Wysocki
2012-10-19 16:54     ` Rafael J. Wysocki
     [not found]     ` <2424755.Pg0O5tTD3k-sKB8Sp2ER+y1GS7QM15AGw@public.gmane.org>
2012-10-19 20:04       ` Tejun Heo
2012-10-19 20:04         ` Tejun Heo
     [not found]         ` <20121019200421.GO13370-hpIqsD4AKlfQT0dZR+AlfA@public.gmane.org>
2012-10-21 19:18           ` Oleg Nesterov
2012-10-21 19:18             ` Oleg Nesterov
     [not found]             ` <20121021191853.GB26218-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-10-21 19:24               ` Tejun Heo
2012-10-21 19:24                 ` Tejun Heo
2012-10-19 20:04       ` Tejun Heo

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=1350426526-14254-5-git-send-email-tj@kernel.org \
    --to=tj-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=cgroups-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=oleg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=rjw-KKrjLPT3xs0@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.