Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb1debff authored by Oleg Drokin's avatar Oleg Drokin Committed by Greg Kroah-Hartman
Browse files

staging/lustre/lov: Move suitable variables from procfs to sysfs

parent aab38b00
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -573,6 +573,8 @@ struct lov_obd {
	void		       *lov_cache;

	struct rw_semaphore     lov_notify_lock;

	struct kobject		*lov_tgts_kobj;
};

struct lmv_tgt_desc {
+16 −28
Original line number Diff line number Diff line
@@ -127,7 +127,6 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
	struct obd_device *tgt_obd;
	static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
	struct obd_import *imp;
	struct proc_dir_entry *lov_proc_dir;
	int rc;

	if (!lov->lov_tgts[index])
@@ -186,28 +185,10 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
	CDEBUG(D_CONFIG, "Connected tgt idx %d %s (%s) %sactive\n", index,
	       obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in");

	lov_proc_dir = obd->obd_proc_private;
	if (lov_proc_dir) {
		struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
		struct proc_dir_entry *osc_symlink;

		LASSERT(osc_obd != NULL);
		LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
		LASSERT(osc_obd->obd_type->typ_name != NULL);

		osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
						  lov_proc_dir,
						  "../../../%s/%s",
						  osc_obd->obd_type->typ_name,
						  osc_obd->obd_name);
		if (osc_symlink == NULL) {
			CERROR("could not register LOV target /proc/fs/lustre/%s/%s/target_obds/%s.",
			       obd->obd_type->typ_name, obd->obd_name,
			       osc_obd->obd_name);
			lprocfs_remove(&lov_proc_dir);
			obd->obd_proc_private = NULL;
		}
	}
	if (lov->lov_tgts_kobj)
		/* Even if we failed, that's ok */
		rc = sysfs_create_link(lov->lov_tgts_kobj, &tgt_obd->obd_kobj,
				       tgt_obd->obd_name);

	return 0;
}
@@ -239,6 +220,10 @@ static int lov_connect(const struct lu_env *env,
		lov->lov_ocd = *data;

	obd_getref(obd);

	lov->lov_tgts_kobj = kobject_create_and_add("target_obds",
						    &obd->obd_kobj);

	for (i = 0; i < lov->desc.ld_tgt_count; i++) {
		tgt = lov->lov_tgts[i];
		if (!tgt || obd_uuid_empty(&tgt->ltd_uuid))
@@ -268,7 +253,6 @@ static int lov_connect(const struct lu_env *env,

static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
{
	struct proc_dir_entry *lov_proc_dir;
	struct lov_obd *lov = &obd->u.lov;
	struct obd_device *osc_obd;
	int rc;
@@ -284,10 +268,10 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
	}

	if (osc_obd) {
		lov_proc_dir = obd->obd_proc_private;
		if (lov_proc_dir) {
			lprocfs_remove_proc_entry(osc_obd->obd_name, lov_proc_dir);
		}
		if (lov->lov_tgts_kobj)
			sysfs_remove_link(lov->lov_tgts_kobj,
					  osc_obd->obd_name);

		/* Pass it on to our clients.
		 * XXX This should be an argument to disconnect,
		 * XXX not a back-door flag on the OBD.  Ah well.
@@ -337,6 +321,10 @@ static int lov_disconnect(struct obd_export *exp)
			lov_del_target(obd, i, NULL, lov->lov_tgts[i]->ltd_gen);
		}
	}

	if (lov->lov_tgts_kobj)
		kobject_put(lov->lov_tgts_kobj);

	obd_putref(obd);

out:
+24 −15
Original line number Diff line number Diff line
@@ -166,29 +166,29 @@ static ssize_t lov_stripecount_seq_write(struct file *file,
}
LPROC_SEQ_FOPS(lov_stripecount);

static int lov_numobd_seq_show(struct seq_file *m, void *v)
static ssize_t numobd_show(struct kobject *kobj, struct attribute *attr,
			   char *buf)
{
	struct obd_device *dev = (struct obd_device *)m->private;
	struct obd_device *dev = container_of(kobj, struct obd_device,
					      obd_kobj);
	struct lov_desc *desc;

	LASSERT(dev != NULL);
	desc = &dev->u.lov.desc;
	seq_printf(m, "%u\n", desc->ld_tgt_count);
	return 0;
	return sprintf(buf, "%u\n", desc->ld_tgt_count);
}
LPROC_SEQ_FOPS_RO(lov_numobd);
LUSTRE_RO_ATTR(numobd);

static int lov_activeobd_seq_show(struct seq_file *m, void *v)
static ssize_t activeobd_show(struct kobject *kobj, struct attribute *attr,
			      char *buf)
{
	struct obd_device *dev = (struct obd_device *)m->private;
	struct obd_device *dev = container_of(kobj, struct obd_device,
					      obd_kobj);
	struct lov_desc *desc;

	LASSERT(dev != NULL);
	desc = &dev->u.lov.desc;
	seq_printf(m, "%u\n", desc->ld_active_tgt_count);
	return 0;
	return sprintf(buf, "%u\n", desc->ld_active_tgt_count);
}
LPROC_SEQ_FOPS_RO(lov_activeobd);
LUSTRE_RO_ATTR(activeobd);

static int lov_desc_uuid_seq_show(struct seq_file *m, void *v)
{
@@ -267,15 +267,24 @@ static struct lprocfs_vars lprocfs_lov_obd_vars[] = {
	{ "stripeoffset", &lov_stripeoffset_fops, NULL },
	{ "stripecount",  &lov_stripecount_fops,  NULL },
	{ "stripetype",   &lov_stripetype_fops,   NULL },
	{ "numobd",       &lov_numobd_fops,	  NULL, 0 },
	{ "activeobd",    &lov_activeobd_fops,	  NULL, 0 },
	/*{ "filegroups", lprocfs_rd_filegroups,  NULL, 0 },*/
	{ "desc_uuid",    &lov_desc_uuid_fops,    NULL, 0 },
	{ NULL }
};

static struct attribute *lov_attrs[] = {
	&lustre_attr_activeobd.attr,
	&lustre_attr_numobd.attr,
	NULL,
};

static struct attribute_group lov_attr_group = {
	.attrs = lov_attrs,
};

void lprocfs_lov_init_vars(struct lprocfs_static_vars *lvars)
{
	lvars->sysfs_vars = &lov_attr_group;
	lvars->obd_vars = lprocfs_lov_obd_vars;
}

+13 −0
Original line number Diff line number Diff line
@@ -505,3 +505,16 @@ Description:
		Controls how many times to try and resend RPCs to this target
		that failed with "recoverable" status, such as EAGAIN,
		ENOMEM.

What:		/sys/fs/lustre/lov/{connection_name}/numobd
Date:		May 2015
Contact:	"Oleg Drokin" <oleg.drokin@intel.com>
Description:
		Number of OSC targets managed by this LOV instance.

What:		/sys/fs/lustre/lov/{connection_name}/activeobd
Date:		May 2015
Contact:	"Oleg Drokin" <oleg.drokin@intel.com>
Description:
		Number of OSC targets managed by this LOV instance that are
		actually active.