atomic_inc(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret_common,
laia, LFSCK_QUERY);
if (rc != 0) {
LASSERT(ltd != NULL);
laia->laia_ltd = ltd;
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret_common,
laia, LFSCK_NOTIFY);
if (rc != 0) {
atomic_inc(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret_common,
laia, LFSCK_NOTIFY);
if (rc != 0) {
atomic_inc(<d->ltd_ref);
laia->laia_ltd = ltd;
spin_unlock(<ds->ltd_lock);
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret_common,
laia, LFSCK_NOTIFY);
if (rc != 0) {
laia->laia_ltd = ltd;
laia->laia_lr = lr;
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret_common,
laia, LFSCK_NOTIFY);
if (rc != 0) {
return 0;
}
-int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+int lfsck_async_request(const struct lu_env *env, struct lfsck_tgt_desc *ltd,
struct lfsck_request *lr,
struct ptlrpc_request_set *set,
ptlrpc_interpterer_t interpreter,
void *args, int request)
{
+ struct obd_import *imp = class_exp2cliimp(ltd->ltd_exp);
struct lfsck_async_interpret_args *laia;
struct ptlrpc_request *req;
struct lfsck_request *tmp;
struct req_format *format;
int rc;
+ if (unlikely(ltd->ltd_dead))
+ return -ENODEV;
+
switch (request) {
case LFSCK_NOTIFY:
format = &RQF_LFSCK_NOTIFY;
break;
default:
CDEBUG(D_LFSCK, "%s: unknown async request %d: rc = %d\n",
- exp->exp_obd->obd_name, request, -EINVAL);
+ imp->imp_obd->obd_name, request, -EINVAL);
return -EINVAL;
}
- req = ptlrpc_request_alloc(class_exp2cliimp(exp), format);
+ req = ptlrpc_request_alloc(imp, format);
if (req == NULL)
return -ENOMEM;
return rc;
}
+ if (unlikely(imp->imp_state != LUSTRE_IMP_FULL))
+ LCONSOLE_INFO("%s (%d): sending async LFSCK RPC (%u) to %s%4x "
+ "on non-full connection (%u), may be blocked.\n",
+ imp->imp_obd->obd_name, current_pid(),
+ lr->lr_event, ltd->ltd_for_ost ? "OST" : "MDT",
+ ltd->ltd_index, imp->imp_state);
+
tmp = req_capsule_client_get(&req->rq_pill, &RMF_LFSCK_REQUEST);
*tmp = *lr;
ptlrpc_request_set_replen(req);
laia->laia_ltd = ltd;
up_read(<ds->ltd_rw_sem);
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret_common,
laia, LFSCK_QUERY);
if (rc != 0) {
LASSERT(ltd != NULL);
laia->laia_ltd = ltd;
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret, laia,
LFSCK_NOTIFY);
if (rc != 0) {
ltd->ltd_layout_done = 0;
ltd->ltd_namespace_done = 0;
ltd->ltd_synced_failures = 0;
- rc = lfsck_async_request(env, ltd->ltd_exp, lr, set,
+ rc = lfsck_async_request(env, ltd, lr, set,
lfsck_async_interpret, laia,
LFSCK_NOTIFY);
if (rc != 0) {
ltd->ltd_tgt = tgt;
ltd->ltd_key = key;
ltd->ltd_exp = exp;
+ if (for_ost)
+ ltd->ltd_for_ost = 1;
INIT_LIST_HEAD(<d->ltd_orphan_list);
INIT_LIST_HEAD(<d->ltd_layout_list);
INIT_LIST_HEAD(<d->ltd_layout_phase_list);