lkml.org 
[lkml]   [2004]   [Nov]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[patch] inotify: add sysfs store support
    From
    Date
    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,

    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 14:08    [W:0.026 / U:0.656 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site