* [PATCH] IMSM: Add warning message when x8-type device is used
@ 2016-10-21 9:37 Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Do not update metadata if not able to migrate Pawel Baldysiak
` (3 more replies)
0 siblings, 4 replies; 9+ messages in thread
From: Pawel Baldysiak @ 2016-10-21 9:37 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid, Pawel Baldysiak
This patch adds the warning message when x8-type device
is used with IMSM metadata. x8 device is a special
NVMe drive - two of them on a single PCIe card.
This card could be a single point of failure for
RAID levels different than RAID0. x8 devices have
serial number ending with "-A/-B" or "-1/-2".
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
---
super-intel.c | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/super-intel.c b/super-intel.c
index 5c6ab05..e860e75 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -5139,9 +5139,51 @@ static int add_to_super_imsm(struct supertype *st, mdu_disk_info_t *dk,
rv = imsm_read_serial(fd, devname, dd->serial);
if (rv) {
pr_err("failed to retrieve scsi serial, aborting\n");
+ if (dd->devname)
+ free(dd->devname);
free(dd);
abort();
}
+ if (super->hba && ((super->hba->type == SYS_DEV_NVME) ||
+ (super->hba->type == SYS_DEV_VMD))) {
+ int i;
+ char *devpath = diskfd_to_devpath(fd);
+ char controller_path[PATH_MAX];
+
+ if (!devpath) {
+ pr_err("failed to get devpath, aborting\n");
+ if (dd->devname)
+ free(dd->devname);
+ free(dd);
+ return 1;
+ }
+
+ snprintf(controller_path, PATH_MAX-1, "%s/device", devpath);
+ free(devpath);
+
+ if (devpath_to_vendor(controller_path) == 0x8086) {
+ /*
+ * If Intel's NVMe drive has serial ended with
+ * "-A","-B","-1" or "-2" it means that this is "x8"
+ * device (double drive on single PCIe card).
+ * User should be warned about potential data loss.
+ */
+ for (i = MAX_RAID_SERIAL_LEN-1; i > 0; i--) {
+ /* Skip empty character at the end */
+ if (dd->serial[i] == 0)
+ continue;
+
+ if (((dd->serial[i] == 'A') || (dd->serial[i] == 'B') ||
+ (dd->serial[i] == '1') || (dd->serial[i] == '2')) &&
+ (dd->serial[i-1] == '-'))
+ pr_err("\tThe action you are about to take may put your data at risk.\n"
+ "\tPlease note that x8 devices may consist of two separate x4 devices "
+ "located on a single PCIe port.\n"
+ "\tRAID 0 is the only supported configuration for this type of x8 device.\n");
+ break;
+ }
+ }
+ }
get_dev_size(fd, NULL, &size);
/* clear migr_rec when adding disk to container */
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] IMSM: Do not update metadata if not able to migrate
2016-10-21 9:37 [PATCH] IMSM: Add warning message when x8-type device is used Pawel Baldysiak
@ 2016-10-21 9:37 ` Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Enable spanning between VMD domains Pawel Baldysiak
` (2 subsequent siblings)
3 siblings, 0 replies; 9+ messages in thread
From: Pawel Baldysiak @ 2016-10-21 9:37 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid, Pawel Baldysiak
This patch prevents mdadm from updating metadata if migration is
not possible. The same check is done in analyse_change(),
but in that place - metadata is already modified.
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
---
super-intel.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/super-intel.c b/super-intel.c
index 6fc9cb1..5c6ab05 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -10067,6 +10067,11 @@ enum imsm_reshape_type imsm_analyze_change(struct supertype *st,
pr_err("Error. Chunk size change for RAID 10 is not supported.\n");
change = -1;
goto analyse_change_exit;
+ } else if (info.component_size % (geo->chunksize/512)) {
+ pr_err("New chunk size (%dK) does not evenly divide device size (%lluk). Aborting...\n",
+ geo->chunksize/1024, info.component_size/2);
+ change = -1;
+ goto analyse_change_exit;
}
change = CH_MIGRATION;
} else {
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] IMSM: Enable spanning between VMD domains
2016-10-21 9:37 [PATCH] IMSM: Add warning message when x8-type device is used Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Do not update metadata if not able to migrate Pawel Baldysiak
@ 2016-10-21 9:37 ` Pawel Baldysiak
2016-10-26 16:03 ` Jes Sorensen
2016-10-21 9:37 ` [PATCH] Lib.c: Fix geting devname for devices with long path Pawel Baldysiak
2016-10-21 12:47 ` [PATCH] IMSM: Add warning message when x8-type device is used Jes Sorensen
3 siblings, 1 reply; 9+ messages in thread
From: Pawel Baldysiak @ 2016-10-21 9:37 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid, Pawel Baldysiak
Each VMD domain adds additional PCI domain. This patch
enables RAID creation with NVMe drives from different
VMD domains.
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
---
super-intel.c | 19 +++----------------
1 file changed, 3 insertions(+), 16 deletions(-)
diff --git a/super-intel.c b/super-intel.c
index f52e3d4..6fc9cb1 100644
--- a/super-intel.c
+++ b/super-intel.c
@@ -567,10 +567,6 @@ static int attach_hba_to_super(struct intel_super *super, struct sys_dev *device
if (device->type != hba->type)
return 2;
- /* Always forbid spanning between VMD domains (seen as different controllers by mdadm) */
- if (device->type == SYS_DEV_VMD && !path_attached_to_hba(device->path, hba->path))
- return 2;
-
/* Multiple same type HBAs can be used if they share the same OROM */
const struct imsm_orom *device_orom = get_orom_by_device_id(device->dev_id);
@@ -2023,10 +2019,10 @@ static int detail_platform_imsm(int verbose, int enumerate_only, char *controlle
for (entry = orom_entries; entry; entry = entry->next) {
if (entry->type == SYS_DEV_VMD) {
+ print_imsm_capability(&entry->orom);
for (hba = list; hba; hba = hba->next) {
if (hba->type == SYS_DEV_VMD) {
char buf[PATH_MAX];
- print_imsm_capability(&entry->orom);
printf(" I/O Controller : %s (%s)\n",
vmd_domain_to_controller(hba, buf), get_sys_dev_type(hba->type));
if (print_vmd_attached_devs(hba)) {
@@ -2034,9 +2030,9 @@ static int detail_platform_imsm(int verbose, int enumerate_only, char *controlle
pr_err("failed to get devices attached to VMD domain.\n");
result |= 2;
}
- printf("\n");
}
}
+ printf("\n");
continue;
}
@@ -5999,14 +5995,6 @@ count_volumes(struct intel_hba *hba, int dpa, int verbose)
else
return 0;
- /* VMD has one orom entry for all domain, but spanning is not allowed.
- * VMD arrays should be counted per domain (controller), so skip
- * domains that are not the given one.
- */
- if (hba->type == SYS_DEV_VMD &&
- (strncmp(device->path, hba->path, strlen(device->path)) != 0))
- continue;
-
devlist = get_devices(hba_path);
/* if no intel devices return zero volumes */
if (devlist == NULL)
@@ -9268,8 +9256,7 @@ int validate_container_imsm(struct mdinfo *info)
return 1;
}
- if (orom != orom2 ||
- (hba->type == SYS_DEV_VMD && hba != hba2)) {
+ if (orom != orom2) {
pr_err("WARNING - IMSM container assembled with disks under different HBAs!\n"
" This operation is not supported and can lead to data loss.\n");
return 1;
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH] Lib.c: Fix geting devname for devices with long path
2016-10-21 9:37 [PATCH] IMSM: Add warning message when x8-type device is used Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Do not update metadata if not able to migrate Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Enable spanning between VMD domains Pawel Baldysiak
@ 2016-10-21 9:37 ` Pawel Baldysiak
2016-10-26 16:03 ` Jes Sorensen
2016-10-21 12:47 ` [PATCH] IMSM: Add warning message when x8-type device is used Jes Sorensen
3 siblings, 1 reply; 9+ messages in thread
From: Pawel Baldysiak @ 2016-10-21 9:37 UTC (permalink / raw)
To: jes.sorensen; +Cc: linux-raid, Pawel Baldysiak
In scenario where VMD is enabled, and "x8" type of NVMe drive is
plugged into PCIe switch - the path will be longer than 200 chars
(additional VMD domain + 2 level of PCIe switches).
This patch makes the buffer big enough to handle this kind of
configurations.
Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
---
lib.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib.c b/lib.c
index 057ee52..b640634 100644
--- a/lib.c
+++ b/lib.c
@@ -64,7 +64,7 @@ int get_mdp_major(void)
char *devid2kname(int devid)
{
char path[30];
- char link[200];
+ char link[PATH_MAX];
static char devnm[32];
char *cp;
int n;
--
2.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] IMSM: Add warning message when x8-type device is used
2016-10-21 9:37 [PATCH] IMSM: Add warning message when x8-type device is used Pawel Baldysiak
` (2 preceding siblings ...)
2016-10-21 9:37 ` [PATCH] Lib.c: Fix geting devname for devices with long path Pawel Baldysiak
@ 2016-10-21 12:47 ` Jes Sorensen
2016-10-21 14:17 ` Baldysiak, Pawel
3 siblings, 1 reply; 9+ messages in thread
From: Jes Sorensen @ 2016-10-21 12:47 UTC (permalink / raw)
To: Pawel Baldysiak; +Cc: linux-raid
Pawel Baldysiak <pawel.baldysiak@intel.com> writes:
> This patch adds the warning message when x8-type device
> is used with IMSM metadata. x8 device is a special
> NVMe drive - two of them on a single PCIe card.
> This card could be a single point of failure for
> RAID levels different than RAID0. x8 devices have
> serial number ending with "-A/-B" or "-1/-2".
>
> Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
> ---
> super-intel.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 42 insertions(+)
Hi Pawel,
When posting a multi-patch series, it would be helpful to have it sent
with appropriate headers staging the set is X/Y patches and a cover
letter.
I normally use -n --cover-letter
> diff --git a/super-intel.c b/super-intel.c
> index 5c6ab05..e860e75 100644
> --- a/super-intel.c
> +++ b/super-intel.c
> @@ -5139,9 +5139,51 @@ static int add_to_super_imsm(struct supertype *st, mdu_disk_info_t *dk,
> rv = imsm_read_serial(fd, devname, dd->serial);
> if (rv) {
> pr_err("failed to retrieve scsi serial, aborting\n");
> + if (dd->devname)
> + free(dd->devname);
> free(dd);
> abort();
> }
> + if (super->hba && ((super->hba->type == SYS_DEV_NVME) ||
> + (super->hba->type == SYS_DEV_VMD))) {
> + int i;
> + char *devpath = diskfd_to_devpath(fd);
> + char controller_path[PATH_MAX];
> +
> + if (!devpath) {
> + pr_err("failed to get devpath, aborting\n");
> + if (dd->devname)
> + free(dd->devname);
> + free(dd);
> + return 1;
> + }
> +
> + snprintf(controller_path, PATH_MAX-1, "%s/device", devpath);
> + free(devpath);
> +
> + if (devpath_to_vendor(controller_path) == 0x8086) {
> + /*
> + * If Intel's NVMe drive has serial ended with
> + * "-A","-B","-1" or "-2" it means that this is "x8"
> + * device (double drive on single PCIe card).
> + * User should be warned about potential data loss.
> + */
> + for (i = MAX_RAID_SERIAL_LEN-1; i > 0; i--) {
> + /* Skip empty character at the end */
> + if (dd->serial[i] == 0)
> + continue;
> +
> + if (((dd->serial[i] == 'A') || (dd->serial[i] == 'B') ||
> + (dd->serial[i] == '1') || (dd->serial[i] == '2')) &&
> + (dd->serial[i-1] == '-'))
Minor nit here - please keep this within 80 characters.
Thanks,
Jes
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] IMSM: Add warning message when x8-type device is used
2016-10-21 12:47 ` [PATCH] IMSM: Add warning message when x8-type device is used Jes Sorensen
@ 2016-10-21 14:17 ` Baldysiak, Pawel
2016-10-21 14:22 ` Jes Sorensen
0 siblings, 1 reply; 9+ messages in thread
From: Baldysiak, Pawel @ 2016-10-21 14:17 UTC (permalink / raw)
To: Jes.Sorensen; +Cc: linux-raid
On Fri, 2016-10-21 at 08:47 -0400, Jes Sorensen wrote:
> Pawel Baldysiak <pawel.baldysiak@intel.com> writes:
> > This patch adds the warning message when x8-type device
> > is used with IMSM metadata. x8 device is a special
> > NVMe drive - two of them on a single PCIe card.
> > This card could be a single point of failure for
> > RAID levels different than RAID0. x8 devices have
> > serial number ending with "-A/-B" or "-1/-2".
> >
> > Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> > Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
> > ---
> > super-intel.c | 42 ++++++++++++++++++++++++++++++++++++++++++
> > 1 file changed, 42 insertions(+)
> Hi Pawel,
>
> When posting a multi-patch series, it would be helpful to have it sent
> with appropriate headers staging the set is X/Y patches and a cover
> letter.
>
> I normally use -n --cover-letter
Hi Jes,
Sorry about that. Those patches supposed to be sent separately, but I use
one git send-mail command to sent them all. Now I know that this was not
the most clever thing to do :) Please treat them as separate patches.
>
> > diff --git a/super-intel.c b/super-intel.c
> > index 5c6ab05..e860e75 100644
> > --- a/super-intel.c
> > +++ b/super-intel.c
> > @@ -5139,9 +5139,51 @@ static int add_to_super_imsm(struct supertype *st, mdu_disk_info_t *dk,
> > rv = imsm_read_serial(fd, devname, dd->serial);
> > if (rv) {
> > pr_err("failed to retrieve scsi serial, aborting\n");
> > + if (dd->devname)
> > + free(dd->devname);
> > free(dd);
> > abort();
> > }
> > + if (super->hba && ((super->hba->type == SYS_DEV_NVME) ||
> > + (super->hba->type == SYS_DEV_VMD))) {
> > + int i;
> > + char *devpath = diskfd_to_devpath(fd);
> > + char controller_path[PATH_MAX];
> > +
> > + if (!devpath) {
> > + pr_err("failed to get devpath, aborting\n");
> > + if (dd->devname)
> > + free(dd->devname);
> > + free(dd);
> > + return 1;
> > + }
> > +
> > + snprintf(controller_path, PATH_MAX-1, "%s/device", devpath);
> > + free(devpath);
> > +
> > + if (devpath_to_vendor(controller_path) == 0x8086) {
> > + /*
> > + * If Intel's NVMe drive has serial ended with
> > + * "-A","-B","-1" or "-2" it means that this is "x8"
> > + * device (double drive on single PCIe card).
> > + * User should be warned about potential data loss.
> > + */
> > + for (i = MAX_RAID_SERIAL_LEN-1; i > 0; i--) {
> > + /* Skip empty character at the end */
> > + if (dd->serial[i] == 0)
> > + continue;
> > +
> > + if (((dd->serial[i] == 'A') || (dd->serial[i] == 'B') ||
> > + (dd->serial[i] == '1') || (dd->serial[i] == '2')) &&
> > + (dd->serial[i-1] == '-'))
>
> Minor nit here - please keep this within 80 characters.
Would you like me to resend corrected version?
I saw that those lines are over 80 chars, but I kept it this way.
I think that its more readable right now, but if you prefer I can break those lines.
Thanks
Pawel
>
> Thanks,
> Jes
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] IMSM: Add warning message when x8-type device is used
2016-10-21 14:17 ` Baldysiak, Pawel
@ 2016-10-21 14:22 ` Jes Sorensen
0 siblings, 0 replies; 9+ messages in thread
From: Jes Sorensen @ 2016-10-21 14:22 UTC (permalink / raw)
To: Baldysiak, Pawel; +Cc: linux-raid
"Baldysiak, Pawel" <pawel.baldysiak@intel.com> writes:
> On Fri, 2016-10-21 at 08:47 -0400, Jes Sorensen wrote:
>> Pawel Baldysiak <pawel.baldysiak@intel.com> writes:
>> > This patch adds the warning message when x8-type device
>> > is used with IMSM metadata. x8 device is a special
>> > NVMe drive - two of them on a single PCIe card.
>> > This card could be a single point of failure for
>> > RAID levels different than RAID0. x8 devices have
>> > serial number ending with "-A/-B" or "-1/-2".
>> >
>> > Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
>> > Reviewed-by: Artur Paszkiewicz <artur.paszkiewicz@intel.com>
>> > ---
>> > super-intel.c | 42 ++++++++++++++++++++++++++++++++++++++++++
>> > 1 file changed, 42 insertions(+)
>> Hi Pawel,
>>
>> When posting a multi-patch series, it would be helpful to have it sent
>> with appropriate headers staging the set is X/Y patches and a cover
>> letter.
>>
>> I normally use -n --cover-letter
> Hi Jes,
>
> Sorry about that. Those patches supposed to be sent separately, but I use
> one git send-mail command to sent them all. Now I know that this was not
> the most clever thing to do :) Please treat them as separate patches.
Gotcha! No worries, I can do that!
Would you mind fixing up the first one as per the comment below?
Thanks,
Jes
>>
>> > diff --git a/super-intel.c b/super-intel.c
>> > index 5c6ab05..e860e75 100644
>> > --- a/super-intel.c
>> > +++ b/super-intel.c
>> > @@ -5139,9 +5139,51 @@ static int add_to_super_imsm(struct
>> > supertype *st, mdu_disk_info_t *dk,
>> > rv = imsm_read_serial(fd, devname, dd->serial);
>> > if (rv) {
>> > pr_err("failed to retrieve scsi serial, aborting\n");
>> > + if (dd->devname)
>> > + free(dd->devname);
>> > free(dd);
>> > abort();
>> > }
>> > + if (super->hba && ((super->hba->type == SYS_DEV_NVME) ||
>> > + (super->hba->type == SYS_DEV_VMD))) {
>> > + int i;
>> > + char *devpath = diskfd_to_devpath(fd);
>> > + char controller_path[PATH_MAX];
>> > +
>> > + if (!devpath) {
>> > + pr_err("failed to get devpath, aborting\n");
>> > + if (dd->devname)
>> > + free(dd->devname);
>> > + free(dd);
>> > + return 1;
>> > + }
>> > +
>> > + snprintf(controller_path, PATH_MAX-1, "%s/device", devpath);
>> > + free(devpath);
>> > +
>> > + if (devpath_to_vendor(controller_path) == 0x8086) {
>> > + /*
>> > + * If Intel's NVMe drive has serial ended with
>> > + * "-A","-B","-1" or "-2" it means that this is "x8"
>> > + * device (double drive on single PCIe card).
>> > + * User should be warned about potential data loss.
>> > + */
>> > + for (i = MAX_RAID_SERIAL_LEN-1; i > 0; i--) {
>> > + /* Skip empty character at the end */
>> > + if (dd->serial[i] == 0)
>> > + continue;
>> > +
>> > + if (((dd->serial[i] == 'A') || (dd->serial[i] == 'B') ||
>> > + (dd->serial[i] == '1') || (dd->serial[i] == '2')) &&
>> > + (dd->serial[i-1] == '-'))
>>
>> Minor nit here - please keep this within 80 characters.
>
> Would you like me to resend corrected version?
> I saw that those lines are over 80 chars, but I kept it this way.
> I think that its more readable right now, but if you prefer I can
> break those lines.
>
> Thanks
> Pawel
>>
>> Thanks,
>> Jes
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] IMSM: Enable spanning between VMD domains
2016-10-21 9:37 ` [PATCH] IMSM: Enable spanning between VMD domains Pawel Baldysiak
@ 2016-10-26 16:03 ` Jes Sorensen
0 siblings, 0 replies; 9+ messages in thread
From: Jes Sorensen @ 2016-10-26 16:03 UTC (permalink / raw)
To: Pawel Baldysiak; +Cc: linux-raid
Pawel Baldysiak <pawel.baldysiak@intel.com> writes:
> Each VMD domain adds additional PCI domain. This patch
> enables RAID creation with NVMe drives from different
> VMD domains.
>
> Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> ---
> super-intel.c | 19 +++----------------
> 1 file changed, 3 insertions(+), 16 deletions(-)
Applied!
Thanks,
Jes
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] Lib.c: Fix geting devname for devices with long path
2016-10-21 9:37 ` [PATCH] Lib.c: Fix geting devname for devices with long path Pawel Baldysiak
@ 2016-10-26 16:03 ` Jes Sorensen
0 siblings, 0 replies; 9+ messages in thread
From: Jes Sorensen @ 2016-10-26 16:03 UTC (permalink / raw)
To: Pawel Baldysiak; +Cc: linux-raid
Pawel Baldysiak <pawel.baldysiak@intel.com> writes:
> In scenario where VMD is enabled, and "x8" type of NVMe drive is
> plugged into PCIe switch - the path will be longer than 200 chars
> (additional VMD domain + 2 level of PCIe switches).
> This patch makes the buffer big enough to handle this kind of
> configurations.
>
> Signed-off-by: Pawel Baldysiak <pawel.baldysiak@intel.com>
> ---
> lib.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
Applied!
Thanks,
Jes
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2016-10-26 16:03 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-21 9:37 [PATCH] IMSM: Add warning message when x8-type device is used Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Do not update metadata if not able to migrate Pawel Baldysiak
2016-10-21 9:37 ` [PATCH] IMSM: Enable spanning between VMD domains Pawel Baldysiak
2016-10-26 16:03 ` Jes Sorensen
2016-10-21 9:37 ` [PATCH] Lib.c: Fix geting devname for devices with long path Pawel Baldysiak
2016-10-26 16:03 ` Jes Sorensen
2016-10-21 12:47 ` [PATCH] IMSM: Add warning message when x8-type device is used Jes Sorensen
2016-10-21 14:17 ` Baldysiak, Pawel
2016-10-21 14:22 ` Jes Sorensen
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.