#define KEY_CACHE_SET "cache_set"
#define KEY_CACHE_LRU_SHRINK "cache_lru_shrink"
#define KEY_CHANGELOG_INDEX "changelog_index"
+#define KEY_OSP_CONNECTED "osp_connected"
struct lu_context;
.ldt_ctx_tags = LCT_MD_THREAD,
};
-static int lod_obd_health_check(const struct lu_env *env,
- struct obd_device *obd)
+static int lod_obd_get_info(const struct lu_env *env, struct obd_export *exp,
+ __u32 keylen, void *key, __u32 *vallen, void *val,
+ struct lov_stripe_md *lsm)
{
- struct lod_device *d = lu2lod_dev(obd->obd_lu_dev);
- struct lod_ost_desc *ost;
- int i, rc = 1;
- ENTRY;
-
- LASSERT(d);
- lod_getref(&d->lod_ost_descs);
- lod_foreach_ost(d, i) {
- ost = OST_TGT(d, i);
- LASSERT(ost && ost->ltd_ost);
- rc = obd_health_check(env, ost->ltd_exp->exp_obd);
- /* one healthy device is enough */
- if (rc == 0)
- break;
+ int rc = -EINVAL;
+
+ if (KEY_IS(KEY_OSP_CONNECTED)) {
+ struct obd_device *obd = exp->exp_obd;
+ struct lod_device *d;
+ struct lod_ost_desc *ost;
+ int i, rc = 1;
+
+ if (!obd->obd_set_up || obd->obd_stopping)
+ RETURN(-EAGAIN);
+
+ d = lu2lod_dev(obd->obd_lu_dev);
+ lod_getref(&d->lod_ost_descs);
+ lod_foreach_ost(d, i) {
+ ost = OST_TGT(d, i);
+ LASSERT(ost && ost->ltd_ost);
+
+ rc = obd_get_info(env, ost->ltd_exp, keylen, key,
+ vallen, val, lsm);
+ /* one healthy device is enough */
+ if (rc == 0)
+ break;
+ }
+ lod_putref(d, &d->lod_ost_descs);
+ RETURN(rc);
}
- lod_putref(d, &d->lod_ost_descs);
+
RETURN(rc);
}
.o_owner = THIS_MODULE,
.o_connect = lod_obd_connect,
.o_disconnect = lod_obd_disconnect,
- .o_health_check = lod_obd_health_check,
+ .o_get_info = lod_obd_get_info,
.o_pool_new = lod_pool_new,
.o_pool_rem = lod_pool_remove,
.o_pool_add = lod_pool_add,
RETURN(rc);
}
-static int mdd_obd_health_check(const struct lu_env *env,
- struct obd_device *obd)
+static int mdd_obd_get_info(const struct lu_env *env, struct obd_export *exp,
+ __u32 keylen, void *key, __u32 *vallen, void *val,
+ struct lov_stripe_md *lsm)
{
- struct mdd_device *mdd = lu2mdd_dev(obd->obd_lu_dev);
- int rc;
- ENTRY;
+ int rc = -EINVAL;
+
+ if (KEY_IS(KEY_OSP_CONNECTED)) {
+ struct obd_device *obd = exp->exp_obd;
+ struct mdd_device *mdd;
+
+ if (!obd->obd_set_up || obd->obd_stopping)
+ RETURN(-EAGAIN);
+
+ mdd = lu2mdd_dev(obd->obd_lu_dev);
+ LASSERT(mdd);
+ rc = obd_get_info(env, mdd->mdd_child_exp, keylen, key, vallen,
+ val, lsm);
+ RETURN(rc);
+ }
- LASSERT(mdd);
- rc = obd_health_check(env, mdd->mdd_child_exp->exp_obd);
RETURN(rc);
}
.o_owner = THIS_MODULE,
.o_connect = mdd_obd_connect,
.o_disconnect = mdd_obd_disconnect,
- .o_health_check = mdd_obd_health_check
+ .o_get_info = mdd_obd_get_info,
};
static int mdd_changelog_user_register(const struct lu_env *env,
*/
if (!test_bit(MDT_FL_SYNCED, &mdt->mdt_state) && data != NULL &&
!(data->ocd_connect_flags & OBD_CONNECT_LIGHTWEIGHT)) {
- rc = obd_health_check(env, mdt->mdt_child_exp->exp_obd);
+ rc = obd_get_info(env, mdt->mdt_child_exp,
+ sizeof(KEY_OSP_CONNECTED),
+ KEY_OSP_CONNECTED, NULL, NULL, NULL);
if (rc)
RETURN(-EAGAIN);
set_bit(MDT_FL_SYNCED, &mdt->mdt_state);
return rc;
}
-static int osp_obd_health_check(const struct lu_env *env,
- struct obd_device *obd)
+static int osp_obd_get_info(const struct lu_env *env, struct obd_export *exp,
+ __u32 keylen, void *key, __u32 *vallen, void *val,
+ struct lov_stripe_md *lsm)
{
- struct osp_device *d = lu2osp_dev(obd->obd_lu_dev);
+ int rc = -EINVAL;
- ENTRY;
+ if (KEY_IS(KEY_OSP_CONNECTED)) {
+ struct obd_device *obd = exp->exp_obd;
+ struct osp_device *osp;
- /*
- * 1.8/2.0 behaviour is that OST being connected once at least
- * is considired "healthy". and one "healty" OST is enough to
- * allow lustre clients to connect to MDS
- */
- LASSERT(d);
- RETURN(!d->opd_imp_seen_connected);
+ if (!obd->obd_set_up || obd->obd_stopping)
+ RETURN(-EAGAIN);
+
+ osp = lu2osp_dev(obd->obd_lu_dev);
+ LASSERT(osp);
+ /*
+ * 1.8/2.0 behaviour is that OST being connected once at least
+ * is considered "healthy". and one "healthy" OST is enough to
+ * allow lustre clients to connect to MDS
+ */
+ RETURN(!osp->opd_imp_seen_connected);
+ }
+
+ RETURN(rc);
}
/* context key constructor/destructor: mdt_key_init, mdt_key_fini */
.o_reconnect = osp_reconnect,
.o_connect = osp_obd_connect,
.o_disconnect = osp_obd_disconnect,
- .o_health_check = osp_obd_health_check,
+ .o_get_info = osp_obd_get_info,
.o_import_event = osp_import_event,
.o_iocontrol = osp_iocontrol,
.o_statfs = osp_obd_statfs,