lkml.org 
[lkml]   [2010]   [Jan]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [4/12] SYSFS: Add sysfs_add/remove_files utility functions
    Date

    Adding/Removing a whole array of attributes is very common. Add a standard
    utility function to do this with a simple function call, instead of
    requiring drivers to open code this.

    Signed-off-by: Andi Kleen <ak@linux.intel.com>

    ---
    fs/sysfs/file.c | 20 ++++++++++++++++++++
    include/linux/sysfs.h | 14 ++++++++++++++
    2 files changed, 34 insertions(+)

    Index: linux-2.6.33-rc2-ak/fs/sysfs/file.c
    ===================================================================
    --- linux-2.6.33-rc2-ak.orig/fs/sysfs/file.c
    +++ linux-2.6.33-rc2-ak/fs/sysfs/file.c
    @@ -542,6 +542,18 @@ int sysfs_create_file(struct kobject * k

    }

    +int sysfs_create_files(struct kobject *kobj, const struct attribute **ptr)
    +{
    + int err = 0;
    + int i;
    +
    + for (i = 0; ptr[i] && !err; i++)
    + err = sysfs_create_file(kobj, ptr[i]);
    + if (err)
    + while (--i >= 0)
    + sysfs_remove_file(kobj, ptr[i]);
    + return err;
    +}

    /**
    * sysfs_add_file_to_group - add an attribute file to a pre-existing group.
    @@ -614,6 +626,12 @@ void sysfs_remove_file(struct kobject *
    sysfs_hash_and_remove(kobj->sd, attr->name);
    }

    +void sysfs_remove_files(struct kobject * kobj, const struct attribute **ptr)
    +{
    + int i;
    + for (i = 0; ptr[i]; i++)
    + sysfs_remove_file(kobj, ptr[i]);
    +}

    /**
    * sysfs_remove_file_from_group - remove an attribute file from a group.
    @@ -732,3 +750,5 @@ EXPORT_SYMBOL_GPL(sysfs_schedule_callbac

    EXPORT_SYMBOL_GPL(sysfs_create_file);
    EXPORT_SYMBOL_GPL(sysfs_remove_file);
    +EXPORT_SYMBOL_GPL(sysfs_remove_files);
    +EXPORT_SYMBOL_GPL(sysfs_create_files);
    Index: linux-2.6.33-rc2-ak/include/linux/sysfs.h
    ===================================================================
    --- linux-2.6.33-rc2-ak.orig/include/linux/sysfs.h
    +++ linux-2.6.33-rc2-ak/include/linux/sysfs.h
    @@ -94,9 +94,12 @@ int __must_check sysfs_move_dir(struct k

    int __must_check sysfs_create_file(struct kobject *kobj,
    const struct attribute *attr);
    +int __must_check sysfs_create_files(struct kobject *kobj,
    + const struct attribute **attr);
    int __must_check sysfs_chmod_file(struct kobject *kobj, struct attribute *attr,
    mode_t mode);
    void sysfs_remove_file(struct kobject *kobj, const struct attribute *attr);
    +void sysfs_remove_files(struct kobject *kobj, const struct attribute **attr);

    int __must_check sysfs_create_bin_file(struct kobject *kobj,
    const struct bin_attribute *attr);
    @@ -164,6 +167,12 @@ static inline int sysfs_create_file(stru
    return 0;
    }

    +static inline int sysfs_create_files(struct kobject *kobj,
    + const struct attribute **attr)
    +{
    + return 0;
    +}
    +
    static inline int sysfs_chmod_file(struct kobject *kobj,
    struct attribute *attr, mode_t mode)
    {
    @@ -175,6 +184,11 @@ static inline void sysfs_remove_file(str
    {
    }

    +static inline void sysfs_remove_files(struct kobject *kobj,
    + const struct attribute **attr)
    +{
    +}
    +
    static inline int sysfs_create_bin_file(struct kobject *kobj,
    const struct bin_attribute *attr)
    {

    \
     
     \ /
      Last update: 2010-01-05 12:53    [W:0.023 / U:29.744 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site