*/
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);
LASSERT(our->our_th != NULL);
osp_trans_callback(env, our->our_th, -EIO);
/* our will be destroyed in osp_thandle_put() */
- osp_thandle_put(our->our_th);
+ osp_thandle_put(env, our->our_th);
}
spin_unlock(&ou->ou_lock);
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);
atomic_inc(&d->opd_syn_barrier);
CDEBUG(D_CACHE, "%s: %u in flight\n", d->opd_obd->obd_name,
- d->opd_syn_rpc_in_flight);
+ atomic_read(&d->opd_syn_rpc_in_flight));
/* wait till all-in-flight are replied, so executed by the target */
/* XXX: this is used by LFSCK at the moment, which doesn't require
* all the changes to be committed, but in general it'd be
* better to wait till commit */
- while (d->opd_syn_rpc_in_flight > 0) {
+ while (atomic_read(&d->opd_syn_rpc_in_flight) > 0) {
- old = d->opd_syn_rpc_in_flight;
+ old = atomic_read(&d->opd_syn_rpc_in_flight);
expire = cfs_time_shift(obd_timeout);
lwi = LWI_TIMEOUT(expire - cfs_time_current(),
osp_sync_timeout, d);
l_wait_event(d->opd_syn_barrier_waitq,
- d->opd_syn_rpc_in_flight == 0, &lwi);
+ atomic_read(&d->opd_syn_rpc_in_flight) == 0,
+ &lwi);
- if (d->opd_syn_rpc_in_flight == 0)
+ if (atomic_read(&d->opd_syn_rpc_in_flight) == 0)
break;
- if (d->opd_syn_rpc_in_flight != old) {
+ if (atomic_read(&d->opd_syn_rpc_in_flight) != old) {
/* some progress have been made */
continue;
}
struct lu_device *ld)
{
struct osp_device *osp = lu2osp_dev(ld);
- struct obd_import *imp;
int rc;
ENTRY;
if (osp->opd_async_requests != NULL) {
- osp_update_request_destroy(osp->opd_async_requests);
+ osp_update_request_destroy(env, osp->opd_async_requests);
osp->opd_async_requests = NULL;
}
if (osp->opd_storage_exp)
obd_disconnect(osp->opd_storage_exp);
- imp = osp->opd_obd->u.cli.cl_import;
-
if (osp->opd_symlink)
lprocfs_remove(&osp->opd_symlink);
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);
}