* [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support
@ 2010-12-15 11:24 Or Gerlitz
[not found] ` <Pine.LNX.4.64.1012151321250.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
0 siblings, 1 reply; 9+ messages in thread
From: Or Gerlitz @ 2010-12-15 11:24 UTC (permalink / raw)
To: Roland Dreier
Cc: linux-rdma, Vladimir Sokolovsky, Eric W. Biederman, Ben Hutchings
towards moving from LRO to GRO, revert commit af40da894e9 "IPoIB: add
LRO support". Also elimiate the ethtool set_flags callback which isn't
needed anymore, and have the declaration of restart_syscall to be
imported through direct inclusion of linux/sched.h
CC: Ben Hutchings <bhutchings-s/n/eUQHGBpZroRs9YW3xA@public.gmane.org>
CC: Eric W. Biederman <ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org>
CC: Vladimir Sokolovsky <vlad-VPRAkNaXOzVS1MOuV/RT9w@public.gmane.org>
Signed-off-by: Or Gerlitz <ogerlitz-smomgflXvOZWk0Htik3J/w@public.gmane.org>
---
I took the approach of two patches, i.e first to remove LRO,
next add GRO, to ease with future debugging, bisection, etc
drivers/infiniband/ulp/ipoib/Kconfig | 1
drivers/infiniband/ulp/ipoib/ipoib.h | 12 -----
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c | 51 ----------------------
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 8 ---
drivers/infiniband/ulp/ipoib/ipoib_main.c | 62 ---------------------------
5 files changed, 2 insertions(+), 132 deletions(-)
Index: b/drivers/infiniband/ulp/ipoib/Kconfig
===================================================================
--- a/drivers/infiniband/ulp/ipoib/Kconfig
+++ b/drivers/infiniband/ulp/ipoib/Kconfig
@@ -1,7 +1,6 @@
config INFINIBAND_IPOIB
tristate "IP-over-InfiniBand"
depends on NETDEVICES && INET && (IPV6 || IPV6=n)
- select INET_LRO
---help---
Support for the IP-over-InfiniBand protocol (IPoIB). This
transports IP packets over InfiniBand so you can use your IB
Index: b/drivers/infiniband/ulp/ipoib/ipoib.h
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib.h
+++ b/drivers/infiniband/ulp/ipoib/ipoib.h
@@ -50,7 +50,7 @@
#include <rdma/ib_verbs.h>
#include <rdma/ib_pack.h>
#include <rdma/ib_sa.h>
-#include <linux/inet_lro.h>
+#include <linux/sched.h>
/* constants */
@@ -100,9 +100,6 @@ enum {
IPOIB_MCAST_FLAG_BUSY = 2, /* joining or already joined */
IPOIB_MCAST_FLAG_ATTACHED = 3,
- IPOIB_MAX_LRO_DESCRIPTORS = 8,
- IPOIB_LRO_MAX_AGGR = 64,
-
MAX_SEND_CQE = 16,
IPOIB_CM_COPYBREAK = 256,
};
@@ -262,11 +259,6 @@ struct ipoib_ethtool_st {
u16 max_coalesced_frames;
};
-struct ipoib_lro {
- struct net_lro_mgr lro_mgr;
- struct net_lro_desc lro_desc[IPOIB_MAX_LRO_DESCRIPTORS];
-};
-
/*
* Device private locking: network stack tx_lock protects members used
* in TX fast path, lock protects everything else. lock nests inside
@@ -352,8 +344,6 @@ struct ipoib_dev_priv {
int hca_caps;
struct ipoib_ethtool_st ethtool;
struct timer_list poll_timer;
-
- struct ipoib_lro lro;
};
struct ipoib_ah {
Index: b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -295,10 +295,7 @@ static void ipoib_ib_handle_rx_wc(struct
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->csum_ok))
skb->ip_summed = CHECKSUM_UNNECESSARY;
- if (dev->features & NETIF_F_LRO)
- lro_receive_skb(&priv->lro.lro_mgr, skb, NULL);
- else
- netif_receive_skb(skb);
+ netif_receive_skb(skb);
repost:
if (unlikely(ipoib_ib_post_receive(dev, wr_id)))
@@ -450,9 +447,6 @@ poll_more:
}
if (done < budget) {
- if (dev->features & NETIF_F_LRO)
- lro_flush_all(&priv->lro.lro_mgr);
-
napi_complete(napi);
if (unlikely(ib_req_notify_cq(priv->recv_cq,
IB_CQ_NEXT_COMP |
Index: b/drivers/infiniband/ulp/ipoib/ipoib_main.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -60,15 +60,6 @@ MODULE_PARM_DESC(send_queue_size, "Numbe
module_param_named(recv_queue_size, ipoib_recvq_size, int, 0444);
MODULE_PARM_DESC(recv_queue_size, "Number of descriptors in receive queue");
-static int lro;
-module_param(lro, bool, 0444);
-MODULE_PARM_DESC(lro, "Enable LRO (Large Receive Offload)");
-
-static int lro_max_aggr = IPOIB_LRO_MAX_AGGR;
-module_param(lro_max_aggr, int, 0644);
-MODULE_PARM_DESC(lro_max_aggr, "LRO: Max packets to be aggregated "
- "(default = 64)");
-
#ifdef CONFIG_INFINIBAND_IPOIB_DEBUG
int ipoib_debug_level;
@@ -976,54 +967,6 @@ static const struct header_ops ipoib_hea
.create = ipoib_hard_header,
};
-static int get_skb_hdr(struct sk_buff *skb, void **iphdr,
- void **tcph, u64 *hdr_flags, void *priv)
-{
- unsigned int ip_len;
- struct iphdr *iph;
-
- if (unlikely(skb->protocol != htons(ETH_P_IP)))
- return -1;
-
- /*
- * In the future we may add an else clause that verifies the
- * checksum and allows devices which do not calculate checksum
- * to use LRO.
- */
- if (unlikely(skb->ip_summed != CHECKSUM_UNNECESSARY))
- return -1;
-
- /* Check for non-TCP packet */
- skb_reset_network_header(skb);
- iph = ip_hdr(skb);
- if (iph->protocol != IPPROTO_TCP)
- return -1;
-
- ip_len = ip_hdrlen(skb);
- skb_set_transport_header(skb, ip_len);
- *tcph = tcp_hdr(skb);
-
- /* check if IP header and TCP header are complete */
- if (ntohs(iph->tot_len) < ip_len + tcp_hdrlen(skb))
- return -1;
-
- *hdr_flags = LRO_IPV4 | LRO_TCP;
- *iphdr = iph;
-
- return 0;
-}
-
-static void ipoib_lro_setup(struct ipoib_dev_priv *priv)
-{
- priv->lro.lro_mgr.max_aggr = lro_max_aggr;
- priv->lro.lro_mgr.max_desc = IPOIB_MAX_LRO_DESCRIPTORS;
- priv->lro.lro_mgr.lro_arr = priv->lro.lro_desc;
- priv->lro.lro_mgr.get_skb_header = get_skb_hdr;
- priv->lro.lro_mgr.features = LRO_F_NAPI;
- priv->lro.lro_mgr.dev = priv->dev;
- priv->lro.lro_mgr.ip_summed_aggr = CHECKSUM_UNNECESSARY;
-}
-
static const struct net_device_ops ipoib_netdev_ops = {
.ndo_open = ipoib_open,
.ndo_stop = ipoib_stop,
@@ -1067,8 +1010,6 @@ static void ipoib_setup(struct net_devic
priv->dev = dev;
- ipoib_lro_setup(priv);
-
spin_lock_init(&priv->lock);
mutex_init(&priv->vlan_mutex);
@@ -1218,9 +1159,6 @@ int ipoib_set_dev_features(struct ipoib_
priv->dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
}
- if (lro)
- priv->dev->features |= NETIF_F_LRO;
-
if (priv->dev->features & NETIF_F_SG && priv->hca_caps & IB_DEVICE_UD_TSO)
priv->dev->features |= NETIF_F_TSO;
Index: b/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c
@@ -106,63 +106,12 @@ static int ipoib_set_coalesce(struct net
return 0;
}
-static const char ipoib_stats_keys[][ETH_GSTRING_LEN] = {
- "LRO aggregated", "LRO flushed",
- "LRO avg aggr", "LRO no desc"
-};
-
-static void ipoib_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
-{
- switch (stringset) {
- case ETH_SS_STATS:
- memcpy(data, *ipoib_stats_keys, sizeof(ipoib_stats_keys));
- break;
- }
-}
-
-static int ipoib_get_sset_count(struct net_device *dev, int sset)
-{
- switch (sset) {
- case ETH_SS_STATS:
- return ARRAY_SIZE(ipoib_stats_keys);
- default:
- return -EOPNOTSUPP;
- }
-}
-
-static void ipoib_get_ethtool_stats(struct net_device *dev,
- struct ethtool_stats *stats, uint64_t *data)
-{
- struct ipoib_dev_priv *priv = netdev_priv(dev);
- int index = 0;
-
- /* Get LRO statistics */
- data[index++] = priv->lro.lro_mgr.stats.aggregated;
- data[index++] = priv->lro.lro_mgr.stats.flushed;
- if (priv->lro.lro_mgr.stats.flushed)
- data[index++] = priv->lro.lro_mgr.stats.aggregated /
- priv->lro.lro_mgr.stats.flushed;
- else
- data[index++] = 0;
- data[index++] = priv->lro.lro_mgr.stats.no_desc;
-}
-
-static int ipoib_set_flags(struct net_device *dev, u32 flags)
-{
- return ethtool_op_set_flags(dev, flags, ETH_FLAG_LRO);
-}
-
static const struct ethtool_ops ipoib_ethtool_ops = {
.get_drvinfo = ipoib_get_drvinfo,
.get_rx_csum = ipoib_get_rx_csum,
.set_tso = ipoib_set_tso,
.get_coalesce = ipoib_get_coalesce,
.set_coalesce = ipoib_set_coalesce,
- .get_flags = ethtool_op_get_flags,
- .set_flags = ipoib_set_flags,
- .get_strings = ipoib_get_strings,
- .get_sset_count = ipoib_get_sset_count,
- .get_ethtool_stats = ipoib_get_ethtool_stats,
};
void ipoib_set_ethtool_ops(struct net_device *dev)
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH for-2.6.38 2/2] IB/ipoib: add GRO support
[not found] ` <Pine.LNX.4.64.1012151321250.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
@ 2010-12-15 11:25 ` Or Gerlitz
[not found] ` <Pine.LNX.4.64.1012151324340.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
2010-12-15 17:42 ` [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support Roland Dreier
1 sibling, 1 reply; 9+ messages in thread
From: Or Gerlitz @ 2010-12-15 11:25 UTC (permalink / raw)
To: Roland Dreier
Cc: linux-rdma, Vladimir Sokolovsky, Eric W. Biederman, Ben Hutchings
add GRO support
Signed-off-by: Or Gerlitz <ogerlitz-smomgflXvOZWk0Htik3J/w@public.gmane.org>
---
tested with 2.6.37-rc5
drivers/infiniband/ulp/ipoib/ipoib_cm.c | 1 +
drivers/infiniband/ulp/ipoib/ipoib_ib.c | 2 +-
drivers/infiniband/ulp/ipoib/ipoib_main.c | 2 ++
3 files changed, 4 insertions(+), 1 deletion(-)
Index: b/drivers/infiniband/ulp/ipoib/ipoib_main.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1159,6 +1159,8 @@ int ipoib_set_dev_features(struct ipoib_
priv->dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
}
+ priv->dev->features |= NETIF_F_GRO;
+
if (priv->dev->features & NETIF_F_SG && priv->hca_caps & IB_DEVICE_UD_TSO)
priv->dev->features |= NETIF_F_TSO;
Index: b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_ib.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_ib.c
@@ -295,7 +295,7 @@ static void ipoib_ib_handle_rx_wc(struct
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags) && likely(wc->csum_ok))
skb->ip_summed = CHECKSUM_UNNECESSARY;
- netif_receive_skb(skb);
+ napi_gro_receive(&priv->napi, skb);
repost:
if (unlikely(ipoib_ib_post_receive(dev, wr_id)))
Index: b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
===================================================================
--- a/drivers/infiniband/ulp/ipoib/ipoib_cm.c
+++ b/drivers/infiniband/ulp/ipoib/ipoib_cm.c
@@ -1480,6 +1480,7 @@ static ssize_t set_mode(struct device *d
if (test_bit(IPOIB_FLAG_CSUM, &priv->flags)) {
dev->features |= NETIF_F_IP_CSUM | NETIF_F_SG;
+ priv->dev->features |= NETIF_F_GRO;
if (priv->hca_caps & IB_DEVICE_UD_TSO)
dev->features |= NETIF_F_TSO;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support
[not found] ` <Pine.LNX.4.64.1012151321250.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
2010-12-15 11:25 ` [PATCH for-2.6.38 2/2] IB/ipoib: add GRO support Or Gerlitz
@ 2010-12-15 17:42 ` Roland Dreier
[not found] ` <adalj3rgcfv.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
1 sibling, 1 reply; 9+ messages in thread
From: Roland Dreier @ 2010-12-15 17:42 UTC (permalink / raw)
To: Or Gerlitz
Cc: linux-rdma, Vladimir Sokolovsky, Eric W. Biederman, Ben Hutchings
Thanks for doing this Or, I've been meaning to switch from LRO to GRO
myself. One question:
> have the declaration of restart_syscall to be imported through direct
> inclusion of linux/sched.h
Is this because <linux/inet_lro.h> indirectly included <linux/sched.h>,
and we're losing that include?
- R.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support
[not found] ` <adalj3rgcfv.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
@ 2010-12-15 17:53 ` Or Gerlitz
2010-12-19 12:57 ` Or Gerlitz
1 sibling, 0 replies; 9+ messages in thread
From: Or Gerlitz @ 2010-12-15 17:53 UTC (permalink / raw)
To: Roland Dreier
Cc: Or Gerlitz, linux-rdma, Vladimir Sokolovsky, Eric W. Biederman,
Ben Hutchings
Roland Dreier <rdreier-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org> wrote:
> Is this because <linux/inet_lro.h> indirectly included <linux/sched.h>,
> and we're losing that include?
Yes, see http://www.spinics.net/lists/netdev/msg149809.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support
[not found] ` <adalj3rgcfv.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
2010-12-15 17:53 ` Or Gerlitz
@ 2010-12-19 12:57 ` Or Gerlitz
1 sibling, 0 replies; 9+ messages in thread
From: Or Gerlitz @ 2010-12-19 12:57 UTC (permalink / raw)
To: Roland Dreier; +Cc: linux-rdma
Roland Dreier wrote:
> Thanks for doing this Or, I've been meaning to switch from LRO to GRO myself.
So this goes in?
Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH for-2.6.38 2/2] IB/ipoib: add GRO support
[not found] ` <Pine.LNX.4.64.1012151324340.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
@ 2011-01-04 19:55 ` Roland Dreier
2011-01-09 6:56 ` missing from for-next? (was: IB/ipoib: add GRO support) Or Gerlitz
1 sibling, 0 replies; 9+ messages in thread
From: Roland Dreier @ 2011-01-04 19:55 UTC (permalink / raw)
To: Or Gerlitz
Cc: linux-rdma, Vladimir Sokolovsky, Eric W. Biederman, Ben Hutchings
thanks, applied both patches.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: missing from for-next? (was: IB/ipoib: add GRO support)
[not found] ` <Pine.LNX.4.64.1012151324340.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
2011-01-04 19:55 ` Roland Dreier
@ 2011-01-09 6:56 ` Or Gerlitz
[not found] ` <4D295C10.2010500-hKgKHo2Ms0FWk0Htik3J/w@public.gmane.org>
1 sibling, 1 reply; 9+ messages in thread
From: Or Gerlitz @ 2011-01-09 6:56 UTC (permalink / raw)
To: Roland Dreier; +Cc: linux-rdma
Or Gerlitz wrote:
> add GRO support
> Signed-off-by: Or Gerlitz <ogerlitz-smomgflXvOZWk0Htik3J/w@public.gmane.org>
Hi Roland, you've picked this patch few days ago, but for some reason now it (along
with the lro remove patch) seem to be absent from your for-next branch, has
anything went wrong here? I wasn't sure if the problem applies to more patches...
Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: missing from for-next?
[not found] ` <4D295C10.2010500-hKgKHo2Ms0FWk0Htik3J/w@public.gmane.org>
@ 2011-01-10 5:28 ` Roland Dreier
[not found] ` <ada8vyt9vk5.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
0 siblings, 1 reply; 9+ messages in thread
From: Roland Dreier @ 2011-01-10 5:28 UTC (permalink / raw)
To: Or Gerlitz; +Cc: linux-rdma
Sorry, just forgot to push the branch out. Should be there now.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: missing from for-next?
[not found] ` <ada8vyt9vk5.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
@ 2011-01-10 8:17 ` Or Gerlitz
0 siblings, 0 replies; 9+ messages in thread
From: Or Gerlitz @ 2011-01-10 8:17 UTC (permalink / raw)
To: Roland Dreier; +Cc: linux-rdma
Roland Dreier wrote:
> Sorry, just forgot to push the branch out. Should be there now.
yep, it's there now, thanks
Or.
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-01-10 8:17 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-12-15 11:24 [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support Or Gerlitz
[not found] ` <Pine.LNX.4.64.1012151321250.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
2010-12-15 11:25 ` [PATCH for-2.6.38 2/2] IB/ipoib: add GRO support Or Gerlitz
[not found] ` <Pine.LNX.4.64.1012151324340.24022-aDiYczhfhVLdX2U7gxhm1tBPR1lH4CV8@public.gmane.org>
2011-01-04 19:55 ` Roland Dreier
2011-01-09 6:56 ` missing from for-next? (was: IB/ipoib: add GRO support) Or Gerlitz
[not found] ` <4D295C10.2010500-hKgKHo2Ms0FWk0Htik3J/w@public.gmane.org>
2011-01-10 5:28 ` missing from for-next? Roland Dreier
[not found] ` <ada8vyt9vk5.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
2011-01-10 8:17 ` Or Gerlitz
2010-12-15 17:42 ` [PATCH for-2.6.38 1/2] IB/ipoib: remove LRO support Roland Dreier
[not found] ` <adalj3rgcfv.fsf-FYB4Gu1CFyUAvxtiuMwx3w@public.gmane.org>
2010-12-15 17:53 ` Or Gerlitz
2010-12-19 12:57 ` Or Gerlitz
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.