LASSERT(dev != NULL);
lod = lu2lod_dev(dev->obd_lu_dev);
seq_printf(m, "%llu\n",
- lod->lod_desc.ld_default_stripe_size);
+ lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_size);
return 0;
}
return -ERANGE;
lod_fix_desc_stripe_size(&val);
- lod->lod_desc.ld_default_stripe_size = val;
+ lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_size = val;
return count;
}
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
- return sprintf(buf, "%lld\n", lod->lod_desc.ld_default_stripe_offset);
+ return sprintf(buf, "%lld\n",
+ lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_offset);
}
/**
if (val < -1 || val > LOV_MAX_STRIPE_COUNT)
return -ERANGE;
- lod->lod_desc.ld_default_stripe_offset = val;
+ lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_offset = val;
return count;
}
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
- return sprintf(buf, "%u\n", lod->lod_desc.ld_pattern);
+ return sprintf(buf, "%u\n", lod->lod_ost_descs.ltd_lov_desc.ld_pattern);
}
/**
return rc;
lod_fix_desc_pattern(&pattern);
- lod->lod_desc.ld_pattern = pattern;
+ lod->lod_ost_descs.ltd_lov_desc.ld_pattern = pattern;
return count;
}
struct dt_device *dt = container_of(kobj, struct dt_device,
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
+ struct lov_desc *desc = &lod->lod_ost_descs.ltd_lov_desc;
return sprintf(buf, "%d\n",
- (s16)(lod->lod_desc.ld_default_stripe_count + 1) - 1);
+ (s16)(desc->ld_default_stripe_count + 1) - 1);
}
/**
return -ERANGE;
lod_fix_desc_stripe_count(&stripe_count);
- lod->lod_desc.ld_default_stripe_count = stripe_count;
+ lod->lod_ost_descs.ltd_lov_desc.ld_default_stripe_count = stripe_count;
return count;
}
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
- return sprintf(buf, "%u\n", lod->lod_desc.ld_tgt_count);
+ return sprintf(buf, "%u\n", lod->lod_ost_count);
}
LUSTRE_RO_ATTR(numobd);
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
- return sprintf(buf, "%u\n", lod->lod_desc.ld_active_tgt_count);
+ return sprintf(buf, "%u\n",
+ lod->lod_ost_descs.ltd_lov_desc.ld_active_tgt_count);
}
LUSTRE_RO_ATTR(activeobd);
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
- return sprintf(buf, "%s\n", lod->lod_desc.ld_uuid.uuid);
+ return sprintf(buf, "%s\n",
+ lod->lod_ost_descs.ltd_lov_desc.ld_uuid.uuid);
}
LUSTRE_RO_ATTR(desc_uuid);
struct lod_device *lod = dt2lod_dev(dt);
return sprintf(buf, "%d%%\n",
- (lod->lod_qos.lq_prio_free * 100 + 255) >> 8);
+ (lod->lod_ost_descs.ltd_qos.lq_prio_free * 100 + 255) >>
+ 8);
}
/**
if (val > 100)
return -EINVAL;
- lod->lod_qos.lq_prio_free = (val << 8) / 100;
- lod->lod_qos.lq_dirty = 1;
- lod->lod_qos.lq_reset = 1;
+ lod->lod_ost_descs.ltd_qos.lq_prio_free = (val << 8) / 100;
+ lod->lod_ost_descs.ltd_qos.lq_dirty = 1;
+ lod->lod_ost_descs.ltd_qos.lq_reset = 1;
return count;
}
LASSERT(dev != NULL);
lod = lu2lod_dev(dev->obd_lu_dev);
seq_printf(m, "%d%%\n",
- (lod->lod_qos.lq_threshold_rr * 100 + 255) >> 8);
+ (lod->lod_ost_descs.ltd_qos.lq_threshold_rr * 100 + 255) >>
+ 8);
return 0;
}
if (val > 100 || val < 0)
return -EINVAL;
- lod->lod_qos.lq_threshold_rr = (val << 8) / 100;
- lod->lod_qos.lq_dirty = 1;
+ lod->lod_ost_descs.ltd_qos.lq_threshold_rr = (val << 8) / 100;
+ lod->lod_ost_descs.ltd_qos.lq_dirty = 1;
return count;
}
dd_kobj);
struct lod_device *lod = dt2lod_dev(dt);
- return sprintf(buf, "%u Sec\n", lod->lod_desc.ld_qos_maxage);
+ return sprintf(buf, "%u Sec\n",
+ lod->lod_ost_descs.ltd_lov_desc.ld_qos_maxage);
}
/**
struct lu_device *next;
struct lustre_cfg *lcfg;
char str[32];
- unsigned int i;
+ struct lu_tgt_desc *tgt;
int rc;
u32 val;
if (val <= 0)
return -EINVAL;
- lod->lod_desc.ld_qos_maxage = val;
+ lod->lod_ost_descs.ltd_lov_desc.ld_qos_maxage = val;
/*
* propogate the value down to OSPs
lustre_cfg_init(lcfg, LCFG_PARAM, &bufs);
lod_getref(&lod->lod_ost_descs);
- lod_foreach_ost(lod, i) {
- next = &OST_TGT(lod,i)->ltd_ost->dd_lu_dev;
+ lod_foreach_ost(lod, tgt) {
+ next = &tgt->ltd_tgt->dd_lu_dev;
rc = next->ld_ops->ldo_process_config(NULL, next, lcfg);
if (rc)
- CERROR("can't set maxage on #%d: %d\n", i, rc);
+ CERROR("can't set maxage on #%d: %d\n",
+ tgt->ltd_index, rc);
}
lod_putref(lod, &lod->lod_ost_descs);
OBD_FREE(lcfg, lustre_cfg_len(lcfg->lcfg_bufcount, lcfg->lcfg_buflens));
static int lod_osts_seq_show(struct seq_file *p, void *v)
{
struct obd_device *obd = p->private;
- struct lod_ost_desc *ost_desc = v;
+ struct lu_tgt_desc *ost_desc = v;
struct lod_device *lod;
int idx, rc, active;
struct dt_device *next;
lod = lu2lod_dev(obd->obd_lu_dev);
idx = ost_desc->ltd_index;
- next = OST_TGT(lod,idx)->ltd_ost;
+ next = OST_TGT(lod, idx)->ltd_tgt;
if (next == NULL)
return -EINVAL;
*/
int lod_procfs_init(struct lod_device *lod)
{
+ struct lprocfs_vars ldebugfs_obd_vars[] = { { NULL } };
struct obd_device *obd = lod2obd(lod);
- struct proc_dir_entry *lov_proc_dir;
struct obd_type *type;
struct kobject *lov;
int rc;
lod->lod_dt_dev.dd_ktype.default_attrs = lod_attrs;
rc = dt_tunables_init(&lod->lod_dt_dev, obd->obd_type, obd->obd_name,
- NULL);
+ ldebugfs_obd_vars);
if (rc) {
CERROR("%s: failed to setup DT tunables: %d\n",
obd->obd_name, rc);
}
lov = kset_find_obj(lustre_kset, "lov");
- if (lov) {
- rc = sysfs_create_link(lov, &lod->lod_dt_dev.dd_kobj,
- obd->obd_name);
- kobject_put(lov);
+ if (!lov) {
+ CERROR("%s: lov subsystem not found\n", obd->obd_name);
+ GOTO(out, rc = -ENODEV);
}
+ rc = sysfs_create_link(lov, &lod->lod_dt_dev.dd_kobj,
+ obd->obd_name);
+ if (rc)
+ CERROR("%s: failed to create LOV sysfs symlink\n",
+ obd->obd_name);
+ kobject_put(lov);
+
lod->lod_debugfs = ldebugfs_add_symlink(obd->obd_name, "lov",
"../lod/%s", obd->obd_name);
if (!lod->lod_debugfs)
CERROR("%s: failed to create LOV debugfs symlink\n",
obd->obd_name);
- /* If the real LOV is present which is the case for setups
- * with both server and clients on the same node then use
- * the LOV's proc root */
- type = class_search_type(LUSTRE_LOV_NAME);
- if (type != NULL && type->typ_procroot != NULL)
- lov_proc_dir = type->typ_procroot;
- else
- lov_proc_dir = obd->obd_type->typ_procsym;
-
- if (lov_proc_dir == NULL)
+ type = container_of(lov, struct obd_type, typ_kobj);
+ if (!type->typ_procroot)
RETURN(0);
/* for compatibility we link old procfs's LOV entries to lod ones */
- lod->lod_symlink = lprocfs_add_symlink(obd->obd_name, lov_proc_dir,
+ lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
+ type->typ_procroot,
"../lod/%s", obd->obd_name);
if (lod->lod_symlink == NULL)
CERROR("cannot create LOV symlink for /proc/fs/lustre/lod/%s\n",