staging/lustre/lmv: Move suitable entries from procfs to sysfs

Signed-off-by: Oleg Drokin <green@linuxhacker.ru>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Oleg Drokin 2015-05-21 15:32:23 -04:00 committed by Greg Kroah-Hartman
parent cb1debff6d
commit b5fa70d76f
4 changed files with 85 additions and 92 deletions

View file

@ -613,6 +613,7 @@ struct lmv_obd {
struct lmv_tgt_desc **tgts;
struct obd_connect_data conn_data;
struct kobject *lmv_tgts_kobj;
};
struct niobuf_local {
@ -917,7 +918,6 @@ struct obd_device {
struct lprocfs_stats *md_stats;
struct proc_dir_entry *obd_proc_entry;
void *obd_proc_private; /* type private PDEs */
struct proc_dir_entry *obd_proc_exports_entry;
struct proc_dir_entry *obd_svc_procroot;
struct lprocfs_stats *obd_svc_stats;

View file

@ -199,7 +199,6 @@ static int lmv_connect(const struct lu_env *env,
struct obd_uuid *cluuid, struct obd_connect_data *data,
void *localdata)
{
struct proc_dir_entry *lmv_proc_dir;
struct lmv_obd *lmv = &obd->u.lmv;
struct lustre_handle conn = { 0 };
int rc = 0;
@ -230,19 +229,8 @@ static int lmv_connect(const struct lu_env *env,
if (data)
lmv->conn_data = *data;
if (obd->obd_proc_private != NULL) {
lmv_proc_dir = obd->obd_proc_private;
} else {
lmv_proc_dir = lprocfs_register("target_obds", obd->obd_proc_entry,
NULL, NULL);
if (IS_ERR(lmv_proc_dir)) {
CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
obd->obd_type->typ_name, obd->obd_name);
lmv_proc_dir = NULL;
}
obd->obd_proc_private = lmv_proc_dir;
}
lmv->lmv_tgts_kobj = kobject_create_and_add("target_obds",
&obd->obd_kobj);
/*
* All real clients should perform actual connection right away, because
* it is possible, that LMV will not have opportunity to connect targets
@ -252,10 +240,8 @@ static int lmv_connect(const struct lu_env *env,
if (data->ocd_connect_flags & OBD_CONNECT_REAL)
rc = lmv_check_connect(obd);
if (rc && lmv_proc_dir) {
lprocfs_remove(&lmv_proc_dir);
obd->obd_proc_private = NULL;
}
if (rc && lmv->lmv_tgts_kobj)
kobject_put(lmv->lmv_tgts_kobj);
return rc;
}
@ -337,7 +323,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
static int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
{
struct proc_dir_entry *lmv_proc_dir;
struct lmv_obd *lmv = &obd->u.lmv;
struct obd_uuid *cluuid = &lmv->cluuid;
struct obd_uuid lmv_mdc_uuid = { "LMV_MDC_UUID" };
@ -415,25 +400,10 @@ static int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
mdc_obd->obd_name, mdc_obd->obd_uuid.uuid,
atomic_read(&obd->obd_refcount));
lmv_proc_dir = obd->obd_proc_private;
if (lmv_proc_dir) {
struct proc_dir_entry *mdc_symlink;
LASSERT(mdc_obd->obd_type != NULL);
LASSERT(mdc_obd->obd_type->typ_name != NULL);
mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
lmv_proc_dir,
"../../../%s/%s",
mdc_obd->obd_type->typ_name,
mdc_obd->obd_name);
if (mdc_symlink == NULL) {
CERROR("Could not register LMV target /proc/fs/lustre/%s/%s/target_obds/%s.",
obd->obd_type->typ_name, obd->obd_name,
mdc_obd->obd_name);
lprocfs_remove(&lmv_proc_dir);
obd->obd_proc_private = NULL;
}
}
if (lmv->lmv_tgts_kobj)
/* Even if we failed to create the link, that's fine */
rc = sysfs_create_link(lmv->lmv_tgts_kobj, &mdc_obd->obd_kobj,
mdc_obd->obd_name);
return 0;
}
@ -610,7 +580,6 @@ int lmv_check_connect(struct obd_device *obd)
static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
{
struct proc_dir_entry *lmv_proc_dir;
struct lmv_obd *lmv = &obd->u.lmv;
struct obd_device *mdc_obd;
int rc;
@ -626,9 +595,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
mdc_obd->obd_no_recov = obd->obd_no_recov;
}
lmv_proc_dir = obd->obd_proc_private;
if (lmv_proc_dir)
lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
if (lmv->lmv_tgts_kobj)
sysfs_remove_link(lmv->lmv_tgts_kobj,
mdc_obd->obd_name);
rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
if (rc)
@ -676,11 +645,8 @@ static int lmv_disconnect(struct obd_export *exp)
lmv_disconnect_mdc(obd, lmv->tgts[i]);
}
if (obd->obd_proc_private)
lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
else
CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
obd->obd_type->typ_name, obd->obd_name);
if (lmv->lmv_tgts_kobj)
kobject_put(lmv->lmv_tgts_kobj);
out_local:
/*

View file

@ -42,17 +42,17 @@
#include "../include/obd_class.h"
#include "lmv_internal.h"
static int lmv_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 lmv_desc *desc;
struct obd_device *dev = container_of(kobj, struct obd_device,
obd_kobj);
struct lmv_desc *desc;
LASSERT(dev != NULL);
desc = &dev->u.lmv.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(lmv_numobd);
LUSTRE_RO_ATTR(numobd);
static const char *placement_name[] = {
[PLACEMENT_CHAR_POLICY] = "CHAR",
@ -77,66 +77,61 @@ static const char *placement_policy2name(enum placement_policy placement)
return placement_name[placement];
}
static int lmv_placement_seq_show(struct seq_file *m, void *v)
static ssize_t placement_show(struct kobject *kobj, struct attribute *attr,
char *buf)
{
struct obd_device *dev = (struct obd_device *)m->private;
struct lmv_obd *lmv;
struct obd_device *dev = container_of(kobj, struct obd_device,
obd_kobj);
struct lmv_obd *lmv;
LASSERT(dev != NULL);
lmv = &dev->u.lmv;
seq_printf(m, "%s\n", placement_policy2name(lmv->lmv_placement));
return 0;
return sprintf(buf, "%s\n", placement_policy2name(lmv->lmv_placement));
}
#define MAX_POLICY_STRING_SIZE 64
static ssize_t lmv_placement_seq_write(struct file *file,
const char __user *buffer,
size_t count, loff_t *off)
static ssize_t placement_store(struct kobject *kobj, struct attribute *attr,
const char *buffer,
size_t count)
{
struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
char dummy[MAX_POLICY_STRING_SIZE + 1];
int len = count;
enum placement_policy policy;
struct lmv_obd *lmv;
struct obd_device *dev = container_of(kobj, struct obd_device,
obd_kobj);
char dummy[MAX_POLICY_STRING_SIZE + 1];
enum placement_policy policy;
struct lmv_obd *lmv = &dev->u.lmv;
if (copy_from_user(dummy, buffer, MAX_POLICY_STRING_SIZE))
return -EFAULT;
memcpy(dummy, buffer, MAX_POLICY_STRING_SIZE);
LASSERT(dev != NULL);
lmv = &dev->u.lmv;
if (count > MAX_POLICY_STRING_SIZE)
count = MAX_POLICY_STRING_SIZE;
if (len > MAX_POLICY_STRING_SIZE)
len = MAX_POLICY_STRING_SIZE;
if (dummy[count - 1] == '\n')
count--;
dummy[count] = '\0';
if (dummy[len - 1] == '\n')
len--;
dummy[len] = '\0';
policy = placement_name2policy(dummy, len);
policy = placement_name2policy(dummy, count);
if (policy != PLACEMENT_INVAL_POLICY) {
spin_lock(&lmv->lmv_lock);
lmv->lmv_placement = policy;
spin_unlock(&lmv->lmv_lock);
} else {
CERROR("Invalid placement policy \"%s\"!\n", dummy);
return -EINVAL;
}
return count;
}
LPROC_SEQ_FOPS(lmv_placement);
LUSTRE_RW_ATTR(placement);
static int lmv_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 lmv_desc *desc;
struct obd_device *dev = container_of(kobj, struct obd_device,
obd_kobj);
struct lmv_desc *desc;
LASSERT(dev != NULL);
desc = &dev->u.lmv.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(lmv_activeobd);
LUSTRE_RO_ATTR(activeobd);
static int lmv_desc_uuid_seq_show(struct seq_file *m, void *v)
{
@ -205,9 +200,6 @@ static int lmv_target_seq_open(struct inode *inode, struct file *file)
}
static struct lprocfs_vars lprocfs_lmv_obd_vars[] = {
{ "numobd", &lmv_numobd_fops, NULL, 0 },
{ "placement", &lmv_placement_fops, NULL, 0 },
{ "activeobd", &lmv_activeobd_fops, NULL, 0 },
{ "desc_uuid", &lmv_desc_uuid_fops, NULL, 0 },
{ NULL }
};
@ -220,7 +212,19 @@ struct file_operations lmv_proc_target_fops = {
.release = seq_release,
};
static struct attribute *lmv_attrs[] = {
&lustre_attr_activeobd.attr,
&lustre_attr_numobd.attr,
&lustre_attr_placement.attr,
NULL,
};
static struct attribute_group lmv_attr_group = {
.attrs = lmv_attrs,
};
void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars)
{
lvars->sysfs_vars = &lmv_attr_group;
lvars->obd_vars = lprocfs_lmv_obd_vars;
}

View file

@ -518,3 +518,26 @@ Contact: "Oleg Drokin" <oleg.drokin@intel.com>
Description:
Number of OSC targets managed by this LOV instance that are
actually active.
What: /sys/fs/lustre/lmv/{connection_name}/numobd
Date: May 2015
Contact: "Oleg Drokin" <oleg.drokin@intel.com>
Description:
Number of MDC targets managed by this LMV instance.
What: /sys/fs/lustre/lmv/{connection_name}/activeobd
Date: May 2015
Contact: "Oleg Drokin" <oleg.drokin@intel.com>
Description:
Number of MDC targets managed by this LMV instance that are
actually active.
What: /sys/fs/lustre/lmv/{connection_name}/placement
Date: May 2015
Contact: "Oleg Drokin" <oleg.drokin@intel.com>
Description:
Determines policy of inode placement in case of multiple
metadata servers:
CHAR - based on a hash of the file name used at creation time
(Default)
NID - based on a hash of creating client network id.