Messages in this thread | | | Subject | Re: [patch] inotify: add sysfs store support | From | John McCutchan <> | Date | Wed, 17 Nov 2004 20:00:41 -0500 |
| |
Awesome work! But I am going to hold off applying this, until the mainline kernel gets the misc device changes.
John
On Wed, 2004-11-17 at 15:10 -0500, Robert Love wrote: > Attached patch implements the final chunk of our sysfs solution: store > support. I added basic write support with some simple checking (do not > allow zero) to the existing sysfs attributes. > > I made a few other changes. I added a newline after the values in the > show function. The other sysfs attributes do this and it makes > sense--do a "cat *" in our sysfs directory before and after. I also > just return sprintf() directly instead of the strlen(). I also made > max_queued_events unsigned, since dev->max_events is unsigned. If we > don't do this we need to add checking in store_max_queued_events to > ensure that the given value is less than or equal to INT_MAX so this > seems easier and more optimal anyhow. The other values I kept at int > since that is the range of atomic_t's. > > I am running it now. I can read and write the values fine. Works > great. > > Robert Love > > > Add store support to our sysfs attributes and a few other changes. > > inotify.c | 35 +++++++++++++++++++++++++---------- > 1 files changed, 25 insertions(+), 10 deletions(-) > > diff -u linux/drivers/char/inotify.c linux/drivers/char/inotify.c > --- linux/drivers/char/inotify.c 2004-11-16 14:42:11.929575168 -0500 > +++ linux/drivers/char/inotify.c 2004-11-17 12:28:27.921136656 -0500 > @@ -40,7 +40,7 @@ > > static int sysfs_attrib_max_user_devices; > static int sysfs_attrib_max_user_watches; > -static int sysfs_attrib_max_queued_events; > +static unsigned int sysfs_attrib_max_queued_events; > > /* > * struct inotify_device - represents an open instance of an inotify device > @@ -82,38 +82,53 @@ > > static ssize_t show_max_queued_events(struct class_device *class, char *buf) > { > - sprintf(buf, "%d", sysfs_attrib_max_queued_events); > - return strlen(buf) + 1; > + return sprintf(buf, "%d\n", sysfs_attrib_max_queued_events); > } > > static ssize_t store_max_queued_events(struct class_device *class, > const char *buf, size_t count) > { > - return 0; > + unsigned int max; > + > + if (sscanf(buf, "%u", &max) > 0 && max > 0) { > + sysfs_attrib_max_queued_events = max; > + return strlen(buf); > + } > + return -EINVAL; > } > > static ssize_t show_max_user_devices(struct class_device *class, char *buf) > { > - sprintf(buf, "%d", sysfs_attrib_max_user_devices); > - return strlen(buf) + 1; > + return sprintf(buf, "%d\n", sysfs_attrib_max_user_devices); > } > > static ssize_t store_max_user_devices(struct class_device *class, > const char *buf, size_t count) > { > - return 0; > + int max; > + > + if (sscanf(buf, "%d", &max) > 0 && max > 0) { > + sysfs_attrib_max_user_devices = max; > + return strlen(buf); > + } > + return -EINVAL; > } > > static ssize_t show_max_user_watches(struct class_device *class, char *buf) > { > - sprintf(buf, "%d", sysfs_attrib_max_user_watches); > - return strlen(buf) + 1; > + return sprintf(buf, "%d\n", sysfs_attrib_max_user_watches); > } > > static ssize_t store_max_user_watches(struct class_device *class, > const char *buf, size_t count) > { > - return 0; > + int max; > + > + if (sscanf(buf, "%d", &max) > 0 && max > 0) { > + sysfs_attrib_max_user_watches = max; > + return strlen(buf); > + } > + return -EINVAL; > } > > static CLASS_DEVICE_ATTR(max_queued_events, S_IRUGO | S_IWUSR, > > -- John McCutchan <ttb@tentacle.dhs.org> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |