From e2424a1265f2772b66f068c205256e2aef5f74a0 Mon Sep 17 00:00:00 2001 From: Oleg Drokin Date: Mon, 6 Jul 2015 12:48:46 -0400 Subject: [PATCH] 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 Signed-off-by: Greg Kroah-Hartman --- .../staging/lustre/lustre/include/obd_class.h | 4 +- .../lustre/lustre/obdclass/class_obd.c | 6 +- .../lustre/obdclass/linux/linux-sysctl.c | 70 +++++++++++++++---- drivers/staging/lustre/sysfs-fs-lustre | 12 ++++ 4 files changed, 73 insertions(+), 19 deletions(-) diff --git a/drivers/staging/lustre/lustre/include/obd_class.h b/drivers/staging/lustre/lustre/include/obd_class.h index 36ed78127830..7dce4eea8575 100644 --- a/drivers/staging/lustre/lustre/include/obd_class.h +++ b/drivers/staging/lustre/lustre/include/obd_class.h @@ -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]; diff --git a/drivers/staging/lustre/lustre/obdclass/class_obd.c b/drivers/staging/lustre/lustre/obdclass/class_obd.c index 34b16c044df8..2e42d1a637f1 100644 --- a/drivers/staging/lustre/lustre/obdclass/class_obd.c +++ b/drivers/staging/lustre/lustre/obdclass/class_obd.c @@ -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; diff --git a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c index eda5f30e8f30..3c8087b5cf4b 100644 --- a/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c +++ b/drivers/staging/lustre/lustre/obdclass/linux/linux-sysctl.c @@ -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) diff --git a/drivers/staging/lustre/sysfs-fs-lustre b/drivers/staging/lustre/sysfs-fs-lustre index 1e302e8516ce..6dbad260fa7d 100644 --- a/drivers/staging/lustre/sysfs-fs-lustre +++ b/drivers/staging/lustre/sysfs-fs-lustre @@ -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" +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/-/blocksize Date: May 2015 Contact: "Oleg Drokin"