* [PATCH 0/3] Remove wrapper functions from ldlm_pool
@ 2015-11-06 17:42 Shivani Bhardwaj
2015-11-06 17:43 ` [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function Shivani Bhardwaj
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Shivani Bhardwaj @ 2015-11-06 17:42 UTC (permalink / raw)
To: gregkh; +Cc: oleg.drokin, andreas.dilger, devel, linux-kernel
This patchset removes different wrapper functions from the file ldlm_pool
and replaces their calls with the function they wrapped.
After applying this patchset, code becomes cleaner.
Shivani Bhardwaj (3):
Staging: lustre: ldlm_pool: Remove unneeded wrapper function
Staging: lustre: ldlm_pool: Drop wrapper function
Staging: lustre: ldlm_pool: Drop unneeded wrapper function
drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 47 +++++++++-----------------
1 file changed, 16 insertions(+), 31 deletions(-)
--
2.1.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function 2015-11-06 17:42 [PATCH 0/3] Remove wrapper functions from ldlm_pool Shivani Bhardwaj @ 2015-11-06 17:43 ` Shivani Bhardwaj 2015-11-06 22:02 ` Simmons, James A. 2015-11-06 17:43 ` [PATCH 2/3] Staging: lustre: ldlm_pool: Drop " Shivani Bhardwaj 2015-11-06 17:44 ` [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded " Shivani Bhardwaj 2 siblings, 1 reply; 7+ messages in thread From: Shivani Bhardwaj @ 2015-11-06 17:43 UTC (permalink / raw) To: gregkh; +Cc: oleg.drokin, andreas.dilger, devel, linux-kernel Remove the function ldlm_pl2ns() and replace its calls with the function it wrapped. Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com> --- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 1a4eef6..2beb36b 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -176,11 +176,6 @@ enum { LDLM_POOL_LAST_STAT }; -static inline struct ldlm_namespace *ldlm_pl2ns(struct ldlm_pool *pl) -{ - return container_of(pl, struct ldlm_namespace, ns_pool); -} - /** * Calculates suggested grant_step in % of available locks for passed * \a period. This is later used in grant_plan calculations. @@ -254,7 +249,8 @@ static void ldlm_pool_recalc_stats(struct ldlm_pool *pl) } /** - * Sets SLV and Limit from ldlm_pl2ns(pl)->ns_obd tp passed \a pl. + * Sets SLV and Limit from container_of(pl, struct ldlm_namespace, + * ns_pool)->ns_obd tp passed \a pl. */ static void ldlm_cli_pool_pop_slv(struct ldlm_pool *pl) { @@ -264,7 +260,8 @@ static void ldlm_cli_pool_pop_slv(struct ldlm_pool *pl) * Get new SLV and Limit from obd which is updated with coming * RPCs. */ - obd = ldlm_pl2ns(pl)->ns_obd; + obd = container_of(pl, struct ldlm_namespace, + ns_pool)->ns_obd; LASSERT(obd != NULL); read_lock(&obd->obd_pool_lock); pl->pl_server_lock_volume = obd->obd_pool_slv; @@ -304,7 +301,8 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) /* * Do not cancel locks in case lru resize is disabled for this ns. */ - if (!ns_connect_lru_resize(ldlm_pl2ns(pl))) { + if (!ns_connect_lru_resize(container_of(pl, struct ldlm_namespace, + ns_pool))) { ret = 0; goto out; } @@ -315,7 +313,8 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) * It may be called when SLV has changed much, this is why we do not * take into account pl->pl_recalc_time here. */ - ret = ldlm_cancel_lru(ldlm_pl2ns(pl), 0, LCF_ASYNC, LDLM_CANCEL_LRUR); + ret = ldlm_cancel_lru(container_of(pl, struct ldlm_namespace, ns_pool), + 0, LCF_ASYNC, LDLM_CANCEL_LRUR); out: spin_lock(&pl->pl_lock); @@ -341,7 +340,7 @@ static int ldlm_cli_pool_shrink(struct ldlm_pool *pl, struct ldlm_namespace *ns; int unused; - ns = ldlm_pl2ns(pl); + ns = container_of(pl, struct ldlm_namespace, ns_pool); /* * Do not cancel locks in case lru resize is disabled for this ns. @@ -558,7 +557,8 @@ static struct kobj_type ldlm_pl_ktype = { static int ldlm_pool_sysfs_init(struct ldlm_pool *pl) { - struct ldlm_namespace *ns = ldlm_pl2ns(pl); + struct ldlm_namespace *ns = container_of(pl, struct ldlm_namespace, + ns_pool); int err; init_completion(&pl->pl_kobj_unregister); @@ -570,7 +570,8 @@ static int ldlm_pool_sysfs_init(struct ldlm_pool *pl) static int ldlm_pool_debugfs_init(struct ldlm_pool *pl) { - struct ldlm_namespace *ns = ldlm_pl2ns(pl); + struct ldlm_namespace *ns = container_of(pl, struct ldlm_namespace, + ns_pool); struct dentry *debugfs_ns_parent; struct lprocfs_vars pool_vars[2]; char *var_name = NULL; -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function 2015-11-06 17:43 ` [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function Shivani Bhardwaj @ 2015-11-06 22:02 ` Simmons, James A. 0 siblings, 0 replies; 7+ messages in thread From: Simmons, James A. @ 2015-11-06 22:02 UTC (permalink / raw) To: 'Shivani Bhardwaj', gregkh@linuxfoundation.org Cc: oleg.drokin@intel.com, devel@driverdev.osuosl.org, andreas.dilger@intel.com, linux-kernel@vger.kernel.org >-----Original Message----- >From: devel [mailto:driverdev-devel-bounces@linuxdriverproject.org] On Behalf Of Shivani Bhardwaj >Sent: Friday, November 06, 2015 12:43 PM >To: gregkh@linuxfoundation.org >Cc: oleg.drokin@intel.com; devel@driverdev.osuosl.org; andreas.dilger@intel.com; linux-kernel@vger.kernel.org >Subject: [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function > >Remove the function ldlm_pl2ns() and replace its calls with the function >it wrapped. > >Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com> >--- > drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 25 +++++++++++++------------ > 1 file changed, 13 insertions(+), 12 deletions(-) Acked-by: James Simmons <jsimmons@infradead.org> diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 1a4eef6..2beb36b 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -176,11 +176,6 @@ enum { LDLM_POOL_LAST_STAT }; -static inline struct ldlm_namespace *ldlm_pl2ns(struct ldlm_pool *pl) -{ - return container_of(pl, struct ldlm_namespace, ns_pool); -} - /** * Calculates suggested grant_step in % of available locks for passed * \a period. This is later used in grant_plan calculations. @@ -254,7 +249,8 @@ static void ldlm_pool_recalc_stats(struct ldlm_pool *pl) } /** - * Sets SLV and Limit from ldlm_pl2ns(pl)->ns_obd tp passed \a pl. + * Sets SLV and Limit from container_of(pl, struct ldlm_namespace, + * ns_pool)->ns_obd tp passed \a pl. */ static void ldlm_cli_pool_pop_slv(struct ldlm_pool *pl) { @@ -264,7 +260,8 @@ static void ldlm_cli_pool_pop_slv(struct ldlm_pool *pl) * Get new SLV and Limit from obd which is updated with coming * RPCs. */ - obd = ldlm_pl2ns(pl)->ns_obd; + obd = container_of(pl, struct ldlm_namespace, + ns_pool)->ns_obd; LASSERT(obd != NULL); read_lock(&obd->obd_pool_lock); pl->pl_server_lock_volume = obd->obd_pool_slv; @@ -304,7 +301,8 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) /* * Do not cancel locks in case lru resize is disabled for this ns. */ - if (!ns_connect_lru_resize(ldlm_pl2ns(pl))) { + if (!ns_connect_lru_resize(container_of(pl, struct ldlm_namespace, + ns_pool))) { ret = 0; goto out; } @@ -315,7 +313,8 @@ static int ldlm_cli_pool_recalc(struct ldlm_pool *pl) * It may be called when SLV has changed much, this is why we do not * take into account pl->pl_recalc_time here. */ - ret = ldlm_cancel_lru(ldlm_pl2ns(pl), 0, LCF_ASYNC, LDLM_CANCEL_LRUR); + ret = ldlm_cancel_lru(container_of(pl, struct ldlm_namespace, ns_pool), + 0, LCF_ASYNC, LDLM_CANCEL_LRUR); out: spin_lock(&pl->pl_lock); @@ -341,7 +340,7 @@ static int ldlm_cli_pool_shrink(struct ldlm_pool *pl, struct ldlm_namespace *ns; int unused; - ns = ldlm_pl2ns(pl); + ns = container_of(pl, struct ldlm_namespace, ns_pool); /* * Do not cancel locks in case lru resize is disabled for this ns. @@ -558,7 +557,8 @@ static struct kobj_type ldlm_pl_ktype = { static int ldlm_pool_sysfs_init(struct ldlm_pool *pl) { - struct ldlm_namespace *ns = ldlm_pl2ns(pl); + struct ldlm_namespace *ns = container_of(pl, struct ldlm_namespace, + ns_pool); int err; init_completion(&pl->pl_kobj_unregister); @@ -570,7 +570,8 @@ static int ldlm_pool_sysfs_init(struct ldlm_pool *pl) static int ldlm_pool_debugfs_init(struct ldlm_pool *pl) { - struct ldlm_namespace *ns = ldlm_pl2ns(pl); + struct ldlm_namespace *ns = container_of(pl, struct ldlm_namespace, + ns_pool); struct dentry *debugfs_ns_parent; struct lprocfs_vars pool_vars[2]; char *var_name = NULL; -- 2.1.0 _______________________________________________ devel mailing list devel@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/3] Staging: lustre: ldlm_pool: Drop wrapper function 2015-11-06 17:42 [PATCH 0/3] Remove wrapper functions from ldlm_pool Shivani Bhardwaj 2015-11-06 17:43 ` [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function Shivani Bhardwaj @ 2015-11-06 17:43 ` Shivani Bhardwaj 2015-11-06 22:02 ` Simmons, James A. 2015-11-06 17:44 ` [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded " Shivani Bhardwaj 2 siblings, 1 reply; 7+ messages in thread From: Shivani Bhardwaj @ 2015-11-06 17:43 UTC (permalink / raw) To: gregkh; +Cc: oleg.drokin, andreas.dilger, devel, linux-kernel Remove the function ldlm_pool_get_limit() and replace its calls with the function it wrapped. Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com> --- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 2beb36b..20cf389 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -208,14 +208,6 @@ static inline int ldlm_pool_t2gsp(unsigned int t) } /** - * Returns current \a pl limit. - */ -static __u32 ldlm_pool_get_limit(struct ldlm_pool *pl) -{ - return atomic_read(&pl->pl_limit); -} - -/** * Sets passed \a limit to \a pl. */ static void ldlm_pool_set_limit(struct ldlm_pool *pl, __u32 limit) @@ -452,7 +444,7 @@ static int lprocfs_pool_state_seq_show(struct seq_file *m, void *unused) spin_lock(&pl->pl_lock); slv = pl->pl_server_lock_volume; clv = pl->pl_client_lock_volume; - limit = ldlm_pool_get_limit(pl); + limit = atomic_read(&pl->pl_limit); granted = atomic_read(&pl->pl_granted); grant_rate = atomic_read(&pl->pl_grant_rate); cancel_rate = atomic_read(&pl->pl_cancel_rate); -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 2/3] Staging: lustre: ldlm_pool: Drop wrapper function 2015-11-06 17:43 ` [PATCH 2/3] Staging: lustre: ldlm_pool: Drop " Shivani Bhardwaj @ 2015-11-06 22:02 ` Simmons, James A. 0 siblings, 0 replies; 7+ messages in thread From: Simmons, James A. @ 2015-11-06 22:02 UTC (permalink / raw) To: 'Shivani Bhardwaj', gregkh@linuxfoundation.org Cc: oleg.drokin@intel.com, devel@driverdev.osuosl.org, andreas.dilger@intel.com, linux-kernel@vger.kernel.org >-----Original Message----- >From: devel [mailto:driverdev-devel-bounces@linuxdriverproject.org] On Behalf Of Shivani Bhardwaj >Sent: Friday, November 06, 2015 12:44 PM >To: gregkh@linuxfoundation.org >Cc: oleg.drokin@intel.com; devel@driverdev.osuosl.org; andreas.dilger@intel.com; linux-kernel@vger.kernel.org >Subject: [PATCH 2/3] Staging: lustre: ldlm_pool: Drop wrapper function > >Remove the function ldlm_pool_get_limit() and replace its calls with the >function it wrapped. > >Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com> >--- > drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 10 +--------- > 1 file changed, 1 insertion(+), 9 deletions(-) Acked-by: James Simmons <jsimmons@infradead.org> diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 2beb36b..20cf389 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -208,14 +208,6 @@ static inline int ldlm_pool_t2gsp(unsigned int t) } /** - * Returns current \a pl limit. - */ -static __u32 ldlm_pool_get_limit(struct ldlm_pool *pl) -{ - return atomic_read(&pl->pl_limit); -} - -/** * Sets passed \a limit to \a pl. */ static void ldlm_pool_set_limit(struct ldlm_pool *pl, __u32 limit) @@ -452,7 +444,7 @@ static int lprocfs_pool_state_seq_show(struct seq_file *m, void *unused) spin_lock(&pl->pl_lock); slv = pl->pl_server_lock_volume; clv = pl->pl_client_lock_volume; - limit = ldlm_pool_get_limit(pl); + limit = atomic_read(&pl->pl_limit); granted = atomic_read(&pl->pl_granted); grant_rate = atomic_read(&pl->pl_grant_rate); cancel_rate = atomic_read(&pl->pl_cancel_rate); -- 2.1.0 _______________________________________________ devel mailing list devel@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded wrapper function 2015-11-06 17:42 [PATCH 0/3] Remove wrapper functions from ldlm_pool Shivani Bhardwaj 2015-11-06 17:43 ` [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function Shivani Bhardwaj 2015-11-06 17:43 ` [PATCH 2/3] Staging: lustre: ldlm_pool: Drop " Shivani Bhardwaj @ 2015-11-06 17:44 ` Shivani Bhardwaj 2015-11-06 22:01 ` Simmons, James A. 2 siblings, 1 reply; 7+ messages in thread From: Shivani Bhardwaj @ 2015-11-06 17:44 UTC (permalink / raw) To: gregkh; +Cc: oleg.drokin, andreas.dilger, devel, linux-kernel Remove the function ldlm_pool_set_limit() and replace its calls with the function it wrapped. Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com> --- drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 20cf389..e59b286 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -208,14 +208,6 @@ static inline int ldlm_pool_t2gsp(unsigned int t) } /** - * Sets passed \a limit to \a pl. - */ -static void ldlm_pool_set_limit(struct ldlm_pool *pl, __u32 limit) -{ - atomic_set(&pl->pl_limit, limit); -} - -/** * Recalculates next stats on passed \a pl. * * \pre ->pl_lock is locked. @@ -257,7 +249,7 @@ static void ldlm_cli_pool_pop_slv(struct ldlm_pool *pl) LASSERT(obd != NULL); read_lock(&obd->obd_pool_lock); pl->pl_server_lock_volume = obd->obd_pool_slv; - ldlm_pool_set_limit(pl, obd->obd_pool_limit); + atomic_set(&pl->pl_limit, obd->obd_pool_limit); read_unlock(&obd->obd_pool_lock); } @@ -678,7 +670,7 @@ int ldlm_pool_init(struct ldlm_pool *pl, struct ldlm_namespace *ns, snprintf(pl->pl_name, sizeof(pl->pl_name), "ldlm-pool-%s-%d", ldlm_ns_name(ns), idx); - ldlm_pool_set_limit(pl, 1); + atomic_set(&pl->pl_limit, 1); pl->pl_server_lock_volume = 0; pl->pl_ops = &ldlm_cli_pool_ops; pl->pl_recalc_period = LDLM_POOL_CLI_DEF_RECALC_PERIOD; -- 2.1.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded wrapper function 2015-11-06 17:44 ` [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded " Shivani Bhardwaj @ 2015-11-06 22:01 ` Simmons, James A. 0 siblings, 0 replies; 7+ messages in thread From: Simmons, James A. @ 2015-11-06 22:01 UTC (permalink / raw) To: 'Shivani Bhardwaj', gregkh@linuxfoundation.org Cc: oleg.drokin@intel.com, devel@driverdev.osuosl.org, andreas.dilger@intel.com, linux-kernel@vger.kernel.org >-----Original Message----- >From: devel [mailto:driverdev-devel-bounces@linuxdriverproject.org] On Behalf Of Shivani Bhardwaj >Sent: Friday, November 06, 2015 12:45 PM >To: gregkh@linuxfoundation.org >Cc: oleg.drokin@intel.com; devel@driverdev.osuosl.org; andreas.dilger@intel.com; linux-kernel@vger.kernel.org >Subject: [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded wrapper function > >Remove the function ldlm_pool_set_limit() and replace its calls with the >function it wrapped. > >Signed-off-by: Shivani Bhardwaj <shivanib134@gmail.com> >--- > drivers/staging/lustre/lustre/ldlm/ldlm_pool.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) > Acked-by: James Simmons <jsimmons@infradead.org> diff --git a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c index 20cf389..e59b286 100644 --- a/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c +++ b/drivers/staging/lustre/lustre/ldlm/ldlm_pool.c @@ -208,14 +208,6 @@ static inline int ldlm_pool_t2gsp(unsigned int t) } /** - * Sets passed \a limit to \a pl. - */ -static void ldlm_pool_set_limit(struct ldlm_pool *pl, __u32 limit) -{ - atomic_set(&pl->pl_limit, limit); -} - -/** * Recalculates next stats on passed \a pl. * * \pre ->pl_lock is locked. @@ -257,7 +249,7 @@ static void ldlm_cli_pool_pop_slv(struct ldlm_pool *pl) LASSERT(obd != NULL); read_lock(&obd->obd_pool_lock); pl->pl_server_lock_volume = obd->obd_pool_slv; - ldlm_pool_set_limit(pl, obd->obd_pool_limit); + atomic_set(&pl->pl_limit, obd->obd_pool_limit); read_unlock(&obd->obd_pool_lock); } @@ -678,7 +670,7 @@ int ldlm_pool_init(struct ldlm_pool *pl, struct ldlm_namespace *ns, snprintf(pl->pl_name, sizeof(pl->pl_name), "ldlm-pool-%s-%d", ldlm_ns_name(ns), idx); - ldlm_pool_set_limit(pl, 1); + atomic_set(&pl->pl_limit, 1); pl->pl_server_lock_volume = 0; pl->pl_ops = &ldlm_cli_pool_ops; pl->pl_recalc_period = LDLM_POOL_CLI_DEF_RECALC_PERIOD; -- 2.1.0 _______________________________________________ devel mailing list devel@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel ^ permalink raw reply related [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-11-06 22:02 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-11-06 17:42 [PATCH 0/3] Remove wrapper functions from ldlm_pool Shivani Bhardwaj 2015-11-06 17:43 ` [PATCH 1/3] Staging: lustre: ldlm_pool: Remove unneeded wrapper function Shivani Bhardwaj 2015-11-06 22:02 ` Simmons, James A. 2015-11-06 17:43 ` [PATCH 2/3] Staging: lustre: ldlm_pool: Drop " Shivani Bhardwaj 2015-11-06 22:02 ` Simmons, James A. 2015-11-06 17:44 ` [PATCH 3/3] Staging: lustre: ldlm_pool: Drop unneeded " Shivani Bhardwaj 2015-11-06 22:01 ` Simmons, James A.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox