RETURN(rc);
}
+static int validate_lod_and_idx(struct lod_device *md, int idx)
+{
+ if (unlikely(idx >= md->lod_ost_descs.ltd_tgts_size ||
+ !cfs_bitmap_check(md->lod_ost_bitmap, idx))) {
+ CERROR("%s: bad idx: %d of %d\n", lod2obd(md)->obd_name, idx,
+ md->lod_ost_descs.ltd_tgts_size);
+ return -EINVAL;
+ }
+
+ if (unlikely(OST_TGT(md, idx) == NULL)) {
+ CERROR("%s: bad lod_tgt_desc for idx: %d\n",
+ lod2obd(md)->obd_name, idx);
+ return -EINVAL;
+ }
+
+ if (unlikely(OST_TGT(md, idx)->ltd_ost == NULL)) {
+ CERROR("%s: invalid lod device, for idx: %d\n",
+ lod2obd(md)->obd_name , idx);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/*
* allocate array of objects pointers, find/create objects
* stripenr and other fields should be initialized by this moment
GOTO(out, rc);
LASSERTF(fid_is_sane(&info->lti_fid), ""DFID" insane!\n",
PFID(&info->lti_fid));
- /*
- * XXX: assertion is left for testing, to make
- * sure we never process requests till configuration
- * is completed. to be changed to -EINVAL
- */
-
lod_getref(&md->lod_ost_descs);
- LASSERT(cfs_bitmap_check(md->lod_ost_bitmap, idx));
- LASSERT(OST_TGT(md,idx));
- LASSERTF(OST_TGT(md,idx)->ltd_ost, "idx %d\n", idx);
+
+ rc = validate_lod_and_idx(md, idx);
+ if (unlikely(rc != 0)) {
+ lod_putref(md, &md->lod_ost_descs);
+ GOTO(out, rc);
+ }
+
nd = &OST_TGT(md,idx)->ltd_ost->dd_lu_dev;
lod_putref(md, &md->lod_ost_descs);
*/
dt_write_lock(env, next, 0);
/* already initialized? */
- if (lo->ldo_stripe) {
- int i;
- /* check validity */
- for (i = 0; i < lo->ldo_stripenr; i++)
- LASSERTF(lo->ldo_stripe[i], "stripe %d is NULL\n", i);
+ if (lo->ldo_stripe != NULL)
GOTO(out, rc = 0);
- }
if (!dt_object_exists(next))
GOTO(out, rc = 0);
if (!(lu_object_attr(lod2lu_obj(lo)) & S_IFREG))
GOTO(out, rc = 0);
- LASSERT(lo->ldo_stripenr == 0);
-
rc = lod_get_lov_ea(env, lo);
if (rc <= 0)
GOTO(out, rc);