From: Miguel Ojeda <ojeda@kernel.org>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sasha Levin <sashal@kernel.org>,
stable@vger.kernel.org
Cc: Danilo Krummrich <dakr@kernel.org>,
Alice Ryhl <aliceryhl@google.com>, Alyssa Ross <hi@alyssa.is>,
NoisyCoil <noisycoil@disroot.org>,
patches@lists.linux.dev, Miguel Ojeda <ojeda@kernel.org>
Subject: [PATCH 6.12.y 14/60] rust: enable Clippy's `check-private-items`
Date: Fri, 7 Mar 2025 23:49:21 +0100 [thread overview]
Message-ID: <20250307225008.779961-15-ojeda@kernel.org> (raw)
In-Reply-To: <20250307225008.779961-1-ojeda@kernel.org>
commit 624063b9ac97f40cadca32a896aafeb28b1220fd upstream.
In Rust 1.76.0, Clippy added the `check-private-items` lint configuration
option. When turned on (the default is off), it makes several lints
check private items as well.
In our case, it affects two lints we have enabled [1]:
`missing_safety_doc` and `unnecessary_safety_doc`.
It also seems to affect the new `too_long_first_doc_paragraph` lint [2],
even though the documentation does not mention it.
Thus allow the few instances remaining we currently hit and enable
the lint.
Link: https://doc.rust-lang.org/nightly/clippy/lint_configuration.html#check-private-items [1]
Link: https://rust-lang.github.io/rust-clippy/master/index.html#/too_long_first_doc_paragraph [2]
Reviewed-by: Trevor Gross <tmgross@umich.edu>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Tested-by: Gary Guo <gary@garyguo.net>
Reviewed-by: Gary Guo <gary@garyguo.net>
Link: https://lore.kernel.org/r/20240904204347.168520-16-ojeda@kernel.org
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
---
.clippy.toml | 2 ++
rust/kernel/init.rs | 1 +
rust/kernel/init/__internal.rs | 2 ++
rust/kernel/init/macros.rs | 1 +
rust/kernel/print.rs | 1 +
5 files changed, 7 insertions(+)
diff --git a/.clippy.toml b/.clippy.toml
index ad9f804fb677..e4c4eef10b28 100644
--- a/.clippy.toml
+++ b/.clippy.toml
@@ -1,5 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
+check-private-items = true
+
disallowed-macros = [
# The `clippy::dbg_macro` lint only works with `std::dbg!`, thus we simulate
# it here, see: https://github.com/rust-lang/rust-clippy/issues/11303.
diff --git a/rust/kernel/init.rs b/rust/kernel/init.rs
index 0330a8756fa5..fdbf0857ba20 100644
--- a/rust/kernel/init.rs
+++ b/rust/kernel/init.rs
@@ -125,6 +125,7 @@
//! use core::{ptr::addr_of_mut, marker::PhantomPinned, pin::Pin};
//! # mod bindings {
//! # #![allow(non_camel_case_types)]
+//! # #![allow(clippy::missing_safety_doc)]
//! # pub struct foo;
//! # pub unsafe fn init_foo(_ptr: *mut foo) {}
//! # pub unsafe fn destroy_foo(_ptr: *mut foo) {}
diff --git a/rust/kernel/init/__internal.rs b/rust/kernel/init/__internal.rs
index 163eb072f296..549ae227c2ea 100644
--- a/rust/kernel/init/__internal.rs
+++ b/rust/kernel/init/__internal.rs
@@ -54,6 +54,7 @@ unsafe fn __pinned_init(self, slot: *mut T) -> Result<(), E> {
pub unsafe trait HasPinData {
type PinData: PinData;
+ #[allow(clippy::missing_safety_doc)]
unsafe fn __pin_data() -> Self::PinData;
}
@@ -83,6 +84,7 @@ fn make_closure<F, O, E>(self, f: F) -> F
pub unsafe trait HasInitData {
type InitData: InitData;
+ #[allow(clippy::missing_safety_doc)]
unsafe fn __init_data() -> Self::InitData;
}
diff --git a/rust/kernel/init/macros.rs b/rust/kernel/init/macros.rs
index 736fe0ce0cd9..193d39886b1f 100644
--- a/rust/kernel/init/macros.rs
+++ b/rust/kernel/init/macros.rs
@@ -989,6 +989,7 @@ fn drop(&mut self) {
//
// The functions are `unsafe` to prevent accidentally calling them.
#[allow(dead_code)]
+ #[allow(clippy::missing_safety_doc)]
impl<$($impl_generics)*> $pin_data<$($ty_generics)*>
where $($whr)*
{
diff --git a/rust/kernel/print.rs b/rust/kernel/print.rs
index fe53fc469c4f..45af17095a24 100644
--- a/rust/kernel/print.rs
+++ b/rust/kernel/print.rs
@@ -14,6 +14,7 @@
use crate::str::RawFormatter;
// Called from `vsprintf` with format specifier `%pA`.
+#[allow(clippy::missing_safety_doc)]
#[no_mangle]
unsafe extern "C" fn rust_fmt_argument(
buf: *mut c_char,
--
2.48.1
next prev parent reply other threads:[~2025-03-07 22:51 UTC|newest]
Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-07 22:49 [PATCH 6.12.y 00/60] `alloc`, `#[expect]` and "Custom FFI" Miguel Ojeda
2025-03-07 22:49 ` [PATCH 6.12.y 01/60] rust: workqueue: remove unneeded ``#[allow(clippy::new_ret_no_self)]` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: workqueue: remove unneeded ``#[allow(clippy::new_ret_no_self)]`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 02/60] rust: sort global Rust flags Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: sort global Rust flags" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 03/60] rust: types: avoid repetition in `{As,From}Bytes` impls Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: types: avoid repetition in `{As,From}Bytes` impls" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 04/60] rust: enable `clippy::undocumented_unsafe_blocks` lint Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: enable `clippy::undocumented_unsafe_blocks` lint" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 05/60] rust: enable `clippy::unnecessary_safety_comment` lint Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: enable `clippy::unnecessary_safety_comment` lint" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 06/60] rust: enable `clippy::unnecessary_safety_doc` lint Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: enable `clippy::unnecessary_safety_doc` lint" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 07/60] rust: enable `clippy::ignored_unit_patterns` lint Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: enable `clippy::ignored_unit_patterns` lint" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 08/60] rust: enable `rustdoc::unescaped_backticks` lint Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: enable `rustdoc::unescaped_backticks` lint" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 09/60] rust: init: remove unneeded `#[allow(clippy::disallowed_names)]` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: init: remove unneeded `#[allow(clippy::disallowed_names)]`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 10/60] rust: sync: remove unneeded `#[allow(clippy::non_send_fields_in_send_ty)]` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: sync: remove unneeded `#[allow(clippy::non_send_fields_in_send_ty)]`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 11/60] rust: introduce `.clippy.toml` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: introduce `.clippy.toml`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 12/60] rust: replace `clippy::dbg_macro` with `disallowed_macros` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: replace `clippy::dbg_macro` with `disallowed_macros`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 13/60] rust: provide proper code documentation titles Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: provide proper code documentation titles" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` Miguel Ojeda [this message]
2025-03-09 9:46 ` Patch "rust: enable Clippy's `check-private-items`" " gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 15/60] Documentation: rust: add coding guidelines on lints Miguel Ojeda
2025-03-09 9:46 ` Patch "Documentation: rust: add coding guidelines on lints" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 16/60] rust: start using the `#[expect(...)]` attribute Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: start using the `#[expect(...)]` attribute" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 17/60] Documentation: rust: discuss `#[expect(...)]` in the guidelines Miguel Ojeda
2025-03-09 9:46 ` Patch "Documentation: rust: discuss `#[expect(...)]` in the guidelines" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 18/60] rust: error: make conversion functions public Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: error: make conversion functions public" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 19/60] rust: error: optimize error type to use nonzero Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: error: optimize error type to use nonzero" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 20/60] rust: alloc: add `Allocator` trait Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: add `Allocator` trait" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 21/60] rust: alloc: separate `aligned_size` from `krealloc_aligned` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: separate `aligned_size` from `krealloc_aligned`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 22/60] rust: alloc: rename `KernelAllocator` to `Kmalloc` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: rename `KernelAllocator` to `Kmalloc`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 23/60] rust: alloc: implement `ReallocFunc` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `ReallocFunc`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 24/60] rust: alloc: make `allocator` module public Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: make `allocator` module public" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 25/60] rust: alloc: implement `Allocator` for `Kmalloc` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `Allocator` for `Kmalloc`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 26/60] rust: alloc: add module `allocator_test` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: add module `allocator_test`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 27/60] rust: alloc: implement `Vmalloc` allocator Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `Vmalloc` allocator" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 28/60] rust: alloc: implement `KVmalloc` allocator Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `KVmalloc` allocator" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 29/60] rust: alloc: add __GFP_NOWARN to `Flags` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: add __GFP_NOWARN to `Flags`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 30/60] rust: alloc: implement kernel `Box` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement kernel `Box`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 31/60] rust: treewide: switch to our kernel `Box` type Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: treewide: switch to our kernel `Box` type" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 32/60] rust: alloc: remove extension of std's `Box` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: remove extension of std's `Box`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 33/60] rust: alloc: add `Box` to prelude Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: add `Box` to prelude" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 34/60] rust: alloc: introduce `ArrayLayout` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: introduce `ArrayLayout`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 35/60] rust: alloc: implement kernel `Vec` type Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement kernel `Vec` type" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 36/60] rust: alloc: implement `IntoIterator` for `Vec` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `IntoIterator` for `Vec`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 37/60] rust: alloc: implement `collect` for `IntoIter` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `collect` for `IntoIter`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 38/60] rust: treewide: switch to the kernel `Vec` type Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: treewide: switch to the kernel `Vec` type" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 39/60] rust: alloc: remove `VecExt` extension Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: remove `VecExt` extension" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 40/60] rust: alloc: add `Vec` to prelude Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: add `Vec` to prelude" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 41/60] rust: error: use `core::alloc::LayoutError` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: error: use `core::alloc::LayoutError`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 42/60] rust: error: check for config `test` in `Error::name` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: error: check for config `test` in `Error::name`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 43/60] rust: alloc: implement `contains` for `Flags` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `contains` for `Flags`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 44/60] rust: alloc: implement `Cmalloc` in module allocator_test Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: implement `Cmalloc` in module allocator_test" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 45/60] rust: str: test: replace `alloc::format` Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: str: test: replace `alloc::format`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 46/60] rust: alloc: update module comment of alloc.rs Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: update module comment of alloc.rs" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 47/60] kbuild: rust: remove the `alloc` crate and `GlobalAlloc` Miguel Ojeda
2025-03-09 9:46 ` Patch "kbuild: rust: remove the `alloc` crate and `GlobalAlloc`" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 48/60] MAINTAINERS: add entry for the Rust `alloc` module Miguel Ojeda
2025-03-09 9:46 ` Patch "MAINTAINERS: add entry for the Rust `alloc` module" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 49/60] drm/panic: avoid reimplementing Iterator::find Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: avoid reimplementing Iterator::find" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 50/60] drm/panic: remove unnecessary borrow in alignment_pattern Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: remove unnecessary borrow in alignment_pattern" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 51/60] drm/panic: prefer eliding lifetimes Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: prefer eliding lifetimes" has been added to the 6.12-stable tree gregkh
2025-03-07 22:49 ` [PATCH 6.12.y 52/60] drm/panic: remove redundant field when assigning value Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: remove redundant field when assigning value" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 53/60] drm/panic: correctly indent continuation of line in list item Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: correctly indent continuation of line in list item" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 54/60] drm/panic: allow verbose boolean for clarity Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: allow verbose boolean for clarity" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 55/60] drm/panic: allow verbose version check Miguel Ojeda
2025-03-09 9:46 ` Patch "drm/panic: allow verbose version check" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 56/60] rust: kbuild: expand rusttest target for macros Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: kbuild: expand rusttest target for macros" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 57/60] rust: fix size_t in bindgen prototypes of C builtins Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: fix size_t in bindgen prototypes of C builtins" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 58/60] rust: map `__kernel_size_t` and friends also to usize/isize Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: map `__kernel_size_t` and friends also to usize/isize" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 59/60] rust: use custom FFI integer types Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: use custom FFI integer types" has been added to the 6.12-stable tree gregkh
2025-03-07 22:50 ` [PATCH 6.12.y 60/60] rust: alloc: Fix `ArrayLayout` allocations Miguel Ojeda
2025-03-09 9:46 ` Patch "rust: alloc: Fix `ArrayLayout` allocations" has been added to the 6.12-stable tree gregkh
2025-03-09 9:47 ` [PATCH 6.12.y 00/60] `alloc`, `#[expect]` and "Custom FFI" Greg Kroah-Hartman
2025-03-09 12:41 ` Ilya K
2025-03-09 14:20 ` Miguel Ojeda
2025-03-09 16:27 ` Greg Kroah-Hartman
2025-03-09 20:42 ` [PATCH 6.12.y 0/2] The two missing ones Miguel Ojeda
2025-03-09 20:42 ` [PATCH 6.12.y 1/2] rust: finish using custom FFI integer types Miguel Ojeda
2025-03-09 21:02 ` Patch "rust: finish using custom FFI integer types" has been added to the 6.12-stable tree gregkh
2025-03-13 9:01 ` [PATCH 6.12.y 1/2] rust: finish using custom FFI integer types Sasha Levin
2025-03-09 20:42 ` [PATCH 6.12.y 2/2] rust: map `long` to `isize` and `char` to `u8` Miguel Ojeda
2025-03-09 21:02 ` Patch "rust: map `long` to `isize` and `char` to `u8`" has been added to the 6.12-stable tree gregkh
2025-03-13 9:01 ` [PATCH 6.12.y 2/2] rust: map `long` to `isize` and `char` to `u8` Sasha Levin
2025-03-13 10:59 ` Miguel Ojeda
2025-03-09 21:02 ` [PATCH 6.12.y 0/2] The two missing ones Greg Kroah-Hartman
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=20250307225008.779961-15-ojeda@kernel.org \
--to=ojeda@kernel.org \
--cc=aliceryhl@google.com \
--cc=dakr@kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=hi@alyssa.is \
--cc=noisycoil@disroot.org \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.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.