Commit e2424a12 authored by Oleg Drokin's avatar Oleg Drokin Committed by Greg Kroah-Hartman

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: default avatarOleg Drokin <green@linuxhacker.ru>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 082a3344
......@@ -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];
......
......@@ -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;
......
......@@ -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)
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;
};
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 = proc_dointvec(table, write, buffer, lenp, ppos);
return rc;
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)
......
......@@ -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>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment