name, obddev->obd_name,
cli->cl_target_uuid.uuid);
spin_lock(&imp->imp_lock);
- imp->imp_invalid = 1;
+ imp->imp_deactive = 1;
spin_unlock(&imp->imp_lock);
}
}
+ obddev->obd_namespace = ldlm_namespace_new(obddev, obddev->obd_name,
+ LDLM_NAMESPACE_CLIENT,
+ LDLM_NAMESPACE_GREEDY);
+ if (obddev->obd_namespace == NULL) {
+ CERROR("Unable to create client namespace - %s\n",
+ obddev->obd_name);
+ GOTO(err_import, rc = -ENOMEM);
+ }
+
cli->cl_qchk_stat = CL_NOT_QUOTACHECKED;
RETURN(rc);
int client_obd_cleanup(struct obd_device *obddev)
{
ENTRY;
+
+ ldlm_namespace_free_post(obddev->obd_namespace);
+ obddev->obd_namespace = NULL;
+
ldlm_put_ref();
RETURN(0);
}
struct obd_import *imp = cli->cl_import;
struct obd_export **exp = localdata;
struct obd_connect_data *ocd;
- struct ldlm_namespace *to_be_freed = NULL;
int rc;
ENTRY;
down_write(&cli->cl_sem);
+ CDEBUG(D_INFO, "connect %s - %d\n", obd->obd_name,
+ cli->cl_conn_count);
+
if (cli->cl_conn_count > 0)
GOTO(out_sem, rc = -EALREADY);
cli->cl_conn_count++;
*exp = class_conn2export(dlm_handle);
- if (obd->obd_namespace != NULL)
- CERROR("already have namespace!\n");
- obd->obd_namespace = ldlm_namespace_new(obd, obd->obd_name,
- LDLM_NAMESPACE_CLIENT,
- LDLM_NAMESPACE_GREEDY);
- if (obd->obd_namespace == NULL)
- GOTO(out_disco, rc = -ENOMEM);
+ LASSERT(obd->obd_namespace);
imp->imp_dlm_handle = *dlm_handle;
rc = ptlrpc_init_import(imp);
if (rc) {
out_ldlm:
- ldlm_namespace_free_prior(obd->obd_namespace, imp, 0);
- to_be_freed = obd->obd_namespace;
- obd->obd_namespace = NULL;
-out_disco:
cli->cl_conn_count--;
class_disconnect(*exp);
*exp = NULL;
- }
+ }
out_sem:
up_write(&cli->cl_sem);
- if (to_be_freed)
- ldlm_namespace_free_post(to_be_freed);
return rc;
}
struct obd_device *obd = class_exp2obd(exp);
struct client_obd *cli;
struct obd_import *imp;
- struct ldlm_namespace *to_be_freed = NULL;
int rc = 0, err;
ENTRY;
imp = cli->cl_import;
down_write(&cli->cl_sem);
+ CDEBUG(D_INFO, "disconnect %s - %d\n", obd->obd_name,
+ cli->cl_conn_count);
+
if (!cli->cl_conn_count) {
CERROR("disconnecting disconnected device (%s)\n",
obd->obd_name);
NULL);
ldlm_namespace_free_prior(obd->obd_namespace, imp,
obd->obd_force);
- to_be_freed = obd->obd_namespace;
}
rc = ptlrpc_disconnect_import(imp, 0);
ptlrpc_invalidate_import(imp);
- /* set obd_namespace to NULL only after invalidate, because we can have
- * some connect requests in flight, and his need store a connect flags
- * in obd_namespace. bug 14260 */
- obd->obd_namespace = NULL;
if (imp->imp_rq_pool) {
ptlrpc_free_rq_pool(imp->imp_rq_pool);
err = class_disconnect(exp);
if (!rc && err)
rc = err;
-
up_write(&cli->cl_sem);
- if (to_be_freed)
- ldlm_namespace_free_post(to_be_freed);
+
RETURN(rc);
}