staging/lustre: Generic helpers for sysfs
Subsystems (2)
PATCH 1/3 staging/lustre: Generic helpers for sysfs
From: Oleg Drokin <[email protected]>
Add generic helpers to allow displaying oof lustre-specific values in /sys/fs/lustre
Signed-off-by Oleg Drokin <[email protected]>
--- .../staging/lustre/lustre/include/lprocfs_status.h | 26 ++++++++++++++++++++++ .../lustre/lustre/obdclass/lprocfs_status.c | 24 ++++++++++++++++++++ 2 files changed, 50 insertions(+)
drivers/staging/lustre/lustre/include/lprocfs_status.h +26 -0
@@ -350,6 +350,8 @@ enum {/* class_obd.c */ extern struct proc_dir_entry *proc_lustre_root; +extern struct kobject lustre_kobj; +struct obd_device ;struct obd_histogram ;
@@ -742,6 +744,30 @@ static struct file_operations name##_fops = { \ .release = lprocfs_single_release, \ } +struct lustre_attr { +struct attribute attr; +ssize_t (*show)(struct kobject *kobj,char *); +ssize_t (*store)(struct kobject *kobj,const char *,size_t ); +}; + +#define LUSTRE_ATTR (name, mode, show, store) \ +static struct lustre_attr lustre_attr_##name = __ATTR(name, mode, show, store) + +#define LUSTRE_ATTR_VALUE (name, mode, show, store, value) \ +static struct lustre_attr lustre_attr_##name = \ + { __ATTR(name, mode, show, store), value } + +#define LUSTRE_RO_ATTR (name) LUSTRE_ATTR(name, 0444, name##_show, NULL) +#define LUSTRE_RW_ATTR (name) LUSTRE_ATTR(name, 0644, name##_show, name##_store) +#define LUSTRE_ATTR_LIST (name) &lustre_attr_##name.attr + +ssize_t lustre_attr_show (struct kobject *kobj, +struct attribute *attr,char *buf); +ssize_t lustre_attr_store (struct kobject *kobj,struct attribute *attr, +const char *buf,size_t len); + +extern const struct sysfs_ops lustre_sysfs_ops; +/* lproc_ptlrpc.c */ struct ptlrpc_request ;extern void target_print_req (void *seq_file,struct ptlrpc_request *req);
drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +24 -0
@@ -2057,3 +2057,27 @@ int lprocfs_obd_rd_max_pages_per_rpc(struct seq_file *m, void *data)EXPORT_SYMBOL (lprocfs_obd_rd_max_pages_per_rpc);#endif + +ssize_t lustre_attr_show (struct kobject *kobj, +struct attribute *attr,char *buf) +{ + struct lustre_attr *a = container_of(attr, struct lustre_attr, attr); + +return a->show ? a->show (kobj, buf) :0 ; +} +EXPORT_SYMBOL (lustre_attr_show); + +ssize_t lustre_attr_store (struct kobject *kobj,struct attribute *attr, +const char *buf,size_t len) +{ + struct lustre_attr *a = container_of(attr, struct lustre_attr, attr); + +return a->store ? a->store (kobj, buf, len) :0 ; +} +EXPORT_SYMBOL (lustre_attr_store); + +const struct sysfs_ops lustre_sysfs_ops = { + .show = lustre_attr_show, + .store = lustre_attr_store, +}; +EXPORT_SYMBOL (lustre_sysfs_ops);
Signature · 1 line
2.1.0
Greg Kroah-Hartman
maintainerQuoted 77 lines · On Sat, May 02, 2015 at 11:10:06PM -0400, [email protected] wrote:
From: Oleg Drokin <[email protected]>
Add generic helpers to allow displaying oof lustre-specific values in
/sys/fs/lustreSigned-off-by Oleg Drokin <[email protected]>--- .../staging/lustre/lustre/include/lprocfs_status.h | 26 ++++++++++++++++++++++ .../lustre/lustre/obdclass/lprocfs_status.c | 24 ++++++++++++++++++++ 2 files changed, 50 insertions(+)drivers/staging/lustre/lustre/include/lprocfs_status.h +26
-0@@ -350,6 +350,8 @@ enum {/* class_obd.c */ extern struct proc_dir_entry *proc_lustre_root; +extern struct kobject lustre_kobj; +struct obd_device ;struct obd_histogram ;@@ -742,6 +744,30 @@ static struct file_operations name##_fops = { \ .release = lprocfs_single_release, \ } +struct lustre_attr { +struct attribute attr; +ssize_t (*show)(struct kobject *kobj,char *); +ssize_t (*store)(struct kobject *kobj,const char *,size_t ); +}; + +#define LUSTRE_ATTR (name, mode, show, store) \ +static struct lustre_attr lustre_attr_##name = __ATTR(name, mode, show, store) + +#define LUSTRE_ATTR_VALUE (name, mode, show, store, value) \ +static struct lustre_attr lustre_attr_##name = \ + { __ATTR(name, mode, show, store), value } + +#define LUSTRE_RO_ATTR (name) LUSTRE_ATTR(name, 0444, name##_show, NULL) +#define LUSTRE_RW_ATTR (name) LUSTRE_ATTR(name, 0644, name##_show, name##_store) +#define LUSTRE_ATTR_LIST (name) &lustre_attr_##name.attr + +ssize_t lustre_attr_show (struct kobject *kobj, +struct attribute *attr,char *buf); +ssize_t lustre_attr_store (struct kobject *kobj,struct attribute *attr, +const char *buf,size_t len); + +extern const struct sysfs_ops lustre_sysfs_ops; +/* lproc_ptlrpc.c */ struct ptlrpc_request ;extern void target_print_req (void *seq_file,struct ptlrpc_request *req);drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +14
-0@@ -2057,3 +2057,27 @@ int lprocfs_obd_rd_max_pages_per_rpc(struct seq_file *m, void *data)EXPORT_SYMBOL (lprocfs_obd_rd_max_pages_per_rpc);#endif + +ssize_t lustre_attr_show (struct kobject *kobj, +struct attribute *attr,char *buf) +{ + struct lustre_attr *a = container_of(attr, struct lustre_attr, attr); + +return a->show ? a->show (kobj, buf) :0 ; +} +EXPORT_SYMBOL (lustre_attr_show); + +ssize_t lustre_attr_store (struct kobject *kobj,struct attribute *attr, +const char *buf,size_t len) +{ + struct lustre_attr *a = container_of(attr, struct lustre_attr, attr);
drivers/staging/lustre/lustre/obdclass/lprocfs_status.c int lprocfs_obd_rd_max_pages_per_rpc(struct seq_file *m, void *data) · line 2083
Quoted 10 lines
drivers/staging/lustre/lustre/obdclass/lprocfs_status.c +10
-0+ +return a->store ? a->store (kobj, buf, len) :0 ; +} +EXPORT_SYMBOL (lustre_attr_store); + +const struct sysfs_ops lustre_sysfs_ops = { + .show = lustre_attr_show, + .store = lustre_attr_store, +}; +EXPORT_SYMBOL (lustre_sysfs_ops);
EXPORT_SYMBOL_GPL for all of these please, as they just wrap sysfs stuff directly.
Other than that, looks good to me.
greg k-h