Whamcloud - gitweb
- fix mds-mds connection. There was missed IBITS, ACL connetion flags and missed
authortappro <tappro>
Wed, 25 Oct 2006 19:00:33 +0000 (19:00 +0000)
committertappro <tappro>
Wed, 25 Oct 2006 19:00:33 +0000 (19:00 +0000)
  ibits_known field
- remove second connection to the mdc0 from seq client, use the same export as
  mdc_device does.

lustre/cmm/mdc_device.c
lustre/mdt/mdt_handler.c

index dada5be..af9b1b7 100644 (file)
@@ -58,6 +58,18 @@ static int mdc_obd_update(struct obd_device *host,
 
         LASSERT(mc != NULL);
         CDEBUG(D_CONFIG, "notify %s ev=%d\n", watched->obd_name, ev);
+        if (ev == OBD_NOTIFY_OCD) {
+                struct obd_connect_data *conn_data =
+                                  &watched->u.cli.cl_import->imp_connect_data;
+                /*
+                 * Update exp_connect_flags.
+                 */
+                mc->mc_desc.cl_exp->exp_connect_flags =
+                                                conn_data->ocd_connect_flags;
+                CDEBUG(D_INFO, "Update connect_flags: "LPX64"\n",
+                       conn_data->ocd_connect_flags);
+        }
+        
         RETURN(rc);
 }
 /* MDC OBD is set up already and connected to the proper MDS
@@ -72,6 +84,7 @@ static int mdc_obd_add(const struct lu_env *env,
         const char *uuid_str = lustre_cfg_string(cfg, 1);
         const char *index = lustre_cfg_string(cfg, 2);
         const char *mdc_uuid_str = lustre_cfg_string(cfg, 4);
+        struct lu_site *ls = mdc2lu_dev(mc)->ld_site;
         char *p;
         int rc = 0;
 
@@ -106,10 +119,17 @@ static int mdc_obd_add(const struct lu_env *env,
                 OBD_ALLOC_PTR(ocd);
                 if (!ocd)
                         RETURN(-ENOMEM);
-                /* The connection between MDS must be local */
-                ocd->ocd_connect_flags = OBD_CONNECT_LCL_CLIENT | 
+                /*
+                 * The connection between MDS must be local,
+                 * IBITS are needed for rename_lock (INODELOCK_UPDATE)
+                 */
+                ocd->ocd_ibits_known = MDS_INODELOCK_UPDATE;
+                ocd->ocd_connect_flags = OBD_CONNECT_VERSION |
+                                         OBD_CONNECT_ACL |
+                                         OBD_CONNECT_LCL_CLIENT | 
                                          OBD_CONNECT_MDS_CAPA |
-                                         OBD_CONNECT_OSS_CAPA;
+                                         OBD_CONNECT_OSS_CAPA | 
+                                         OBD_CONNECT_IBITS;
                 rc = obd_connect(env, conn, mdc, &mdc->obd_uuid, ocd);
                 OBD_FREE_PTR(ocd);
                 if (rc) {
@@ -117,7 +137,10 @@ static int mdc_obd_add(const struct lu_env *env,
                                mdc->obd_name, rc);
                 } else {
                         desc->cl_exp = class_conn2export(conn);
-
+                        /* set seq controller export for MDC0 if exists */
+                        if (mc->mc_num == 0)
+                                ls->ls_control_exp = 
+                                        class_export_get(desc->cl_exp);
                         rc = obd_fid_init(desc->cl_exp);
                         if (rc)
                                 CERROR("fid init error %d \n", rc);
@@ -127,6 +150,7 @@ static int mdc_obd_add(const struct lu_env *env,
                                 mdc->obd_upcall.onu_upcall = mdc_obd_update;
                         }
                 }
