From: Carlos Maiolino <cmaiolino@redhat.com>
To: "Darrick J. Wong" <djwong@kernel.org>
Cc: david@fromorbit.com, sandeen@sandeen.net, linux-xfs@vger.kernel.org
Subject: Re: [PATCH v2 09/15] xfs: disambiguate units for ftrace fields tagged "len"
Date: Thu, 19 Aug 2021 14:08:01 +0200 [thread overview]
Message-ID: <20210819120801.tnvmfxt3xbkfjdte@omega.lan> (raw)
In-Reply-To: <20210819034452.GP12640@magnolia>
On Wed, Aug 18, 2021 at 08:44:52PM -0700, Darrick J. Wong wrote:
> From: Darrick J. Wong <djwong@kernel.org>
>
> Some of our tracepoints have a field known as "len". That name doesn't
> describe any units, which makes the fields not very useful. Rename the
> fields to capture units and ensure the format is hexadecimal.
>
> "fsbcount" are in units of fs blocks
> "bbcount" are in units of 512b blocks
> "ireccount" are in units of inodes
>
> Signed-off-by: Darrick J. Wong <djwong@kernel.org>
> ---
> v2: change the prefixes of the unit counts
> ---
Reviewed-by: Carlos Maiolino <cmaiolino@redhat.com>
> fs/xfs/scrub/trace.h | 8 +++---
> fs/xfs/xfs_trace.h | 66 +++++++++++++++++++++++++++-----------------------
> 2 files changed, 39 insertions(+), 35 deletions(-)
>
> diff --git a/fs/xfs/scrub/trace.h b/fs/xfs/scrub/trace.h
> index 5a57fea014f9..eb29f56dc9f1 100644
> --- a/fs/xfs/scrub/trace.h
> +++ b/fs/xfs/scrub/trace.h
> @@ -572,7 +572,7 @@ TRACE_EVENT(xchk_iallocbt_check_cluster,
> __entry->holemask = holemask;
> __entry->cluster_ino = cluster_ino;
> ),
> - TP_printk("dev %d:%d agno 0x%x startino 0x%x daddr 0x%llx len %d chunkino 0x%x nr_inodes %u cluster_mask 0x%x holemask 0x%x cluster_ino 0x%x",
> + TP_printk("dev %d:%d agno 0x%x startino 0x%x daddr 0x%llx bbcount 0x%x chunkino 0x%x nr_inodes %u cluster_mask 0x%x holemask 0x%x cluster_ino 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->startino,
> @@ -662,7 +662,7 @@ DECLARE_EVENT_CLASS(xrep_extent_class,
> __entry->agbno = agbno;
> __entry->len = len;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -699,7 +699,7 @@ DECLARE_EVENT_CLASS(xrep_rmap_class,
> __entry->offset = offset;
> __entry->flags = flags;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u owner 0x%llx fileoff 0x%llx flags 0x%x",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -737,7 +737,7 @@ TRACE_EVENT(xrep_refcount_extent_fn,
> __entry->blockcount = irec->rc_blockcount;
> __entry->refcount = irec->rc_refcount;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u refcount %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->startblock,
> diff --git a/fs/xfs/xfs_trace.h b/fs/xfs/xfs_trace.h
> index 60837ff297bc..4169dc6cb5b9 100644
> --- a/fs/xfs/xfs_trace.h
> +++ b/fs/xfs/xfs_trace.h
> @@ -1440,7 +1440,7 @@ DECLARE_EVENT_CLASS(xfs_imap_class,
> __entry->blockcount = irec ? irec->br_blockcount : 0;
> ),
> TP_printk("dev %d:%d ino 0x%llx size 0x%llx pos 0x%llx count %zd "
> - "fork %s startoff 0x%llx startblock 0x%llx blockcount 0x%llx",
> + "fork %s startoff 0x%llx startblock 0x%llx fsbcount 0x%llx",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->ino,
> __entry->size,
> @@ -1579,7 +1579,7 @@ TRACE_EVENT(xfs_bunmap,
> __entry->caller_ip = caller_ip;
> __entry->flags = flags;
> ),
> - TP_printk("dev %d:%d ino 0x%llx size 0x%llx fileoff 0x%llx len 0x%llx"
> + TP_printk("dev %d:%d ino 0x%llx size 0x%llx fileoff 0x%llx fsbcount 0x%llx"
> "flags %s caller %pS",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->ino,
> @@ -1607,7 +1607,7 @@ DECLARE_EVENT_CLASS(xfs_extent_busy_class,
> __entry->agbno = agbno;
> __entry->len = len;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -1645,7 +1645,7 @@ TRACE_EVENT(xfs_extent_busy_trim,
> __entry->tbno = tbno;
> __entry->tlen = tlen;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u found_agbno 0x%x tlen %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x found_agbno 0x%x found_fsbcount 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -1741,7 +1741,7 @@ TRACE_EVENT(xfs_free_extent,
> __entry->haveleft = haveleft;
> __entry->haveright = haveright;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u resv %d %s",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x resv %d %s",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -1876,7 +1876,7 @@ TRACE_EVENT(xfs_alloc_cur_check,
> __entry->diff = diff;
> __entry->new = new;
> ),
> - TP_printk("dev %d:%d btree %s agbno 0x%x len 0x%x diff 0x%x new %d",
> + TP_printk("dev %d:%d btree %s agbno 0x%x fsbcount 0x%x diff 0x%x new %d",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __print_symbolic(__entry->btnum, XFS_BTNUM_STRINGS),
> __entry->bno, __entry->len, __entry->diff, __entry->new)
> @@ -2277,7 +2277,7 @@ DECLARE_EVENT_CLASS(xfs_log_recover_buf_item_class,
> __entry->size = buf_f->blf_size;
> __entry->map_size = buf_f->blf_map_size;
> ),
> - TP_printk("dev %d:%d daddr 0x%llx, len %u, flags 0x%x, size %d, "
> + TP_printk("dev %d:%d daddr 0x%llx, bbcount 0x%x, flags 0x%x, size %d, "
> "map_size %d",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->blkno,
> @@ -2328,7 +2328,7 @@ DECLARE_EVENT_CLASS(xfs_log_recover_ino_item_class,
> __entry->boffset = in_f->ilf_boffset;
> ),
> TP_printk("dev %d:%d ino 0x%llx, size %u, fields 0x%x, asize %d, "
> - "dsize %d, daddr 0x%llx, len %d, boffset %d",
> + "dsize %d, daddr 0x%llx, bbcount 0x%x, boffset %d",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->ino,
> __entry->size,
> @@ -2369,10 +2369,14 @@ DECLARE_EVENT_CLASS(xfs_log_recover_icreate_item_class,
> __entry->length = be32_to_cpu(in_f->icl_length);
> __entry->gen = be32_to_cpu(in_f->icl_gen);
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x count %u isize %u length %u "
> - "gen %u", MAJOR(__entry->dev), MINOR(__entry->dev),
> - __entry->agno, __entry->agbno, __entry->count, __entry->isize,
> - __entry->length, __entry->gen)
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x ireccount 0x%x isize %u gen %u",
> + MAJOR(__entry->dev), MINOR(__entry->dev),
> + __entry->agno,
> + __entry->agbno,
> + __entry->length,
> + __entry->count,
> + __entry->isize,
> + __entry->gen)
> )
> #define DEFINE_LOG_RECOVER_ICREATE_ITEM(name) \
> DEFINE_EVENT(xfs_log_recover_icreate_item_class, name, \
> @@ -2398,7 +2402,7 @@ DECLARE_EVENT_CLASS(xfs_discard_class,
> __entry->agbno = agbno;
> __entry->len = len;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -2557,7 +2561,7 @@ DECLARE_EVENT_CLASS(xfs_phys_extent_deferred_class,
> __entry->agbno = agbno;
> __entry->len = len;
> ),
> - TP_printk("dev %d:%d op %d agno 0x%x agbno 0x%x len %u",
> + TP_printk("dev %d:%d op %d agno 0x%x agbno 0x%x fsbcount 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->type,
> __entry->agno,
> @@ -2604,7 +2608,7 @@ DECLARE_EVENT_CLASS(xfs_map_extent_deferred_class,
> __entry->l_state = state;
> __entry->op = op;
> ),
> - TP_printk("dev %d:%d op %d agno 0x%x agbno 0x%x owner 0x%llx %s fileoff 0x%llx len %llu state %d",
> + TP_printk("dev %d:%d op %d agno 0x%x agbno 0x%x owner 0x%llx %s fileoff 0x%llx fsbcount 0x%llx state %d",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->op,
> __entry->agno,
> @@ -2674,7 +2678,7 @@ DECLARE_EVENT_CLASS(xfs_rmap_class,
> if (unwritten)
> __entry->flags |= XFS_RMAP_UNWRITTEN;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u owner 0x%llx fileoff 0x%llx flags 0x%lx",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%lx",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -2754,7 +2758,7 @@ DECLARE_EVENT_CLASS(xfs_rmapbt_class,
> __entry->offset = offset;
> __entry->flags = flags;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u owner 0x%llx fileoff 0x%llx flags 0x%x",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x owner 0x%llx fileoff 0x%llx flags 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->agbno,
> @@ -2909,7 +2913,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_class,
> __entry->blockcount = irec->rc_blockcount;
> __entry->refcount = irec->rc_refcount;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u refcount %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->startblock,
> @@ -2944,7 +2948,7 @@ DECLARE_EVENT_CLASS(xfs_refcount_extent_at_class,
> __entry->refcount = irec->rc_refcount;
> __entry->agbno = agbno;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u refcount %u @ agbno 0x%x",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->startblock,
> @@ -2984,8 +2988,8 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_class,
> __entry->i2_blockcount = i2->rc_blockcount;
> __entry->i2_refcount = i2->rc_refcount;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u refcount %u -- "
> - "agbno 0x%x len %u refcount %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u -- "
> + "agbno 0x%x fsbcount 0x%x refcount %u",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->i1_startblock,
> @@ -3030,8 +3034,8 @@ DECLARE_EVENT_CLASS(xfs_refcount_double_extent_at_class,
> __entry->i2_refcount = i2->rc_refcount;
> __entry->agbno = agbno;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u refcount %u -- "
> - "agbno 0x%x len %u refcount %u @ agbno 0x%x",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u -- "
> + "agbno 0x%x fsbcount 0x%x refcount %u @ agbno 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->i1_startblock,
> @@ -3082,9 +3086,9 @@ DECLARE_EVENT_CLASS(xfs_refcount_triple_extent_class,
> __entry->i3_blockcount = i3->rc_blockcount;
> __entry->i3_refcount = i3->rc_refcount;
> ),
> - TP_printk("dev %d:%d agno 0x%x agbno 0x%x len %u refcount %u -- "
> - "agbno 0x%x len %u refcount %u -- "
> - "agbno 0x%x len %u refcount %u",
> + TP_printk("dev %d:%d agno 0x%x agbno 0x%x fsbcount 0x%x refcount %u -- "
> + "agbno 0x%x fsbcount 0x%x refcount %u -- "
> + "agbno 0x%x fsbcount 0x%x refcount %u",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->agno,
> __entry->i1_startblock,
> @@ -3171,7 +3175,7 @@ TRACE_EVENT(xfs_refcount_finish_one_leftover,
> __entry->new_agbno = new_agbno;
> __entry->new_len = new_len;
> ),
> - TP_printk("dev %d:%d type %d agno 0x%x agbno 0x%x len %u new_agbno 0x%x new_len %u",
> + TP_printk("dev %d:%d type %d agno 0x%x agbno 0x%x fsbcount 0x%x new_agbno 0x%x new_fsbcount 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->type,
> __entry->agno,
> @@ -3282,7 +3286,7 @@ DECLARE_EVENT_CLASS(xfs_inode_irec_class,
> __entry->pblk = irec->br_startblock;
> __entry->state = irec->br_state;
> ),
> - TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx len 0x%x startblock 0x%llx st %d",
> + TP_printk("dev %d:%d ino 0x%llx fileoff 0x%llx fsbcount 0x%x startblock 0x%llx st %d",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->ino,
> __entry->lblk,
> @@ -3322,7 +3326,7 @@ TRACE_EVENT(xfs_reflink_remap_blocks,
> __entry->dest_ino = dest->i_ino;
> __entry->dest_lblk = doffset;
> ),
> - TP_printk("dev %d:%d len 0x%llx "
> + TP_printk("dev %d:%d fsbcount 0x%llx "
> "ino 0x%llx fileoff 0x%llx -> ino 0x%llx fileoff 0x%llx",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> __entry->len,
> @@ -3422,7 +3426,7 @@ DECLARE_EVENT_CLASS(xfs_fsmap_class,
> __entry->offset = rmap->rm_offset;
> __entry->flags = rmap->rm_flags;
> ),
> - TP_printk("dev %d:%d keydev %d:%d agno 0x%x startblock 0x%llx len %llu owner 0x%llx fileoff 0x%llx flags 0x%x",
> + TP_printk("dev %d:%d keydev %d:%d agno 0x%x startblock 0x%llx fsbcount 0x%llx owner 0x%llx fileoff 0x%llx flags 0x%x",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> MAJOR(__entry->keydev), MINOR(__entry->keydev),
> __entry->agno,
> @@ -3462,7 +3466,7 @@ DECLARE_EVENT_CLASS(xfs_getfsmap_class,
> __entry->offset = fsmap->fmr_offset;
> __entry->flags = fsmap->fmr_flags;
> ),
> - TP_printk("dev %d:%d keydev %d:%d daddr 0x%llx len %llu owner 0x%llx fileoff_daddr 0x%llx flags 0x%llx",
> + TP_printk("dev %d:%d keydev %d:%d daddr 0x%llx bbcount 0x%llx owner 0x%llx fileoff_daddr 0x%llx flags 0x%llx",
> MAJOR(__entry->dev), MINOR(__entry->dev),
> MAJOR(__entry->keydev), MINOR(__entry->keydev),
> __entry->block,
>
--
Carlos
next prev parent reply other threads:[~2021-08-19 12:08 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-17 23:42 [PATCHSET 00/15] xfs: clean up ftrace field tags and formats Darrick J. Wong
2021-08-17 23:42 ` [PATCH 01/15] xfs: fix incorrect unit conversion in scrub tracepoint Darrick J. Wong
2021-08-19 2:29 ` Dave Chinner
2021-08-19 7:57 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 02/15] xfs: standardize inode number formatting in ftrace output Darrick J. Wong
2021-08-19 2:34 ` Dave Chinner
2021-08-19 8:27 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 03/15] xfs: standardize AG " Darrick J. Wong
2021-08-19 2:35 ` Dave Chinner
2021-08-19 8:45 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 04/15] xfs: standardize AG block " Darrick J. Wong
2021-08-19 2:37 ` Dave Chinner
2021-08-19 9:06 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 05/15] xfs: standardize rmap owner " Darrick J. Wong
2021-08-19 2:38 ` Dave Chinner
2021-08-19 9:57 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 06/15] xfs: standardize daddr " Darrick J. Wong
2021-08-19 2:42 ` Dave Chinner
2021-08-19 11:02 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 07/15] xfs: disambiguate units for ftrace fields tagged "blkno", "block", or "bno" Darrick J. Wong
2021-08-19 2:47 ` Dave Chinner
2021-08-19 11:12 ` Carlos Maiolino
2021-08-17 23:42 ` [PATCH 08/15] xfs: disambiguate units for ftrace fields tagged "offset" Darrick J. Wong
2021-08-19 2:51 ` Dave Chinner
2021-08-19 11:45 ` Carlos Maiolino
2021-08-19 11:42 ` Carlos Maiolino
2021-08-17 23:43 ` [PATCH 09/15] xfs: disambiguate units for ftrace fields tagged "len" Darrick J. Wong
2021-08-19 3:01 ` Dave Chinner
2021-08-19 3:06 ` Darrick J. Wong
2021-08-19 3:44 ` [PATCH v2 " Darrick J. Wong
2021-08-19 12:08 ` Carlos Maiolino [this message]
2021-08-17 23:43 ` [PATCH 10/15] xfs: disambiguate units for ftrace fields tagged "count" Darrick J. Wong
2021-08-19 3:11 ` Dave Chinner
2021-08-19 3:19 ` Darrick J. Wong
2021-08-19 3:45 ` [PATCH v2 " Darrick J. Wong
2021-08-19 5:38 ` Dave Chinner
2021-08-19 12:26 ` Carlos Maiolino
2021-08-17 23:43 ` [PATCH 11/15] xfs: rename i_disk_size fields in ftrace output Darrick J. Wong
2021-08-19 3:14 ` Dave Chinner
2021-08-19 12:32 ` Carlos Maiolino
2021-08-17 23:43 ` [PATCH 12/15] xfs: resolve fork names in trace output Darrick J. Wong
2021-08-19 3:16 ` Dave Chinner
2021-08-19 12:43 ` Carlos Maiolino
2021-08-17 23:43 ` [PATCH 13/15] xfs: standardize remaining xfs_buf length tracepoints Darrick J. Wong
2021-08-19 3:19 ` Dave Chinner
2021-08-19 12:48 ` Carlos Maiolino
2021-08-17 23:43 ` [PATCH 14/15] xfs: standardize inode generation formatting in ftrace output Darrick J. Wong
2021-08-19 3:19 ` Dave Chinner
2021-08-19 12:57 ` Carlos Maiolino
2021-08-17 23:43 ` [PATCH 15/15] xfs: decode scrub flags " Darrick J. Wong
2021-08-19 3:20 ` Dave Chinner
2021-08-19 13:04 ` Carlos Maiolino
2021-08-19 3:07 ` [PATCH 16/15] xfs: start documenting common units and tags used in tracepoints Darrick J. Wong
2021-08-19 3:24 ` Dave Chinner
2021-08-19 3:46 ` [PATCH v2 " Darrick J. Wong
2021-08-19 5:39 ` Dave Chinner
2021-08-19 13:27 ` Carlos Maiolino
2021-08-19 17:06 ` Darrick J. Wong
2021-08-19 17:10 ` [PATCH v3 " Darrick J. Wong
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=20210819120801.tnvmfxt3xbkfjdte@omega.lan \
--to=cmaiolino@redhat.com \
--cc=david@fromorbit.com \
--cc=djwong@kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=sandeen@sandeen.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).