All of lore.kernel.org
 help / color / mirror / Atom feed
From: Darrick J. Wong <djwong@kernel.org>
To: kbuild-all@lists.01.org
Subject: Re: [kbuild] [djwong-xfs:djwong-wtf 349/351] fs/xfs/xfs_bmap_util.c:1372 xfs_map_free_extent() warn: missing error code 'error'
Date: Mon, 21 Mar 2022 14:59:08 -0700	[thread overview]
Message-ID: <20220321215908.GL8241@magnolia> (raw)
In-Reply-To: <202203190831.AYu7l0vX-lkp@intel.com>

[-- Attachment #1: Type: text/plain, Size: 8181 bytes --]

On Mon, Mar 21, 2022 at 10:33:02AM +0300, Dan Carpenter wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git  djwong-wtf
> head:   baa8d54bb35559f0bc36ec9e9933bec9ab23e25f
> commit: b82670045aab66d3d66eca40f277354c3da07f1c [349/351] xfs: fallocate free space into a file
> config: openrisc-randconfig-m031-20220317 (https://download.01.org/0day-ci/archive/20220319/202203190831.AYu7l0vX-lkp(a)intel.com/config )
> compiler: or1k-linux-gcc (GCC) 11.2.0
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> 
> New smatch warnings:
> fs/xfs/xfs_bmap_util.c:1372 xfs_map_free_extent() warn: missing error code 'error'
> 
> Old smatch warnings:
> fs/xfs/xfs_buf.h:430 xfs_buftarg_zeroout() warn: bitwise AND condition is false here
> 
> vim +/error +1372 fs/xfs/xfs_bmap_util.c
> 
> b82670045aab66 Darrick J. Wong 2022-01-06  1341  /* Find a free extent in this AG and map it into the file. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1342  STATIC int
> b82670045aab66 Darrick J. Wong 2022-01-06  1343  xfs_map_free_extent(
> b82670045aab66 Darrick J. Wong 2022-01-06  1344  	struct xfs_inode	*ip,
> b82670045aab66 Darrick J. Wong 2022-01-06  1345  	struct xfs_perag	*pag,
> b82670045aab66 Darrick J. Wong 2022-01-06  1346  	xfs_agblock_t		*cursor,
> b82670045aab66 Darrick J. Wong 2022-01-06  1347  	xfs_agblock_t		end_agbno,
> b82670045aab66 Darrick J. Wong 2022-01-06  1348  	xfs_agblock_t		*last_enospc_agbno)
> b82670045aab66 Darrick J. Wong 2022-01-06  1349  {
> b82670045aab66 Darrick J. Wong 2022-01-06  1350  	struct xfs_bmbt_irec	irec;
> b82670045aab66 Darrick J. Wong 2022-01-06  1351  	struct xfs_mount	*mp = ip->i_mount;
> b82670045aab66 Darrick J. Wong 2022-01-06  1352  	struct xfs_trans	*tp;
> b82670045aab66 Darrick J. Wong 2022-01-06  1353  	xfs_off_t		endpos;
> b82670045aab66 Darrick J. Wong 2022-01-06  1354  	xfs_fsblock_t		fsbno;
> b82670045aab66 Darrick J. Wong 2022-01-06  1355  	xfs_extlen_t		len;
> b82670045aab66 Darrick J. Wong 2022-01-06  1356  	int			error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1357  
> b82670045aab66 Darrick J. Wong 2022-01-06  1358  	if (fatal_signal_pending(current))
> b82670045aab66 Darrick J. Wong 2022-01-06  1359  		return -EINTR;
> b82670045aab66 Darrick J. Wong 2022-01-06  1360  
> b82670045aab66 Darrick J. Wong 2022-01-06  1361  	error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, 0, 0, false,
> b82670045aab66 Darrick J. Wong 2022-01-06  1362  			&tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1363  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1364  		return error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1365  
> b82670045aab66 Darrick J. Wong 2022-01-06  1366  	error = xfs_alloc_find_freesp(tp, pag, cursor, end_agbno, &len);
> b82670045aab66 Darrick J. Wong 2022-01-06  1367  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1368  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1369  
> b82670045aab66 Darrick J. Wong 2022-01-06  1370  	/* Bail out if the cursor is beyond what we asked for. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1371  	if (*cursor >= end_agbno)
> b82670045aab66 Darrick J. Wong 2022-01-06 @1372  		goto out_cancel;
> 
> This looks like it should have an error = -EINVAL;

Nope.  If xfs_alloc_find_freesp moves @cursor goes beyond end_agbno, we
want to exit early so that the xfs_map_free_extent caller will return to
userspace.

--D

> 
> b82670045aab66 Darrick J. Wong 2022-01-06  1373  
> b82670045aab66 Darrick J. Wong 2022-01-06  1374  	error = xfs_map_free_reserve_more(tp, ip, &len);
> b82670045aab66 Darrick J. Wong 2022-01-06  1375  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1376  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1377  
> b82670045aab66 Darrick J. Wong 2022-01-06  1378  	fsbno = XFS_AGB_TO_FSB(mp, pag->pag_agno, *cursor);
> b82670045aab66 Darrick J. Wong 2022-01-06  1379  	do {
> b82670045aab66 Darrick J. Wong 2022-01-06  1380  		error = xfs_bmapi_freesp(tp, ip, fsbno, len, &irec);
> b82670045aab66 Darrick J. Wong 2022-01-06  1381  		if (error == -EAGAIN) {
> b82670045aab66 Darrick J. Wong 2022-01-06  1382  			/* Failed to map space but were told to try again. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1383  			error = xfs_trans_commit(tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1384  			goto out;
> b82670045aab66 Darrick J. Wong 2022-01-06  1385  		}
> b82670045aab66 Darrick J. Wong 2022-01-06  1386  		if (error != -ENOSPC)
> b82670045aab66 Darrick J. Wong 2022-01-06  1387  			break;
> b82670045aab66 Darrick J. Wong 2022-01-06  1388  		/*
> b82670045aab66 Darrick J. Wong 2022-01-06  1389  		 * If we can't get the space, try asking for successively less
> b82670045aab66 Darrick J. Wong 2022-01-06  1390  		 * space in case we're bumping up against per-AG metadata
> b82670045aab66 Darrick J. Wong 2022-01-06  1391  		 * reservation limits...
> b82670045aab66 Darrick J. Wong 2022-01-06  1392  		 */
> b82670045aab66 Darrick J. Wong 2022-01-06  1393  		len >>= 1;
> b82670045aab66 Darrick J. Wong 2022-01-06  1394  	} while (len > 0);
> b82670045aab66 Darrick J. Wong 2022-01-06  1395  	if (error == -ENOSPC && *last_enospc_agbno != *cursor) {
> b82670045aab66 Darrick J. Wong 2022-01-06  1396  		/*
> b82670045aab66 Darrick J. Wong 2022-01-06  1397  		 * ...but even that might not work if an AGFL fixup allocated
> b82670045aab66 Darrick J. Wong 2022-01-06  1398  		 * the block at *cursor.  The first time this happens, remember
> b82670045aab66 Darrick J. Wong 2022-01-06  1399  		 * that we ran out of space here, and try again.
> b82670045aab66 Darrick J. Wong 2022-01-06  1400  		 */
> b82670045aab66 Darrick J. Wong 2022-01-06  1401  		*last_enospc_agbno = *cursor;
> b82670045aab66 Darrick J. Wong 2022-01-06  1402  		error = 0;
> b82670045aab66 Darrick J. Wong 2022-01-06  1403  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1404  	}
> b82670045aab66 Darrick J. Wong 2022-01-06  1405  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1406  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1407  
> b82670045aab66 Darrick J. Wong 2022-01-06  1408  	/* Update isize if needed. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1409  	endpos = XFS_FSB_TO_B(mp, irec.br_startoff + irec.br_blockcount);
> b82670045aab66 Darrick J. Wong 2022-01-06  1410  	if (endpos > i_size_read(VFS_I(ip))) {
> b82670045aab66 Darrick J. Wong 2022-01-06  1411  		i_size_write(VFS_I(ip), endpos);
> b82670045aab66 Darrick J. Wong 2022-01-06  1412  		ip->i_disk_size = endpos;
> b82670045aab66 Darrick J. Wong 2022-01-06  1413  		xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
> b82670045aab66 Darrick J. Wong 2022-01-06  1414  	}
> b82670045aab66 Darrick J. Wong 2022-01-06  1415  
> b82670045aab66 Darrick J. Wong 2022-01-06  1416  	error = xfs_trans_commit(tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1417  	xfs_iunlock(ip, XFS_ILOCK_EXCL);
> b82670045aab66 Darrick J. Wong 2022-01-06  1418  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1419  		return error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1420  
> b82670045aab66 Darrick J. Wong 2022-01-06  1421  	*cursor += irec.br_blockcount;
> b82670045aab66 Darrick J. Wong 2022-01-06  1422  	return 0;
> b82670045aab66 Darrick J. Wong 2022-01-06  1423  out_cancel:
> b82670045aab66 Darrick J. Wong 2022-01-06  1424  	xfs_trans_cancel(tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1425  out:
> b82670045aab66 Darrick J. Wong 2022-01-06  1426  	xfs_iunlock(ip, XFS_ILOCK_EXCL);
> b82670045aab66 Darrick J. Wong 2022-01-06  1427  	return error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1428  }
> 
> ---
> 0-DAY CI Kernel Test Service
> https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org 
> _______________________________________________
> kbuild mailing list -- kbuild(a)lists.01.org
> To unsubscribe send an email to kbuild-leave(a)lists.01.org
> 

WARNING: multiple messages have this Message-ID (diff)
From: "Darrick J. Wong" <djwong@kernel.org>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: kbuild@lists.01.org, lkp@intel.com, kbuild-all@lists.01.org,
	"Darrick J. Wong" <darrick.wong@oracle.com>,
	linux-kernel@vger.kernel.org
Subject: Re: [kbuild] [djwong-xfs:djwong-wtf 349/351] fs/xfs/xfs_bmap_util.c:1372 xfs_map_free_extent() warn: missing error code 'error'
Date: Mon, 21 Mar 2022 14:59:08 -0700	[thread overview]
Message-ID: <20220321215908.GL8241@magnolia> (raw)
In-Reply-To: <202203190831.AYu7l0vX-lkp@intel.com>

On Mon, Mar 21, 2022 at 10:33:02AM +0300, Dan Carpenter wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/djwong/xfs-linux.git  djwong-wtf
> head:   baa8d54bb35559f0bc36ec9e9933bec9ab23e25f
> commit: b82670045aab66d3d66eca40f277354c3da07f1c [349/351] xfs: fallocate free space into a file
> config: openrisc-randconfig-m031-20220317 (https://download.01.org/0day-ci/archive/20220319/202203190831.AYu7l0vX-lkp@intel.com/config )
> compiler: or1k-linux-gcc (GCC) 11.2.0
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
> 
> New smatch warnings:
> fs/xfs/xfs_bmap_util.c:1372 xfs_map_free_extent() warn: missing error code 'error'
> 
> Old smatch warnings:
> fs/xfs/xfs_buf.h:430 xfs_buftarg_zeroout() warn: bitwise AND condition is false here
> 
> vim +/error +1372 fs/xfs/xfs_bmap_util.c
> 
> b82670045aab66 Darrick J. Wong 2022-01-06  1341  /* Find a free extent in this AG and map it into the file. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1342  STATIC int
> b82670045aab66 Darrick J. Wong 2022-01-06  1343  xfs_map_free_extent(
> b82670045aab66 Darrick J. Wong 2022-01-06  1344  	struct xfs_inode	*ip,
> b82670045aab66 Darrick J. Wong 2022-01-06  1345  	struct xfs_perag	*pag,
> b82670045aab66 Darrick J. Wong 2022-01-06  1346  	xfs_agblock_t		*cursor,
> b82670045aab66 Darrick J. Wong 2022-01-06  1347  	xfs_agblock_t		end_agbno,
> b82670045aab66 Darrick J. Wong 2022-01-06  1348  	xfs_agblock_t		*last_enospc_agbno)
> b82670045aab66 Darrick J. Wong 2022-01-06  1349  {
> b82670045aab66 Darrick J. Wong 2022-01-06  1350  	struct xfs_bmbt_irec	irec;
> b82670045aab66 Darrick J. Wong 2022-01-06  1351  	struct xfs_mount	*mp = ip->i_mount;
> b82670045aab66 Darrick J. Wong 2022-01-06  1352  	struct xfs_trans	*tp;
> b82670045aab66 Darrick J. Wong 2022-01-06  1353  	xfs_off_t		endpos;
> b82670045aab66 Darrick J. Wong 2022-01-06  1354  	xfs_fsblock_t		fsbno;
> b82670045aab66 Darrick J. Wong 2022-01-06  1355  	xfs_extlen_t		len;
> b82670045aab66 Darrick J. Wong 2022-01-06  1356  	int			error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1357  
> b82670045aab66 Darrick J. Wong 2022-01-06  1358  	if (fatal_signal_pending(current))
> b82670045aab66 Darrick J. Wong 2022-01-06  1359  		return -EINTR;
> b82670045aab66 Darrick J. Wong 2022-01-06  1360  
> b82670045aab66 Darrick J. Wong 2022-01-06  1361  	error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, 0, 0, false,
> b82670045aab66 Darrick J. Wong 2022-01-06  1362  			&tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1363  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1364  		return error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1365  
> b82670045aab66 Darrick J. Wong 2022-01-06  1366  	error = xfs_alloc_find_freesp(tp, pag, cursor, end_agbno, &len);
> b82670045aab66 Darrick J. Wong 2022-01-06  1367  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1368  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1369  
> b82670045aab66 Darrick J. Wong 2022-01-06  1370  	/* Bail out if the cursor is beyond what we asked for. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1371  	if (*cursor >= end_agbno)
> b82670045aab66 Darrick J. Wong 2022-01-06 @1372  		goto out_cancel;
> 
> This looks like it should have an error = -EINVAL;

Nope.  If xfs_alloc_find_freesp moves @cursor goes beyond end_agbno, we
want to exit early so that the xfs_map_free_extent caller will return to
userspace.

--D

> 
> b82670045aab66 Darrick J. Wong 2022-01-06  1373  
> b82670045aab66 Darrick J. Wong 2022-01-06  1374  	error = xfs_map_free_reserve_more(tp, ip, &len);
> b82670045aab66 Darrick J. Wong 2022-01-06  1375  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1376  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1377  
> b82670045aab66 Darrick J. Wong 2022-01-06  1378  	fsbno = XFS_AGB_TO_FSB(mp, pag->pag_agno, *cursor);
> b82670045aab66 Darrick J. Wong 2022-01-06  1379  	do {
> b82670045aab66 Darrick J. Wong 2022-01-06  1380  		error = xfs_bmapi_freesp(tp, ip, fsbno, len, &irec);
> b82670045aab66 Darrick J. Wong 2022-01-06  1381  		if (error == -EAGAIN) {
> b82670045aab66 Darrick J. Wong 2022-01-06  1382  			/* Failed to map space but were told to try again. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1383  			error = xfs_trans_commit(tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1384  			goto out;
> b82670045aab66 Darrick J. Wong 2022-01-06  1385  		}
> b82670045aab66 Darrick J. Wong 2022-01-06  1386  		if (error != -ENOSPC)
> b82670045aab66 Darrick J. Wong 2022-01-06  1387  			break;
> b82670045aab66 Darrick J. Wong 2022-01-06  1388  		/*
> b82670045aab66 Darrick J. Wong 2022-01-06  1389  		 * If we can't get the space, try asking for successively less
> b82670045aab66 Darrick J. Wong 2022-01-06  1390  		 * space in case we're bumping up against per-AG metadata
> b82670045aab66 Darrick J. Wong 2022-01-06  1391  		 * reservation limits...
> b82670045aab66 Darrick J. Wong 2022-01-06  1392  		 */
> b82670045aab66 Darrick J. Wong 2022-01-06  1393  		len >>= 1;
> b82670045aab66 Darrick J. Wong 2022-01-06  1394  	} while (len > 0);
> b82670045aab66 Darrick J. Wong 2022-01-06  1395  	if (error == -ENOSPC && *last_enospc_agbno != *cursor) {
> b82670045aab66 Darrick J. Wong 2022-01-06  1396  		/*
> b82670045aab66 Darrick J. Wong 2022-01-06  1397  		 * ...but even that might not work if an AGFL fixup allocated
> b82670045aab66 Darrick J. Wong 2022-01-06  1398  		 * the block at *cursor.  The first time this happens, remember
> b82670045aab66 Darrick J. Wong 2022-01-06  1399  		 * that we ran out of space here, and try again.
> b82670045aab66 Darrick J. Wong 2022-01-06  1400  		 */
> b82670045aab66 Darrick J. Wong 2022-01-06  1401  		*last_enospc_agbno = *cursor;
> b82670045aab66 Darrick J. Wong 2022-01-06  1402  		error = 0;
> b82670045aab66 Darrick J. Wong 2022-01-06  1403  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1404  	}
> b82670045aab66 Darrick J. Wong 2022-01-06  1405  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1406  		goto out_cancel;
> b82670045aab66 Darrick J. Wong 2022-01-06  1407  
> b82670045aab66 Darrick J. Wong 2022-01-06  1408  	/* Update isize if needed. */
> b82670045aab66 Darrick J. Wong 2022-01-06  1409  	endpos = XFS_FSB_TO_B(mp, irec.br_startoff + irec.br_blockcount);
> b82670045aab66 Darrick J. Wong 2022-01-06  1410  	if (endpos > i_size_read(VFS_I(ip))) {
> b82670045aab66 Darrick J. Wong 2022-01-06  1411  		i_size_write(VFS_I(ip), endpos);
> b82670045aab66 Darrick J. Wong 2022-01-06  1412  		ip->i_disk_size = endpos;
> b82670045aab66 Darrick J. Wong 2022-01-06  1413  		xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE);
> b82670045aab66 Darrick J. Wong 2022-01-06  1414  	}
> b82670045aab66 Darrick J. Wong 2022-01-06  1415  
> b82670045aab66 Darrick J. Wong 2022-01-06  1416  	error = xfs_trans_commit(tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1417  	xfs_iunlock(ip, XFS_ILOCK_EXCL);
> b82670045aab66 Darrick J. Wong 2022-01-06  1418  	if (error)
> b82670045aab66 Darrick J. Wong 2022-01-06  1419  		return error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1420  
> b82670045aab66 Darrick J. Wong 2022-01-06  1421  	*cursor += irec.br_blockcount;
> b82670045aab66 Darrick J. Wong 2022-01-06  1422  	return 0;
> b82670045aab66 Darrick J. Wong 2022-01-06  1423  out_cancel:
> b82670045aab66 Darrick J. Wong 2022-01-06  1424  	xfs_trans_cancel(tp);
> b82670045aab66 Darrick J. Wong 2022-01-06  1425  out:
> b82670045aab66 Darrick J. Wong 2022-01-06  1426  	xfs_iunlock(ip, XFS_ILOCK_EXCL);
> b82670045aab66 Darrick J. Wong 2022-01-06  1427  	return error;
> b82670045aab66 Darrick J. Wong 2022-01-06  1428  }
> 
> ---
> 0-DAY CI Kernel Test Service
> https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org 
> _______________________________________________
> kbuild mailing list -- kbuild@lists.01.org
> To unsubscribe send an email to kbuild-leave@lists.01.org
> 

  reply	other threads:[~2022-03-21 21:59 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-19  0:44 [djwong-xfs:djwong-wtf 349/351] fs/xfs/xfs_bmap_util.c:1372 xfs_map_free_extent() warn: missing error code 'error' kernel test robot
2022-03-21  7:33 ` [kbuild] " Dan Carpenter
2022-03-21  7:33 ` Dan Carpenter
2022-03-21 21:59 ` Darrick J. Wong [this message]
2022-03-21 21:59   ` Darrick J. Wong
2022-03-22  5:47   ` Dan Carpenter
2022-03-22  5:47     ` [kbuild] " Dan Carpenter
2022-03-22  5:47     ` Dan Carpenter
2022-03-22 16:38     ` Darrick J. Wong
2022-03-22 16:38       ` Darrick J. Wong
2022-03-24 10:45       ` Dan Carpenter
2022-03-24 10:45         ` Dan Carpenter
2022-03-24 10:45         ` Dan Carpenter

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=20220321215908.GL8241@magnolia \
    --to=djwong@kernel.org \
    --cc=kbuild-all@lists.01.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.