staging/lustre/obdclass: move sysctl timeout to sysfs

This is the first step of moving lustre sysctls from
/proc/sys/lustre to /sys/fs/lustre

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-07-06 12:48:46 -04:00 committed by Greg Kroah-Hartman
parent 082a33441f
commit e2424a1265
4 changed files with 73 additions and 19 deletions

View File

@ -1869,8 +1869,8 @@ extern int (*ptlrpc_put_connection_superhack)(struct ptlrpc_connection *c);
/* obd_mount.c */
/* sysctl.c */
extern void obd_sysctl_init (void);
extern void obd_sysctl_clean (void);
extern int obd_sysctl_init(void);
extern void obd_sysctl_clean(void);
/* uuid.c */
typedef __u8 class_uuid_t[16];

View File

@ -567,12 +567,14 @@ static int __init init_obdclass(void)
if (err)
return err;
obd_sysctl_init();
err = class_procfs_init();
if (err)
return err;
err = obd_sysctl_init();
if (err)
return err;
err = lu_global_init();
if (err)
return err;

View File

@ -54,16 +54,53 @@
static struct ctl_table_header *obd_table_header;
#endif
#ifdef CONFIG_SYSCTL
static int proc_set_timeout(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
int rc;
struct static_lustre_uintvalue_attr {
struct {
struct attribute attr;
ssize_t (*show)(struct kobject *kobj, struct attribute *attr,
char *buf);
ssize_t (*store)(struct kobject *kobj, struct attribute *attr,
const char *buf, size_t len);
} u;
int *value;
};
rc = proc_dointvec(table, write, buffer, lenp, ppos);
return rc;
static ssize_t static_uintvalue_show(struct kobject *kobj,
struct attribute *attr,
char *buf)
{
struct static_lustre_uintvalue_attr *lattr = (void *)attr;
return sprintf(buf, "%d\n", *lattr->value);
}
static ssize_t static_uintvalue_store(struct kobject *kobj,
struct attribute *attr,
const char *buffer, size_t count)
{
struct static_lustre_uintvalue_attr *lattr = (void *)attr;
int rc;
unsigned int val;
rc = kstrtouint(buffer, 10, &val);
if (rc)
return rc;
*lattr->value = val;
return count;
}
#define LUSTRE_STATIC_UINT_ATTR(name, value) \
static struct static_lustre_uintvalue_attr lustre_sattr_##name = \
{__ATTR(name, 0644, \
static_uintvalue_show, \
static_uintvalue_store),\
value }
LUSTRE_STATIC_UINT_ATTR(timeout, &obd_timeout);
#ifdef CONFIG_SYSCTL
static int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write,
void __user *buffer, size_t *lenp, loff_t *ppos)
{
@ -106,13 +143,6 @@ static int proc_max_dirty_pages_in_mb(struct ctl_table *table, int write,
}
static struct ctl_table obd_table[] = {
{
.procname = "timeout",
.data = &obd_timeout,
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = &proc_set_timeout
},
{
.procname = "debug_peer_on_timeout",
.data = &obd_debug_peer_on_timeout,
@ -191,12 +221,22 @@ static struct ctl_table parent_table[] = {
};
#endif
void obd_sysctl_init(void)
static struct attribute *lustre_attrs[] = {
&lustre_sattr_timeout.u.attr,
NULL,
};
static struct attribute_group lustre_attr_group = {
.attrs = lustre_attrs,
};
int obd_sysctl_init(void)
{
#ifdef CONFIG_SYSCTL
if (!obd_table_header)
obd_table_header = register_sysctl_table(parent_table);
#endif
return sysfs_create_group(lustre_kobj, &lustre_attr_group);
}
void obd_sysctl_clean(void)

View File

@ -40,6 +40,18 @@ Description:
e.g. dd.1253
nodelocal - use jobid_name value from above.
What: /sys/fs/lustre/timeout
Date: June 2015
Contact: "Oleg Drokin" <oleg.drokin@intel.com>
Description:
Controls "lustre timeout" variable, also known as obd_timeout
in some old manual. In the past obd_timeout was of paramount
importance as the timeout value used everywhere and where
other timeouts were derived from. These days it's much less
important as network timeouts are mostly determined by
AT (adaptive timeouts).
Unit: seconds, default: 100
What: /sys/fs/lustre/llite/<fsname>-<uuid>/blocksize
Date: May 2015
Contact: "Oleg Drokin" <oleg.drokin@intel.com>