lkml.org 
[lkml]   [2012]   [Jul]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/3] sysfs: introduce a sysfs_create_file_uevent new API
    Date
    Send a uevent notification whenever a new sysfs file is created to allow
    userspace processes such as udev to modify permissions on the new files.

    This new API function helps to do this.

    Signed-off-by: Bryan Wu <bryan.wu@canonical.com>
    ---
    fs/sysfs/file.c | 28 ++++++++++++++++++++++++++++
    include/linux/sysfs.h | 13 +++++++++++++
    2 files changed, 41 insertions(+)

    diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
    index 00012e3..5a22d13 100644
    --- a/fs/sysfs/file.c
    +++ b/fs/sysfs/file.c
    @@ -576,6 +576,34 @@ int sysfs_create_file(struct kobject * kobj, const struct attribute * attr)

    }

    +/**
    + * sysfs_create_file_uevent - create an attribute file for an object
    + and send a uevent to userspace.
    + * @kobj: object we're creating for.
    + * @attr: attribute descriptor.
    + * @desc: description about the uevent.
    + * @action: kobject uevent action type.
    + */
    +
    +int sysfs_create_file_uevent(struct kobject *kobj, const struct attribute *attr,
    + const char *desc, enum kobject_action action)
    +{
    + int err = 0;
    + char *envp[2];
    +
    + BUG_ON(!kobj || !kobj->sd || !attr || !desc);
    +
    + err = sysfs_add_file(kobj->sd, attr, SYSFS_KOBJ_ATTR);
    +
    + if (desc) {
    + envp[0] = desc;
    + envp[1] = NULL;
    + kobject_uevent_env(kobj, action, envp);
    + }
    +
    + return err;
    +}
    +
    int sysfs_create_files(struct kobject *kobj, const struct attribute **ptr)
    {
    int err = 0;
    diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
    index 381f06d..0054d41 100644
    --- a/include/linux/sysfs.h
    +++ b/include/linux/sysfs.h
    @@ -22,6 +22,7 @@
    struct kobject;
    struct module;
    enum kobj_ns_type;
    +enum kobject_action;

    struct attribute {
    const char *name;
    @@ -142,6 +143,10 @@ int __must_check sysfs_move_dir(struct kobject *kobj,

    int __must_check sysfs_create_file(struct kobject *kobj,
    const struct attribute *attr);
    +int __must_check sysfs_create_file_uevent(struct kobject * kobj,
    + const struct attribute * attr,
    + const char * desc,
    + enum kobject_action action);
    int __must_check sysfs_create_files(struct kobject *kobj,
    const struct attribute **attr);
    int __must_check sysfs_chmod_file(struct kobject *kobj,
    @@ -226,6 +231,14 @@ static inline int sysfs_create_file(struct kobject *kobj,
    return 0;
    }

    +static inline int sysfs_create_file_uevent(struct kobject * kobj,
    + const struct attribute * attr,
    + const char *desc,
    + enum kobject_action action)
    +{
    + return 0;
    +}
    +
    static inline int sysfs_create_files(struct kobject *kobj,
    const struct attribute **attr)
    {
    --
    1.7.11.1


    \
     
     \ /
      Last update: 2012-07-27 06:42    [W:0.036 / U:0.568 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site