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

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
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -1869,7 +1869,7 @@ extern int (*ptlrpc_put_connection_superhack)(struct ptlrpc_connection *c);
/* obd_mount.c */

/* sysctl.c */
extern void obd_sysctl_init (void);
extern int obd_sysctl_init(void);
extern void obd_sysctl_clean(void);

/* uuid.c  */
+4 −2
Original line number Diff line number Diff line
@@ -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;
+53 −13
Original line number Diff line number Diff line
@@ -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);
	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)
+12 −0
Original line number Diff line number Diff line
@@ -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>