Commit f6763b68 authored by Henri Doreau's avatar Henri Doreau Committed by Greg Kroah-Hartman

staging: lustre: obd: Remove dead code in precleanup

There used to be several pre-cleanup phases, but
only OBD_CLEANUP_EXPORTS is actually used.  Thus
remove the whole notion of precleanup phases.
Signed-off-by: default avatarHenri Doreau <henri.doreau@cea.fr>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-7034
Reviewed-on: http://review.whamcloud.com/16061Reviewed-by: default avatarJohn L. Hammond <john.hammond@intel.com>
Reviewed-by: default avatarDmitry Eremin <dmitry.eremin@intel.com>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarJames Simmons <jsimmons@infradead.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 43eb3b33
...@@ -598,13 +598,6 @@ struct obd_device { ...@@ -598,13 +598,6 @@ struct obd_device {
struct completion obd_kobj_unregister; struct completion obd_kobj_unregister;
}; };
enum obd_cleanup_stage {
/* Special case hack for MDS LOVs */
OBD_CLEANUP_EARLY,
/* can be directly mapped to .ldto_device_fini() */
OBD_CLEANUP_EXPORTS,
};
/* get/set_info keys */ /* get/set_info keys */
#define KEY_ASYNC "async" #define KEY_ASYNC "async"
#define KEY_CHANGELOG_CLEAR "changelog_clear" #define KEY_CHANGELOG_CLEAR "changelog_clear"
...@@ -751,8 +744,7 @@ struct obd_ops { ...@@ -751,8 +744,7 @@ struct obd_ops {
__u32 vallen, void *val, __u32 vallen, void *val,
struct ptlrpc_request_set *set); struct ptlrpc_request_set *set);
int (*setup)(struct obd_device *dev, struct lustre_cfg *cfg); int (*setup)(struct obd_device *dev, struct lustre_cfg *cfg);
int (*precleanup)(struct obd_device *dev, int (*precleanup)(struct obd_device *dev);
enum obd_cleanup_stage cleanup_stage);
int (*cleanup)(struct obd_device *dev); int (*cleanup)(struct obd_device *dev);
int (*process_config)(struct obd_device *dev, u32 len, void *data); int (*process_config)(struct obd_device *dev, u32 len, void *data);
int (*postrecov)(struct obd_device *dev); int (*postrecov)(struct obd_device *dev);
......
...@@ -505,8 +505,7 @@ static inline int obd_setup(struct obd_device *obd, struct lustre_cfg *cfg) ...@@ -505,8 +505,7 @@ static inline int obd_setup(struct obd_device *obd, struct lustre_cfg *cfg)
return rc; return rc;
} }
static inline int obd_precleanup(struct obd_device *obd, static inline int obd_precleanup(struct obd_device *obd)
enum obd_cleanup_stage cleanup_stage)
{ {
int rc; int rc;
DECLARE_LU_VARS(ldt, d); DECLARE_LU_VARS(ldt, d);
...@@ -517,20 +516,18 @@ static inline int obd_precleanup(struct obd_device *obd, ...@@ -517,20 +516,18 @@ static inline int obd_precleanup(struct obd_device *obd,
ldt = obd->obd_type->typ_lu; ldt = obd->obd_type->typ_lu;
d = obd->obd_lu_dev; d = obd->obd_lu_dev;
if (ldt && d) { if (ldt && d) {
if (cleanup_stage == OBD_CLEANUP_EXPORTS) { struct lu_env env;
struct lu_env env;
rc = lu_env_init(&env, ldt->ldt_ctx_tags); rc = lu_env_init(&env, ldt->ldt_ctx_tags);
if (rc == 0) { if (!rc) {
ldt->ldt_ops->ldto_device_fini(&env, d); ldt->ldt_ops->ldto_device_fini(&env, d);
lu_env_fini(&env); lu_env_fini(&env);
}
} }
} }
OBD_CHECK_DT_OP(obd, precleanup, 0); OBD_CHECK_DT_OP(obd, precleanup, 0);
OBD_COUNTER_INCREMENT(obd, precleanup); OBD_COUNTER_INCREMENT(obd, precleanup);
rc = OBP(obd, precleanup)(obd, cleanup_stage); rc = OBP(obd, precleanup)(obd);
return rc; return rc;
} }
......
...@@ -2623,23 +2623,10 @@ static int lmv_unlink(struct obd_export *exp, struct md_op_data *op_data, ...@@ -2623,23 +2623,10 @@ static int lmv_unlink(struct obd_export *exp, struct md_op_data *op_data,
goto retry_unlink; goto retry_unlink;
} }
static int lmv_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) static int lmv_precleanup(struct obd_device *obd)
{ {
struct lmv_obd *lmv = &obd->u.lmv; fld_client_debugfs_fini(&obd->u.lmv.lmv_fld);
lprocfs_obd_cleanup(obd);
switch (stage) {
case OBD_CLEANUP_EARLY:
/* XXX: here should be calling obd_precleanup() down to
* stack.
*/
break;
case OBD_CLEANUP_EXPORTS:
fld_client_debugfs_fini(&lmv->lmv_fld);
lprocfs_obd_cleanup(obd);
break;
default:
break;
}
return 0; return 0;
} }
......
...@@ -825,29 +825,6 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg) ...@@ -825,29 +825,6 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
return rc; return rc;
} }
static int lov_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage)
{
struct lov_obd *lov = &obd->u.lov;
switch (stage) {
case OBD_CLEANUP_EARLY: {
int i;
for (i = 0; i < lov->desc.ld_tgt_count; i++) {
if (!lov->lov_tgts[i] || !lov->lov_tgts[i]->ltd_active)
continue;
obd_precleanup(class_exp2obd(lov->lov_tgts[i]->ltd_exp),
OBD_CLEANUP_EARLY);
}
break;
}
default:
break;
}
return 0;
}
static int lov_cleanup(struct obd_device *obd) static int lov_cleanup(struct obd_device *obd)
{ {
struct lov_obd *lov = &obd->u.lov; struct lov_obd *lov = &obd->u.lov;
...@@ -1399,7 +1376,6 @@ static int lov_quotactl(struct obd_device *obd, struct obd_export *exp, ...@@ -1399,7 +1376,6 @@ static int lov_quotactl(struct obd_device *obd, struct obd_export *exp,
static struct obd_ops lov_obd_ops = { static struct obd_ops lov_obd_ops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.setup = lov_setup, .setup = lov_setup,
.precleanup = lov_precleanup,
.cleanup = lov_cleanup, .cleanup = lov_cleanup,
/*.process_config = lov_process_config,*/ /*.process_config = lov_process_config,*/
.connect = lov_connect, .connect = lov_connect,
......
...@@ -2660,23 +2660,16 @@ static int mdc_init_ea_size(struct obd_export *exp, u32 easize, u32 def_easize) ...@@ -2660,23 +2660,16 @@ static int mdc_init_ea_size(struct obd_export *exp, u32 easize, u32 def_easize)
return 0; return 0;
} }
static int mdc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) static int mdc_precleanup(struct obd_device *obd)
{ {
switch (stage) { /* Failsafe, ok if racy */
case OBD_CLEANUP_EARLY: if (obd->obd_type->typ_refcnt <= 1)
break; libcfs_kkuc_group_rem(0, KUC_GRP_HSM);
case OBD_CLEANUP_EXPORTS:
/* Failsafe, ok if racy */
if (obd->obd_type->typ_refcnt <= 1)
libcfs_kkuc_group_rem(0, KUC_GRP_HSM);
obd_cleanup_client_import(obd);
ptlrpc_lprocfs_unregister_obd(obd);
lprocfs_obd_cleanup(obd);
mdc_llog_finish(obd); obd_cleanup_client_import(obd);
break; ptlrpc_lprocfs_unregister_obd(obd);
} lprocfs_obd_cleanup(obd);
mdc_llog_finish(obd);
return 0; return 0;
} }
......
...@@ -684,35 +684,33 @@ static int mgc_llog_fini(const struct lu_env *env, struct obd_device *obd) ...@@ -684,35 +684,33 @@ static int mgc_llog_fini(const struct lu_env *env, struct obd_device *obd)
} }
static atomic_t mgc_count = ATOMIC_INIT(0); static atomic_t mgc_count = ATOMIC_INIT(0);
static int mgc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) static int mgc_precleanup(struct obd_device *obd)
{ {
int rc = 0; int rc = 0;
int temp; int temp;
switch (stage) { if (atomic_dec_and_test(&mgc_count)) {
case OBD_CLEANUP_EARLY: LASSERT(rq_state & RQ_RUNNING);
break; /* stop requeue thread */
case OBD_CLEANUP_EXPORTS: temp = RQ_STOP;
if (atomic_dec_and_test(&mgc_count)) { } else {
LASSERT(rq_state & RQ_RUNNING); /* wakeup requeue thread to clean our cld */
/* stop requeue thread */ temp = RQ_NOW | RQ_PRECLEANUP;
temp = RQ_STOP;
} else {
/* wakeup requeue thread to clean our cld */
temp = RQ_NOW | RQ_PRECLEANUP;
}
spin_lock(&config_list_lock);
rq_state |= temp;
spin_unlock(&config_list_lock);
wake_up(&rq_waitq);
if (temp & RQ_STOP)
wait_for_completion(&rq_exit);
obd_cleanup_client_import(obd);
rc = mgc_llog_fini(NULL, obd);
if (rc != 0)
CERROR("failed to cleanup llogging subsystems\n");
break;
} }
spin_lock(&config_list_lock);
rq_state |= temp;
spin_unlock(&config_list_lock);
wake_up(&rq_waitq);
if (temp & RQ_STOP)
wait_for_completion(&rq_exit);
obd_cleanup_client_import(obd);
rc = mgc_llog_fini(NULL, obd);
if (rc)
CERROR("failed to cleanup llogging subsystems\n");
return rc; return rc;
} }
......
...@@ -446,7 +446,7 @@ static int class_cleanup(struct obd_device *obd, struct lustre_cfg *lcfg) ...@@ -446,7 +446,7 @@ static int class_cleanup(struct obd_device *obd, struct lustre_cfg *lcfg)
LASSERT(obd->obd_self_export); LASSERT(obd->obd_self_export);
/* Precleanup, we must make sure all exports get destroyed. */ /* Precleanup, we must make sure all exports get destroyed. */
err = obd_precleanup(obd, OBD_CLEANUP_EXPORTS); err = obd_precleanup(obd);
if (err) if (err)
CERROR("Precleanup %s returned %d\n", CERROR("Precleanup %s returned %d\n",
obd->obd_name, err); obd->obd_name, err);
......
...@@ -2728,47 +2728,33 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg) ...@@ -2728,47 +2728,33 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
return rc; return rc;
} }
static int osc_precleanup(struct obd_device *obd, enum obd_cleanup_stage stage) static int osc_precleanup(struct obd_device *obd)
{ {
switch (stage) { struct client_obd *cli = &obd->u.cli;
case OBD_CLEANUP_EARLY: {
struct obd_import *imp; /* LU-464
* for echo client, export may be on zombie list, wait for
imp = obd->u.cli.cl_import; * zombie thread to cull it, because cli.cl_import will be
CDEBUG(D_HA, "Deactivating import %s\n", obd->obd_name); * cleared in client_disconnect_export():
/* ptlrpc_abort_inflight to stop an mds_lov_synchronize */ * class_export_destroy() -> obd_cleanup() ->
ptlrpc_deactivate_import(imp); * echo_device_free() -> echo_client_cleanup() ->
spin_lock(&imp->imp_lock); * obd_disconnect() -> osc_disconnect() ->
imp->imp_pingable = 0; * client_disconnect_export()
spin_unlock(&imp->imp_lock); */
break; obd_zombie_barrier();
if (cli->cl_writeback_work) {
ptlrpcd_destroy_work(cli->cl_writeback_work);
cli->cl_writeback_work = NULL;
} }
case OBD_CLEANUP_EXPORTS: {
struct client_obd *cli = &obd->u.cli; if (cli->cl_lru_work) {
/* LU-464 ptlrpcd_destroy_work(cli->cl_lru_work);
* for echo client, export may be on zombie list, wait for cli->cl_lru_work = NULL;
* zombie thread to cull it, because cli.cl_import will be
* cleared in client_disconnect_export():
* class_export_destroy() -> obd_cleanup() ->
* echo_device_free() -> echo_client_cleanup() ->
* obd_disconnect() -> osc_disconnect() ->
* client_disconnect_export()
*/
obd_zombie_barrier();
if (cli->cl_writeback_work) {
ptlrpcd_destroy_work(cli->cl_writeback_work);
cli->cl_writeback_work = NULL;
}
if (cli->cl_lru_work) {
ptlrpcd_destroy_work(cli->cl_lru_work);
cli->cl_lru_work = NULL;
}
obd_cleanup_client_import(obd);
ptlrpc_lprocfs_unregister_obd(obd);
lprocfs_obd_cleanup(obd);
break;
}
} }
obd_cleanup_client_import(obd);
ptlrpc_lprocfs_unregister_obd(obd);
lprocfs_obd_cleanup(obd);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment