argv[0] = obd_lustre_upcall;
argv[1] = "RECOVERY_OVER";
- argv[2] = obd->obd_uuid.uuid;
+ argv[2] = (char *)obd->obd_uuid.uuid;
argv[3] = NULL;
envp[0] = "HOME=/";
argv[0] = obd_lustre_upcall;
argv[1] = "FAILED_IMPORT";
- argv[2] = imp->imp_target_uuid.uuid;
+ argv[2] = (char *)imp->imp_target_uuid.uuid;
argv[3] = imp->imp_obd->obd_name;
- argv[4] = imp->imp_connection->c_remote_uuid.uuid;
- argv[5] = imp->imp_obd->obd_uuid.uuid;
+ argv[4] = (char *)imp->imp_connection->c_remote_uuid.uuid;
+ argv[5] = (char *)imp->imp_obd->obd_uuid.uuid;
argv[6] = NULL;
envp[0] = "HOME=/";
ptlrpc_deactivate_import(imp);
}
- rc = ptlrpc_connect_import(imp, NULL);
+ /* to control recovery via lctl {disable|enable}_recovery */
+ if (imp->imp_deactive == 0)
+ rc = ptlrpc_connect_import(imp, NULL);
}
/* Wait for recovery to complete and resend. If evicted, then
return in_recovery;
}
+int ptlrpc_import_control_recovery(struct obd_import *imp, int disable)
+{
+ unsigned long flags;
+
+ /* with imp_deactivate == 1 pinger won't initiate re-connect */
+ spin_lock_irqsave(&imp->imp_lock, flags);
+ if (disable)
+ imp->imp_deactive = 1;
+ else
+ imp->imp_deactive = 0;
+ if (imp->imp_state == LUSTRE_IMP_DISCON) {
+ imp->imp_force_verify = 1;
+ ptlrpc_pinger_wake_up();
+ }
+ spin_unlock_irqrestore(&imp->imp_lock, flags);
+ RETURN(0);
+}
+
static int ptlrpc_recover_import_no_retry(struct obd_import *imp,
char *new_uuid)
{