Whamcloud - gitweb
LU-2710 build: avoid function resolution mistakes by Coverity
[fs/lustre-release.git] / lustre / lod / lod_lov.c
index 81a5ed1..d477c88 100644 (file)
@@ -171,9 +171,12 @@ out:
  * \param osp - is the name of OSP device name about to be added
  * \param index - is the OSP index
  * \param gen - is the generation number
+ * \param tgt_index - is the group of the OSP.
+ * \param type - is the type of device (mdc or osc)
  */
 int lod_add_device(const struct lu_env *env, struct lod_device *lod,
-                  char *osp, unsigned index, unsigned gen, int active)
+                  char *osp, unsigned index, unsigned gen, int tgt_index,
+                  char *type, int active)
 {
        struct obd_connect_data *data = NULL;
        struct obd_export       *exp = NULL;
@@ -182,7 +185,7 @@ int lod_add_device(const struct lu_env *env, struct lod_device *lod,
        struct dt_device        *d;
        int                      rc;
        struct lod_tgt_desc     *tgt_desc;
-       struct lod_tgt_descs    *ltd = &lod->lod_ost_descs;
+       struct lod_tgt_descs    *ltd;
        struct obd_uuid         obd_uuid;
        ENTRY;
 
@@ -211,6 +214,49 @@ int lod_add_device(const struct lu_env *env, struct lod_device *lod,
        data->ocd_version = LUSTRE_VERSION_CODE;
        data->ocd_index = index;
 
+       if (strcmp(LUSTRE_OSC_NAME, type) == 0) {
+               data->ocd_connect_flags |= OBD_CONNECT_AT |
+                                          OBD_CONNECT_FULL20 |
+                                          OBD_CONNECT_INDEX |
+#ifdef HAVE_LRU_RESIZE_SUPPORT
+                                          OBD_CONNECT_LRU_RESIZE |
+#endif
+                                          OBD_CONNECT_MDS |
+                                          OBD_CONNECT_OSS_CAPA |
+                                          OBD_CONNECT_REQPORTAL |
+                                          OBD_CONNECT_SKIP_ORPHAN |
+                                          OBD_CONNECT_FID |
+                                          OBD_CONNECT_LVB_TYPE |
+                                          OBD_CONNECT_VERSION |
+                                          OBD_CONNECT_PINGLESS;
+
+               data->ocd_group = tgt_index;
+               ltd = &lod->lod_ost_descs;
+       } else {
+               struct obd_import *imp = obd->u.cli.cl_import;
+
+               data->ocd_ibits_known = MDS_INODELOCK_UPDATE;
+               data->ocd_connect_flags |= OBD_CONNECT_ACL |
+                                          OBD_CONNECT_MDS_CAPA |
+                                          OBD_CONNECT_OSS_CAPA |
+                                          OBD_CONNECT_IBITS |
+                                          OBD_CONNECT_MDS_MDS |
+                                          OBD_CONNECT_FID |
+                                          OBD_CONNECT_AT |
+                                          OBD_CONNECT_FULL20 |
+                                          OBD_CONNECT_PINGLESS;
+               /* XXX set MDS-MDS flags, remove this when running this
+                * on client*/
+               data->ocd_connect_flags |= OBD_CONNECT_MDS_MDS;
+               spin_lock(&imp->imp_lock);
+               imp->imp_server_timeout = 1;
+               spin_unlock(&imp->imp_lock);
+               imp->imp_client->cli_request_portal = MDS_MDS_PORTAL;
+               CDEBUG(D_OTHER, "%s: Set 'mds' portal and timeout\n",
+                     obd->obd_name);
+               ltd = &lod->lod_mdt_descs;
+       }
+
        rc = obd_connect(env, &exp, obd, &obd->obd_uuid, data, NULL);
        OBD_FREE_PTR(data);
        if (rc) {
@@ -273,27 +319,29 @@ int lod_add_device(const struct lu_env *env, struct lod_device *lod,
                }
        }
 
-       /* pool and qos are not supported for MDS stack yet */
-       rc = lod_ost_pool_add(&lod->lod_pool_info, index,
-                             lod->lod_osts_size);
-       if (rc) {
-               CERROR("%s: can't set up pool, failed with %d\n",
-                      obd->obd_name, rc);
-               GOTO(out_mutex, rc);
-       }
+       if (!strcmp(LUSTRE_OSC_NAME, type)) {
+               /* pool and qos are not supported for MDS stack yet */
+               rc = lod_ost_pool_add(&lod->lod_pool_info, index,
+                                     lod->lod_osts_size);
+               if (rc) {
+                       CERROR("%s: can't set up pool, failed with %d\n",
+                              obd->obd_name, rc);
+                       GOTO(out_mutex, rc);
+               }
 
-       rc = qos_add_tgt(lod, tgt_desc);
-       if (rc) {
-               CERROR("%s: qos_add_tgt failed with %d\n",
-                       obd->obd_name, rc);
-               GOTO(out_pool, rc);
-       }
+               rc = qos_add_tgt(lod, tgt_desc);
+               if (rc) {
+                       CERROR("%s: qos_add_tgt failed with %d\n",
+                               obd->obd_name, rc);
+                       GOTO(out_pool, rc);
+               }
 
-       /* The new OST is now a full citizen */
-       if (index >= lod->lod_desc.ld_tgt_count)
-               lod->lod_desc.ld_tgt_count = index + 1;
-       if (active)
-               lod->lod_desc.ld_active_tgt_count++;
+               /* The new OST is now a full citizen */
+               if (index >= lod->lod_desc.ld_tgt_count)
+                       lod->lod_desc.ld_tgt_count = index + 1;
+               if (active)
+                       lod->lod_desc.ld_active_tgt_count++;
+       }
 
        LTD_TGT(ltd, index) = tgt_desc;
        cfs_bitmap_set(ltd->ltd_tgt_bitmap, index);
@@ -376,7 +424,10 @@ int lod_del_device(const struct lu_env *env, struct lod_device *lod,
 
        CDEBUG(D_CONFIG, "osp:%s idx:%d gen:%d\n", osp, idx, gen);
 
-       obd = class_name2obd(osp);
+       obd_str2uuid(&uuid, osp);
+
+       obd = class_find_client_obd(&uuid, LUSTRE_OSP_NAME,
+                                  &lod->lod_dt_dev.dd_lu_dev.ld_obd->obd_uuid);
        if (obd == NULL) {
                CERROR("can't find %s device\n", osp);
                RETURN(-EINVAL);
@@ -649,6 +700,9 @@ int lod_initialize_objects(const struct lu_env *env, struct lod_object *lo,
                nd = &OST_TGT(md,idx)->ltd_ost->dd_lu_dev;
                lod_putref(md, &md->lod_ost_descs);
 
+               /* In the function below, .hs_keycmp resolves to
+                * u_obj_hop_keycmp() */
+               /* coverity[overrun-buffer-val] */
                o = lu_object_find_at(env, nd, &info->lti_fid, NULL);
                if (IS_ERR(o))
                        GOTO(out, rc = PTR_ERR(o));
@@ -814,6 +868,9 @@ int lod_verify_striping(struct lod_device *d, const struct lu_buf *buf,
                v3 = buf->lb_buf;
 
        if (v3)
+               /* In the function below, .hs_keycmp resolves to
+                * pool_hashkey_keycmp() */
+               /* coverity[overrun-buffer-val] */
                pool = lod_find_pool(d, v3->lmm_pool_name);
 
        if (pool != NULL) {
@@ -843,10 +900,10 @@ int lod_verify_striping(struct lod_device *d, const struct lu_buf *buf,
 
 void lod_fix_desc_stripe_size(__u64 *val)
 {
-       if (*val < PTLRPC_MAX_BRW_SIZE) {
+       if (*val < LOV_DEFAULT_STRIPE_SIZE) {
                LCONSOLE_WARN("Increasing default stripe size to min %u\n",
-                             PTLRPC_MAX_BRW_SIZE);
-               *val = PTLRPC_MAX_BRW_SIZE;
+                             LOV_DEFAULT_STRIPE_SIZE);
+               *val = LOV_DEFAULT_STRIPE_SIZE;
        } else if (*val & (LOV_MIN_STRIPE_SIZE - 1)) {
                *val &= ~(LOV_MIN_STRIPE_SIZE - 1);
                LCONSOLE_WARN("Changing default stripe size to "LPU64" (a "
@@ -985,6 +1042,9 @@ int lod_pools_fini(struct lod_device *lod)
                pool = cfs_list_entry(pos, struct pool_desc, pool_list);
                /* free pool structs */
                CDEBUG(D_INFO, "delete pool %p\n", pool);
+               /* In the function below, .hs_keycmp resolves to
+                * pool_hashkey_keycmp() */
+               /* coverity[overrun-buffer-val] */
                lod_pool_del(obd, pool->pool_name);
        }