All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-03-14 16:01 ` Cathy Avery
  0 siblings, 0 replies; 11+ messages in thread
From: Cathy Avery @ 2017-03-14 16:01 UTC (permalink / raw)
  To: kys, hch, haiyangz, jejb, martin.petersen
  Cc: dan.carpenter, devel, linux-kernel, linux-scsi

Included in the current storvsc driver for Hyper-V is the ability
to access luns on an FC fabric via a virtualized fiber channel
adapter exposed by the Hyper-V host. The driver also attaches to the FC
transport to allow host and port names to be published under
/sys/class/fc_host/hostX. Current customer tools running on the VM
require that these names be available in the well known standard
location under fc_host/hostX.

A problem arose when attaching to the FC transport. The scsi_scan
code attempts to call fc_user_scan which has basically become a no-op
due to the fact that the virtualized FC device does not expose rports.
At this point you cannot refresh the scsi bus after mapping or unmapping
luns on the SAN without a reboot of the VM.

This patch stubs in an rport per fc_host in storvsc so that the
requirement of a defined rport is now met within the fc_transport and
echo "- - -" > /sys/class/scsi_host/hostX/scan now works.

Signed-off-by: Cathy Avery <cavery@redhat.com>
---
 drivers/scsi/storvsc_drv.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 638e5f4..c6c0316 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -478,6 +478,9 @@ struct storvsc_device {
 	 */
 	u64 node_name;
 	u64 port_name;
+#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
+	struct fc_rport *rport;
+#endif
 };
 
 struct hv_host_device {
@@ -1823,8 +1826,16 @@ static int storvsc_probe(struct hv_device *device,
 	}
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
 	if (host->transportt == fc_transport_template) {
+		struct fc_rport_identifiers ids;
+
+		ids.node_name = 0;
+		ids.port_name = 0;
+		ids.port_id = 0;
+		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
+
 		fc_host_node_name(host) = stor_device->node_name;
 		fc_host_port_name(host) = stor_device->port_name;
+		stor_device->rport = fc_remote_port_add(host, 0, &ids);
 	}
 #endif
 	return 0;
@@ -1854,8 +1865,10 @@ static int storvsc_remove(struct hv_device *dev)
 	struct Scsi_Host *host = stor_device->host;
 
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
-	if (host->transportt == fc_transport_template)
+	if (host->transportt == fc_transport_template) {
+		fc_remote_port_delete(stor_device->rport);
 		fc_remove_host(host);
+	}
 #endif
 	scsi_remove_host(host);
 	storvsc_dev_remove(dev);
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-03-14 16:01 ` Cathy Avery
  0 siblings, 0 replies; 11+ messages in thread
From: Cathy Avery @ 2017-03-14 16:01 UTC (permalink / raw)
  To: kys, hch, haiyangz, jejb, martin.petersen
  Cc: devel, linux-kernel, dan.carpenter, linux-scsi

Included in the current storvsc driver for Hyper-V is the ability
to access luns on an FC fabric via a virtualized fiber channel
adapter exposed by the Hyper-V host. The driver also attaches to the FC
transport to allow host and port names to be published under
/sys/class/fc_host/hostX. Current customer tools running on the VM
require that these names be available in the well known standard
location under fc_host/hostX.

A problem arose when attaching to the FC transport. The scsi_scan
code attempts to call fc_user_scan which has basically become a no-op
due to the fact that the virtualized FC device does not expose rports.
At this point you cannot refresh the scsi bus after mapping or unmapping
luns on the SAN without a reboot of the VM.

This patch stubs in an rport per fc_host in storvsc so that the
requirement of a defined rport is now met within the fc_transport and
echo "- - -" > /sys/class/scsi_host/hostX/scan now works.