+                
                 if (rc) {
                         obd_disconnect(desc->cl_exp);
                         desc->cl_exp = NULL;
@@ -158,7 +182,7 @@ static int mdc_obd_del(const struct lu_env *env, struct mdc_device *mc,
                 mdc_obd->obd_force = mdt_obd->obd_force;
                 mdc_obd->obd_fail = 0;
         }
-
+        
         rc = obd_fid_fini(desc->cl_exp);
         if (rc)
                 CERROR("Fid fini error %d\n", rc);
index 48e3e1f..bf4e8fd 100644 (file)
@@ -2792,28 +2792,6 @@ out_seq_fini:
 
         return rc;
 }
-
-static int mdt_md_connect(const struct lu_env *env,
-                          struct lustre_handle *conn,
-                          struct obd_device *mdc)
-{
-        struct obd_connect_data *ocd;
-        int rc;
-
-        OBD_ALLOC_PTR(ocd);
-        if (!ocd)
-                RETURN(-ENOMEM);
-        /* The connection between MDS must be local */
-        ocd->ocd_connect_flags = OBD_CONNECT_LCL_CLIENT |
-                                 OBD_CONNECT_MDS_CAPA |
-                                 OBD_CONNECT_OSS_CAPA;
-        rc = obd_connect(env, conn, mdc, &mdc->obd_uuid, ocd);
-
-        OBD_FREE_PTR(ocd);
-
-        RETURN(rc);
-}
-
 /*
  * Init client sequence manager which is used by local MDS to talk to sequence
  * controller on remote node.
@@ -2863,20 +2841,8 @@ static int mdt_seq_init_cli(const struct lu_env *env,
                 CERROR("target %s not set up\n", mdc->obd_name);
                 rc = -EINVAL;
         } else {
-                struct lustre_handle conn = {0, };
-
-                CDEBUG(D_CONFIG, "connect to controller %s(%s)\n",
-                       mdc->obd_name, mdc->obd_uuid.uuid);
-
-                rc = mdt_md_connect(env, &conn, mdc);
-                if (rc) {
-                        CERROR("target %s connect error %d\n",
-                               mdc->obd_name, rc);
-                } else {
-                        ls->ls_control_exp = class_conn2export(&conn);
-
+                        LASSERT(ls->ls_control_exp);
                         OBD_ALLOC_PTR(ls->ls_client_seq);
-
                         if (ls->ls_client_seq != NULL) {
                                 char *prefix;
 
@@ -2903,7 +2869,6 @@ static int mdt_seq_init_cli(const struct lu_env *env,
                         rc = seq_server_set_cli(ls->ls_server_seq,
                                                 ls->ls_client_seq,
                                                 env);
-                }
         }
 
         RETURN(rc);
@@ -2912,7 +2877,6 @@ static int mdt_seq_init_cli(const struct lu_env *env,
 static void mdt_seq_fini_cli(struct mdt_device *m)
 {
         struct lu_site *ls;
-        int rc;
 
         ENTRY;
 
@@ -2923,11 +2887,7 @@ static void mdt_seq_fini_cli(struct mdt_device *m)
                                    NULL, NULL);
 
         if (ls && ls->ls_control_exp) {
-                rc = obd_disconnect(ls->ls_control_exp);
-                if (rc) {
-                        CERROR("failure to disconnect "
-                               "obd: %d\n", rc);
-                }
+                class_export_put(ls->ls_control_exp);
                 ls->ls_control_exp = NULL;
         }
         EXIT;
@@ -3715,11 +3675,12 @@ static int mdt_process_config(const struct lu_env *env,
                  * Add mdc hook to get first MDT uuid and connect it to
                  * ls->controller to use for seq manager.
                  */
-                rc = mdt_seq_init_cli(env, mdt_dev(d), cfg);
-                if (rc) {
-                        CERROR("can't initialize controller export, "
-                               "rc %d\n", rc);
-                }
+                rc = next->ld_ops->ldo_process_config(env, next, cfg);
+                if (rc)
+                        CERROR("Can't add mdc, rc %d\n", rc);
+                else                
+                        rc = mdt_seq_init_cli(env, mdt_dev(d), cfg);
+                break;
         default:
                 /* others are passed further */
                 rc = next->ld_ops->ldo_process_config(env, next, cfg);