*/
static int osp_disconnect(struct osp_device *d)
{
+ struct obd_device *obd = d->opd_obd;
struct obd_import *imp;
int rc = 0;
- imp = d->opd_obd->u.cli.cl_import;
+ imp = obd->u.cli.cl_import;
/* Mark import deactivated now, so we don't try to reconnect if any
* of the cleanup RPCs fails (e.g. ldlm cancel, etc). We don't
rc = ptlrpc_disconnect_import(imp, 0);
if (rc != 0)
- CERROR("%s: can't disconnect: rc = %d\n",
- d->opd_obd->obd_name, rc);
+ CERROR("%s: can't disconnect: rc = %d\n", obd->obd_name, rc);
ptlrpc_invalidate_import(imp);
case LCFG_PRE_CLEANUP:
rc = osp_disconnect(d);
osp_update_fini(env, d);
+ if (obd->obd_namespace != NULL)
+ ldlm_namespace_free_prior(obd->obd_namespace, NULL, 1);
break;
case LCFG_CLEANUP:
lu_dev_del_linkage(dev->ld_site, dev);
enum obd_import_event event)
{
struct osp_device *d = lu2osp_dev(obd->obd_lu_dev);
+ int rc;
switch (event) {
case IMP_EVENT_DISCON:
d->opd_obd->obd_inactive = 1;
if (d->opd_connect_mdt)
break;
-
if (d->opd_pre != NULL) {
- osp_pre_update_status(d, -ENODEV);
+ /* Import is invalid, we can`t get stripes so
+ * wakeup waiters */
+ rc = imp->imp_deactive ? -ESHUTDOWN : -ENODEV;
+ osp_pre_update_status(d, rc);
wake_up(&d->opd_pre_waitq);
}