Signed-off-by: Cathy Avery <cavery@redhat.com>
---
 drivers/scsi/storvsc_drv.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 638e5f4..c6c0316 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -478,6 +478,9 @@ struct storvsc_device {
 	 */
 	u64 node_name;
 	u64 port_name;
+#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
+	struct fc_rport *rport;
+#endif
 };
 
 struct hv_host_device {
@@ -1823,8 +1826,16 @@ static int storvsc_probe(struct hv_device *device,
 	}
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
 	if (host->transportt == fc_transport_template) {
+		struct fc_rport_identifiers ids;
+
+		ids.node_name = 0;
+		ids.port_name = 0;
+		ids.port_id = 0;
+		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
+
 		fc_host_node_name(host) = stor_device->node_name;
 		fc_host_port_name(host) = stor_device->port_name;
+		stor_device->rport = fc_remote_port_add(host, 0, &ids);
 	}
 #endif
 	return 0;
@@ -1854,8 +1865,10 @@ static int storvsc_remove(struct hv_device *dev)
 	struct Scsi_Host *host = stor_device->host;
 
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
-	if (host->transportt == fc_transport_template)
+	if (host->transportt == fc_transport_template) {
+		fc_remote_port_delete(stor_device->rport);
 		fc_remove_host(host);
+	}
 #endif
 	scsi_remove_host(host);
 	storvsc_dev_remove(dev);
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
  2017-03-14 16:01 ` Cathy Avery
@ 2017-03-14 16:42   ` Stephen Hemminger
  -1 siblings, 0 replies; 11+ messages in thread
From: Stephen Hemminger @ 2017-03-14 16:42 UTC (permalink / raw)
  To: Cathy Avery
  Cc: kys, hch, haiyangz, jejb, martin.petersen, devel, linux-kernel,
	dan.carpenter, linux-scsi

On Tue, 14 Mar 2017 12:01:03 -0400
Cathy Avery <cavery@redhat.com> wrote:

>  #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
>  	if (host->transportt == fc_transport_template) {
> +		struct fc_rport_identifiers ids;
> +
> +		ids.node_name = 0;
> +		ids.port_name = 0;
> +		ids.port_id = 0;
> +		ids.roles |= FC_PORT_ROLE_FCP_TARGET;

Since the variable ids is on the stack, it is uninitialized data.
Doing a OR with uninitialized data is not correct.

Better off to use C99 style iniatializer and skip the zero fields.

		struct fc_rport_identifiers ids = {
			.roles = FC_PORT_ROLE_FCP_TARGET,
		};

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-03-14 16:42   ` Stephen Hemminger
  0 siblings, 0 replies; 11+ messages in thread
From: Stephen Hemminger @ 2017-03-14 16:42 UTC (permalink / raw)
  To: Cathy Avery
  Cc: jejb, linux-scsi, martin.petersen, haiyangz, linux-kernel, hch,
	devel, dan.carpenter

On Tue, 14 Mar 2017 12:01:03 -0400
Cathy Avery <cavery@redhat.com> wrote:

>  #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
>  	if (host->transportt == fc_transport_template) {
> +		struct fc_rport_identifiers ids;
> +
> +		ids.node_name = 0;
> +		ids.port_name = 0;
> +		ids.port_id = 0;
> +		ids.roles |= FC_PORT_ROLE_FCP_TARGET;

Since the variable ids is on the stack, it is uninitialized data.
Doing a OR with uninitialized data is not correct.

Better off to use C99 style iniatializer and skip the zero fields.

		struct fc_rport_identifiers ids = {
			.roles = FC_PORT_ROLE_FCP_TARGET,
		};

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
  2017-03-14 16:42   ` Stephen Hemminger
@ 2017-03-14 17:10     ` Cathy Avery
  -1 siblings, 0 replies; 11+ messages in thread
From: Cathy Avery @ 2017-03-14 17:10 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: kys, hch, haiyangz, jejb, martin.petersen, devel, linux-kernel,
	dan.carpenter, linux-scsi

Good catch. Thanks!

On 03/14/2017 12:42 PM, Stephen Hemminger wrote:
> On Tue, 14 Mar 2017 12:01:03 -0400
> Cathy Avery <cavery@redhat.com> wrote:
>
>>   #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
>>   	if (host->transportt == fc_transport_template) {
>> +		struct fc_rport_identifiers ids;
>> +
>> +		ids.node_name = 0;
>> +		ids.port_name = 0;
>> +		ids.port_id = 0;
>> +		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
> Since the variable ids is on the stack, it is uninitialized data.
> Doing a OR with uninitialized data is not correct.
>
> Better off to use C99 style iniatializer and skip the zero fields.
>
> 		struct fc_rport_identifiers ids = {
> 			.roles = FC_PORT_ROLE_FCP_TARGET,
> 		};

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-03-14 17:10     ` Cathy Avery
  0 siblings, 0 replies; 11+ messages in thread
From: Cathy Avery @ 2017-03-14 17:10 UTC (permalink / raw)
  To: Stephen Hemminger
  Cc: jejb, linux-scsi, martin.petersen, haiyangz, linux-kernel, hch,
	devel, dan.carpenter

Good catch. Thanks!

On 03/14/2017 12:42 PM, Stephen Hemminger wrote:
> On Tue, 14 Mar 2017 12:01:03 -0400
> Cathy Avery <cavery@redhat.com> wrote:
>
>>   #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
>>   	if (host->transportt == fc_transport_template) {
>> +		struct fc_rport_identifiers ids;
>> +
>> +		ids.node_name = 0;
>> +		ids.port_name = 0;
>> +		ids.port_id = 0;
>> +		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
> Since the variable ids is on the stack, it is uninitialized data.
> Doing a OR with uninitialized data is not correct.
>
> Better off to use C99 style iniatializer and skip the zero fields.
>
> 		struct fc_rport_identifiers ids = {
> 			.roles = FC_PORT_ROLE_FCP_TARGET,
> 		};

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
  2017-03-13 14:51 ` Cathy Avery
@ 2017-03-14  2:36     ` Martin K. Petersen
  0 siblings, 0 replies; 11+ messages in thread
From: Martin K. Petersen @ 2017-03-14  2:36 UTC (permalink / raw)
  To: Cathy Avery
  Cc: kys, hch, haiyangz, jejb, martin.petersen, dan.carpenter, devel,
	linux-kernel, linux-scsi

>>>>> "Cathy" == Cathy Avery <cavery@redhat.com> writes:

Hi Cathy,

Cathy> I haven't received any feedback yet.

Cathy> Should I resend?

You sent this right at the beginning of the merge window. That almost
guarantees that nobody will have time to look at it.

Whereas now is a good time to send submissions for 4.12...

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-03-14  2:36     ` Martin K. Petersen
  0 siblings, 0 replies; 11+ messages in thread
From: Martin K. Petersen @ 2017-03-14  2:36 UTC (permalink / raw)
  To: Cathy Avery
  Cc: jejb, linux-scsi, martin.petersen, haiyangz, linux-kernel, hch,
	devel, dan.carpenter

>>>>> "Cathy" == Cathy Avery <cavery@redhat.com> writes:

Hi Cathy,

Cathy> I haven't received any feedback yet.

Cathy> Should I resend?

You sent this right at the beginning of the merge window. That almost
guarantees that nobody will have time to look at it.

Whereas now is a good time to send submissions for 4.12...

-- 
Martin K. Petersen	Oracle Linux Engineering

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] scsi: storvsc: Add support for FC rport.
  2017-02-28 18:45 ` Cathy Avery
  (?)
@ 2017-03-13 14:51 ` Cathy Avery
  2017-03-14  2:36     ` Martin K. Petersen
  -1 siblings, 1 reply; 11+ messages in thread
From: Cathy Avery @ 2017-03-13 14:51 UTC (permalink / raw)
  To: kys, hch, haiyangz, jejb, martin.petersen
  Cc: dan.carpenter, devel, linux-kernel, linux-scsi

Hi,

I haven't received any feedback yet.

Should I resend?

Thanks,

Cathy

On 02/28/2017 01:45 PM, Cathy Avery wrote:
> Included in the current storvsc driver for Hyper-V is the ability
> to access luns on an FC fabric via a virtualized fiber channel
> adapter exposed by the Hyper-V host. The driver also attaches to the FC
> transport to allow host and port names to be published under
> /sys/class/fc_host/hostX. Current customer tools running on the VM
> require that these names be available in the well known standard
> location under fc_host/hostX.
>
> A problem arose when attaching to the FC transport. The scsi_scan
> code attempts to call fc_user_scan which has basically become a no-op
> due to the fact that the virtualized FC device does not expose rports.
> At this point you cannot refresh the scsi bus after mapping or unmapping
> luns on the SAN without a reboot of the VM.
>
> This patch stubs in an rport per fc_host in storvsc so that the
> requirement of a defined rport is now met within the fc_transport and
> echo "- - -" > /sys/class/scsi_host/hostX/scan now works.
>
> Signed-off-by: Cathy Avery <cavery@redhat.com>
> ---
>   drivers/scsi/storvsc_drv.c | 15 ++++++++++++++-
>   1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
> index 585e54f..6d7b932 100644
> --- a/drivers/scsi/storvsc_drv.c
> +++ b/drivers/scsi/storvsc_drv.c
> @@ -478,6 +478,9 @@ struct storvsc_device {
>   	 */
>   	u64 node_name;
>   	u64 port_name;
> +#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
> +	struct fc_rport *rport;
> +#endif
>   };
>   
>   struct hv_host_device {
> @@ -1823,8 +1826,16 @@ static int storvsc_probe(struct hv_device *device,
>   	}
>   #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
>   	if (host->transportt == fc_transport_template) {
> +		struct fc_rport_identifiers ids;
> +
> +		ids.node_name = 0;
> +		ids.port_name = 0;
> +		ids.port_id = 0;
> +		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
> +
>   		fc_host_node_name(host) = stor_device->node_name;
>   		fc_host_port_name(host) = stor_device->port_name;
> +		stor_device->rport = fc_remote_port_add(host, 0, &ids);
>   	}
>   #endif
>   	return 0;
> @@ -1854,8 +1865,10 @@ static int storvsc_remove(struct hv_device *dev)
>   	struct Scsi_Host *host = stor_device->host;
>   
>   #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
> -	if (host->transportt == fc_transport_template)
> +	if (host->transportt == fc_transport_template) {
> +		fc_remote_port_delete(stor_device->rport);
>   		fc_remove_host(host);
> +	}
>   #endif
>   	scsi_remove_host(host);
>   	storvsc_dev_remove(dev);

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-02-28 18:45 ` Cathy Avery
  0 siblings, 0 replies; 11+ messages in thread
From: Cathy Avery @ 2017-02-28 18:45 UTC (permalink / raw)
  To: kys, hch, haiyangz, jejb, martin.petersen
  Cc: dan.carpenter, devel, linux-kernel, linux-scsi

Included in the current storvsc driver for Hyper-V is the ability
to access luns on an FC fabric via a virtualized fiber channel
adapter exposed by the Hyper-V host. The driver also attaches to the FC
transport to allow host and port names to be published under
/sys/class/fc_host/hostX. Current customer tools running on the VM
require that these names be available in the well known standard
location under fc_host/hostX.

A problem arose when attaching to the FC transport. The scsi_scan
code attempts to call fc_user_scan which has basically become a no-op
due to the fact that the virtualized FC device does not expose rports.
At this point you cannot refresh the scsi bus after mapping or unmapping
luns on the SAN without a reboot of the VM.

This patch stubs in an rport per fc_host in storvsc so that the
requirement of a defined rport is now met within the fc_transport and
echo "- - -" > /sys/class/scsi_host/hostX/scan now works.

Signed-off-by: Cathy Avery <cavery@redhat.com>
---
 drivers/scsi/storvsc_drv.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 585e54f..6d7b932 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -478,6 +478,9 @@ struct storvsc_device {
 	 */
 	u64 node_name;
 	u64 port_name;
+#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
+	struct fc_rport *rport;
+#endif
 };
 
 struct hv_host_device {
@@ -1823,8 +1826,16 @@ static int storvsc_probe(struct hv_device *device,
 	}
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
 	if (host->transportt == fc_transport_template) {
+		struct fc_rport_identifiers ids;
+
+		ids.node_name = 0;
+		ids.port_name = 0;
+		ids.port_id = 0;
+		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
+
 		fc_host_node_name(host) = stor_device->node_name;
 		fc_host_port_name(host) = stor_device->port_name;
+		stor_device->rport = fc_remote_port_add(host, 0, &ids);
 	}
 #endif
 	return 0;
@@ -1854,8 +1865,10 @@ static int storvsc_remove(struct hv_device *dev)
 	struct Scsi_Host *host = stor_device->host;
 
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
-	if (host->transportt == fc_transport_template)
+	if (host->transportt == fc_transport_template) {
+		fc_remote_port_delete(stor_device->rport);
 		fc_remove_host(host);
+	}
 #endif
 	scsi_remove_host(host);
 	storvsc_dev_remove(dev);
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH] scsi: storvsc: Add support for FC rport.
@ 2017-02-28 18:45 ` Cathy Avery
  0 siblings, 0 replies; 11+ messages in thread
From: Cathy Avery @ 2017-02-28 18:45 UTC (permalink / raw)
  To: kys, hch, haiyangz, jejb, martin.petersen
  Cc: devel, linux-kernel, dan.carpenter, linux-scsi

Included in the current storvsc driver for Hyper-V is the ability
to access luns on an FC fabric via a virtualized fiber channel
adapter exposed by the Hyper-V host. The driver also attaches to the FC
transport to allow host and port names to be published under
/sys/class/fc_host/hostX. Current customer tools running on the VM
require that these names be available in the well known standard
location under fc_host/hostX.

A problem arose when attaching to the FC transport. The scsi_scan
code attempts to call fc_user_scan which has basically become a no-op
due to the fact that the virtualized FC device does not expose rports.
At this point you cannot refresh the scsi bus after mapping or unmapping
luns on the SAN without a reboot of the VM.

This patch stubs in an rport per fc_host in storvsc so that the
requirement of a defined rport is now met within the fc_transport and
echo "- - -" > /sys/class/scsi_host/hostX/scan now works.

Signed-off-by: Cathy Avery <cavery@redhat.com>
---
 drivers/scsi/storvsc_drv.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/scsi/storvsc_drv.c b/drivers/scsi/storvsc_drv.c
index 585e54f..6d7b932 100644
--- a/drivers/scsi/storvsc_drv.c
+++ b/drivers/scsi/storvsc_drv.c
@@ -478,6 +478,9 @@ struct storvsc_device {
 	 */
 	u64 node_name;
 	u64 port_name;
+#if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
+	struct fc_rport *rport;
+#endif
 };
 
 struct hv_host_device {
@@ -1823,8 +1826,16 @@ static int storvsc_probe(struct hv_device *device,
 	}
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
 	if (host->transportt == fc_transport_template) {
+		struct fc_rport_identifiers ids;
+
+		ids.node_name = 0;
+		ids.port_name = 0;
+		ids.port_id = 0;
+		ids.roles |= FC_PORT_ROLE_FCP_TARGET;
+
 		fc_host_node_name(host) = stor_device->node_name;
 		fc_host_port_name(host) = stor_device->port_name;
+		stor_device->rport = fc_remote_port_add(host, 0, &ids);
 	}
 #endif
 	return 0;
@@ -1854,8 +1865,10 @@ static int storvsc_remove(struct hv_device *dev)
 	struct Scsi_Host *host = stor_device->host;
 
 #if IS_ENABLED(CONFIG_SCSI_FC_ATTRS)
-	if (host->transportt == fc_transport_template)
+	if (host->transportt == fc_transport_template) {
+		fc_remote_port_delete(stor_device->rport);
 		fc_remove_host(host);
+	}
 #endif
 	scsi_remove_host(host);
 	storvsc_dev_remove(dev);
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2017-03-14 17:10 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-14 16:01 [PATCH] scsi: storvsc: Add support for FC rport Cathy Avery
2017-03-14 16:01 ` Cathy Avery
2017-03-14 16:42 ` Stephen Hemminger
2017-03-14 16:42   ` Stephen Hemminger
2017-03-14 17:10   ` Cathy Avery
2017-03-14 17:10     ` Cathy Avery
  -- strict thread matches above, loose matches on Subject: below --
2017-02-28 18:45 Cathy Avery
2017-02-28 18:45 ` Cathy Avery
2017-03-13 14:51 ` Cathy Avery
2017-03-14  2:36   ` Martin K. Petersen
2017-03-14  2:36     ` Martin K. Petersen

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.