PATCH [2/2] Documentation/filesystems/sysfs.txt: fix descriptions of device attributes

From: Mike Murphy
Date: Sun Feb 22 2009 - 01:19:34 EST


Fix descriptions of device attributes to be consistent with the actual
implementations in include/linux/device.h

Signed-off-by: Mike Murphy <mamurph[at]cs.clemson.edu>
--- linux-2.6.28.5/Documentation/filesystems/sysfs.txt 2009-02-12 12:51:15.000000000 -0500
+++ docfix/Documentation/filesystems/sysfs.txt 2009-02-22 00:59:37.000000000 -0500
@@ -2,8 +2,10 @@
sysfs - _The_ filesystem for exporting kernel objects.

Patrick Mochel <mochel@xxxxxxxx>
+Mike Murphy <mamurph@xxxxxxxxxxxxxx>

-10 January 2003
+Revised: 22 February 2009
+Original: 10 January 2003


What it is:
@@ -64,12 +66,13 @@

struct attribute {
char * name;
+ struct module *owner;
mode_t mode;
};


-int sysfs_create_file(struct kobject * kobj, struct attribute * attr);
-void sysfs_remove_file(struct kobject * kobj, struct attribute * attr);
+int sysfs_create_file(struct kobject * kobj, const struct attribute * attr);
+void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr);


A bare attribute contains no means to read or write the value of the
@@ -80,9 +83,11 @@
For example, the driver model defines struct device_attribute like:

struct device_attribute {
- struct attribute attr;
- ssize_t (*show)(struct device * dev, char * buf);
- ssize_t (*store)(struct device * dev, const char * buf);
+ struct attribute attr;
+ ssize_t (*show)(struct device *dev, struct device_attribute *attr,
+ char *buf);
+ ssize_t (*store)(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count);
};

int device_create_file(struct device *, struct device_attribute *);
@@ -90,12 +95,8 @@

It also defines this helper for defining device attributes:

-#define DEVICE_ATTR(_name, _mode, _show, _store) \
-struct device_attribute dev_attr_##_name = { \
- .attr = {.name = __stringify(_name) , .mode = _mode }, \
- .show = _show, \
- .store = _store, \
-};
+#define DEVICE_ATTR(_name, _mode, _show, _store) \
+struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)

For example, declaring

@@ -107,9 +108,9 @@
.attr = {
.name = "foo",
.mode = S_IWUSR | S_IRUGO,
+ .show = show_foo,
+ .store = store_foo,
},
- .show = show_foo,
- .store = store_foo,
};


@@ -161,10 +162,12 @@
specified when declaring the attribute. The method types should be as
simple as those defined for device attributes:

- ssize_t (*show)(struct device * dev, char * buf);
- ssize_t (*store)(struct device * dev, const char * buf);
+ssize_t (*show)(struct device * dev, struct device_attribute * attr,
+ char * buf);
+ssize_t (*store)(struct device * dev, struct device_attribute * attr,
+ const char * buf);

-IOW, they should take only an object and a buffer as parameters.
+IOW, they should take only an object, an attribute, and a buffer as parameters.


sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the
@@ -299,14 +302,16 @@
Structure:

struct device_attribute {
- struct attribute attr;
- ssize_t (*show)(struct device * dev, char * buf);
- ssize_t (*store)(struct device * dev, const char * buf);
+ struct attribute attr;
+ ssize_t (*show)(struct device *dev, struct device_attribute *attr,
+ char *buf);
+ ssize_t (*store)(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t count);
};

Declaring:

-DEVICE_ATTR(_name, _str, _mode, _show, _store);
+DEVICE_ATTR(_name, _mode, _show, _store);

Creation/Removal:

@@ -342,7 +347,8 @@
struct driver_attribute {
struct attribute attr;
ssize_t (*show)(struct device_driver *, char * buf);
- ssize_t (*store)(struct device_driver *, const char * buf);
+ ssize_t (*store)(struct device_driver *, const char * buf,
+ size_t count);
};

Declaring: