Whamcloud - gitweb
Expect debugging to see what is hanging it up.
[fs/lustre-release.git] / lustre / ptlbd / client.c
index f36a3c7..c44f955 100644 (file)
 #include <linux/lprocfs_status.h>
 #include <linux/obd_ptlbd.h>
 
+static int ptlbd_cl_attach(struct obd_device *obd, obd_count len, void *buf)
+{
+        struct lprocfs_static_vars lvars;
+
+        lprocfs_init_vars(ptlbd_cl, &lvars);
+        return lprocfs_obd_attach(obd, lvars.obd_vars);
+}
+
+static int ptlbd_cl_detach(struct obd_device *obd)
+{
+        return lprocfs_obd_detach(obd);
+}
+
 static int ptlbd_cl_setup(struct obd_device *obd, obd_count len, void *buf)
 {
         struct ptlbd_obd *ptlbd = &obd->u.ptlbd;
+        struct lustre_cfg* lcfg = buf;
         struct obd_import *imp;
-        struct obd_ioctl_data* data = buf;
         ENTRY;
 
         if (ptlbd->bd_import != NULL)
                 RETURN(-EALREADY);
 
-        if (data->ioc_inllen1 < 1) {
+        if (LUSTRE_CFG_BUFLEN(lcfg, 1) < 1) {
                 CERROR("requires a PTLBD server UUID\n");
                 RETURN(-EINVAL);
         }
 
-        if (data->ioc_inllen1 > 37) {
+        if (LUSTRE_CFG_BUFLEN(lcfg, 1) > 37) {
                 CERROR("PTLBD server UUID must be less than 38 characters\n");
                 RETURN(-EINVAL);
         }
 
-        obd_str2uuid(&ptlbd->bd_server_uuid, data->ioc_inlbuf1);
+        obd_str2uuid(&ptlbd->bd_server_uuid, lustre_cfg_string(lcfg, 1));
 
         /*
          * from client_obd_connect.. *shrug*
@@ -64,19 +77,20 @@ static int ptlbd_cl_setup(struct obd_device *obd, obd_count len, void *buf)
                 class_import_put(imp);
                 RETURN(-ENOENT);
         }
-        imp->imp_level = LUSTRE_CONN_FULL;
+        imp->imp_state = LUSTRE_IMP_FULL;
 
-        ptlrpc_init_client(PTLBD_REQUEST_PORTAL, PTLBD_REPLY_PORTAL, 
+        ptlrpc_init_client(PTLBD_REQUEST_PORTAL, PTLBD_REPLY_PORTAL,
                         "ptlbd", &ptlbd->bd_client);
         imp->imp_client = &ptlbd->bd_client;
         imp->imp_obd = obd;
-        memcpy(imp->imp_target_uuid.uuid, data->ioc_inlbuf1, data->ioc_inllen1);
+        memcpy(imp->imp_target_uuid.uuid, lustre_cfg_string(lcfg, 1),
+               LUSTRE_CFG_BUFLEN(lcfg, 1));
         ptlbd_blk_register(ptlbd);
 
         RETURN(0);
 }
 
-static int ptlbd_cl_cleanup(struct obd_device *obd, int force, int failover)
+static int ptlbd_cl_cleanup(struct obd_device *obd, int flags)
 {
         struct ptlbd_obd *ptlbd = &obd->u.ptlbd;
         struct obd_import *imp;
@@ -97,11 +111,9 @@ static int ptlbd_cl_cleanup(struct obd_device *obd, int force, int failover)
         RETURN(0);
 }
 
-
 /* modelled after ptlrpc_import_connect() */
-int ptlbd_cl_connect(struct lustre_handle *conn,
-                      struct obd_device *obd, 
-                      struct obd_uuid *target_uuid)
+int ptlbd_cl_connect(struct lustre_handle *conn, struct obd_device *obd,
+                     struct obd_uuid *target_uuid, unsigned long connect_flags)
 {
         struct ptlbd_obd *ptlbd = &obd->u.ptlbd;
         struct obd_import *imp = ptlbd->bd_import;
@@ -110,7 +122,7 @@ int ptlbd_cl_connect(struct lustre_handle *conn,
         int     rc, size[] = {sizeof(imp->imp_target_uuid),
                               sizeof(obd->obd_uuid),
                               sizeof(*conn)};
-        char *tmp[] = {imp->imp_target_uuid.uuid, 
+        char *tmp[] = {imp->imp_target_uuid.uuid,
                        obd->obd_uuid.uuid,
                        (char*)conn};
         ENTRY;
@@ -121,40 +133,42 @@ int ptlbd_cl_connect(struct lustre_handle *conn,
         rc = class_connect(conn, obd, target_uuid);
         if (rc)
                 RETURN(rc);
+        exp = class_conn2export(conn);
 
-        request = ptlrpc_prep_req(imp, PTLBD_CONNECT, 3, size, tmp);
+        request = ptlrpc_prep_req(imp, LUSTRE_PBD_VERSION, PTLBD_CONNECT,
+                                  3, size, tmp);
         if (!request)
                 GOTO(out_disco, rc = -ENOMEM);
-        request->rq_level = LUSTRE_CONN_NEW;
+
+        request->rq_send_state = LUSTRE_IMP_NEW;
         request->rq_replen = lustre_msg_size(0, NULL);
 
         imp->imp_dlm_handle = *conn;
 
-        imp->imp_level = LUSTRE_CONN_CON;
+        imp->imp_state = LUSTRE_IMP_NEW;
         rc = ptlrpc_queue_wait(request);
         if (rc)
                 GOTO(out_req, rc);
 
-        exp = class_conn2export(conn);
-        exp->exp_connection = ptlrpc_connection_addref(request->rq_connection);
-        class_export_put(exp);
+        exp->exp_connection = ptlrpc_connection_addref(imp->imp_connection);
 
-        imp->imp_level = LUSTRE_CONN_FULL;
+        imp->imp_state = LUSTRE_IMP_FULL;
         imp->imp_remote_handle = request->rq_repmsg->handle;
-        
+
 out_req:
         ptlrpc_req_finished(request);
 out_disco:
         if (rc)
-                class_disconnect(conn, 0);
+                class_disconnect(exp, 0);
+        class_export_put(exp);
         RETURN(rc);
 }
 
 
 /* modelled after ptlrpc_import_disconnect() */
-int ptlbd_cl_disconnect(struct lustre_handle *conn, int failover)
+int ptlbd_cl_disconnect(struct obd_export *exp, unsigned long flags)
 {
-        struct obd_device *obd = class_conn2obd(conn);
+        struct obd_device *obd = exp->exp_obd;
         struct ptlbd_obd *ptlbd = &obd->u.ptlbd;
         struct obd_import *imp = ptlbd->bd_import;
         struct ptlrpc_request *request;
@@ -164,19 +178,21 @@ int ptlbd_cl_disconnect(struct lustre_handle *conn, int failover)
         if (!obd)
                 RETURN(-EINVAL);
 
-        request = ptlrpc_prep_req(imp, PTLBD_DISCONNECT, 0, NULL, NULL);
+        request = ptlrpc_prep_req(imp, LUSTRE_PBD_VERSION, 
+                                 PTLBD_DISCONNECT,
+                                  0, NULL, NULL);
         if (!request)
                 GOTO(out_req, rc = -ENOMEM);
 
         request->rq_replen = lustre_msg_size(0, NULL);
-        request->rq_level = LUSTRE_CONN_RECOVD;
+        request->rq_send_state = LUSTRE_IMP_FULL;
 
         rc = ptlrpc_queue_wait(request);
 
 out_req:
         if (request)
                 ptlrpc_req_finished(request);
-        err = class_disconnect(conn, 0);
+        err = class_disconnect(exp, 0);
         memset(&imp->imp_remote_handle, 0, sizeof(imp->imp_remote_handle));
         if (!rc && err)
                 rc = err;
@@ -185,19 +201,25 @@ out_req:
 
 
 static struct obd_ops ptlbd_cl_obd_ops = {
-        o_owner:        THIS_MODULE,
-        o_setup:        ptlbd_cl_setup,
-        o_cleanup:      ptlbd_cl_cleanup,
-        o_connect:      ptlbd_cl_connect,
-        o_disconnect:   ptlbd_cl_disconnect,
+        .o_owner        = THIS_MODULE,
+        .o_attach       = ptlbd_cl_attach,
+        .o_detach       = ptlbd_cl_detach,
+        .o_setup        = ptlbd_cl_setup,
+        .o_cleanup      = ptlbd_cl_cleanup,
+        .o_connect      = ptlbd_cl_connect,
+        .o_disconnect   = ptlbd_cl_disconnect,
 };
 
+static struct lprocfs_vars lprocfs_obd_vars[] = { {0} };
+static struct lprocfs_vars lprocfs_module_vars[] = { {0} };
+LPROCFS_INIT_VARS(ptlbd_cl, lprocfs_module_vars, lprocfs_obd_vars)
+
 int ptlbd_cl_init(void)
 {
         struct lprocfs_static_vars lvars;
 
-        lprocfs_init_vars(&lvars);
-        return class_register_type(&ptlbd_cl_obd_ops, lvars.module_vars,
+        lprocfs_init_vars(ptlbd_cl,&lvars);
+        return class_register_type(&ptlbd_cl_obd_ops, NULL, lvars.module_vars,
                                    OBD_PTLBD_CL_DEVICENAME);
 }
 
@@ -206,17 +228,18 @@ void ptlbd_cl_exit(void)
         class_unregister_type(OBD_PTLBD_CL_DEVICENAME);
 }
 
-
-
 int ptlbd_do_connect(struct ptlbd_obd *ptlbd)
 {
         int     rc;
         struct obd_device       *obd = ptlbd->bd_import->imp_obd;
+        struct lustre_handle conn;
         ENTRY;
 
-        memset(&ptlbd->bd_connect_handle, 0, sizeof(ptlbd->bd_connect_handle));
-        rc = obd_connect(&ptlbd->bd_connect_handle, obd, 
-                         &ptlbd->bd_server_uuid);
+        memset(&conn, 0, sizeof(conn));
+        rc = obd_connect(&conn, obd, &ptlbd->bd_server_uuid, NULL, 0);
+        if (rc < 0)
+                RETURN(rc);
+        ptlbd->bd_exp = class_conn2export(&conn);
         RETURN(rc);
 }
 
@@ -226,7 +249,7 @@ int ptlbd_do_disconnect(struct ptlbd_obd *ptlbd)
         int     rc;
         ENTRY;
 
-        rc = obd_disconnect(&ptlbd->bd_connect_handle, 0);
+        rc = obd_disconnect(ptlbd->bd_exp, 0);
         RETURN(rc);
 }