Re: [PATCH] leds: triggers: send uevent when changing triggers

From: Bryan Wu
Date: Thu Jul 26 2012 - 01:03:27 EST


On Thu, Jul 26, 2012 at 11:59 AM, Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx> wrote:
> On Thu, Jul 26, 2012 at 11:29:48AM +0800, Bryan Wu wrote:
>> On Thu, Jul 26, 2012 at 2:54 AM, Colin Cross <ccross@xxxxxxxxxxx> wrote:
>> > On Tue, Jul 24, 2012 at 11:11 PM, Bryan Wu <bryan.wu@xxxxxxxxxxxxx> wrote:
>> >> On Wed, Jul 25, 2012 at 8:32 AM, Colin Cross <ccross@xxxxxxxxxxx> wrote:
>> >>> Some triggers create sysfs files when they are enabled. Send a uevent
>> >>> "change" notification whenever the trigger is changed to allow userspace
>> >>> processes such as udev to modify permissions on the new files.
>> >>>
>> >>
>> >> This looks like an workaround only for led trigger, can we fix this in
>> >> sysfs level?
>> >
>> > See the previous discussion here: https://lkml.org/lkml/2012/7/20/458
>>
>> Thanks, I went through this thread here. Actually it was archived in
>> my email account, so I missed that during a trip.
>>
>> Basically, I think this issue is a kind of general issue related to
>> sysfs, not just only for led trigger system. And adding this uevent
>> notification to a upper level LED driver is not good to me, if we got
>> similar issue in other subsystem, we should add similar fix there. Why
>> not we add this in sysfs when we call device_create_file(). And this
>> will be benefit for other drivers.
>>
>> Please point out me why we can't do that in sysfs level. Thanks.
>
> Please point out to me how you _can_ do this at a sysfs level :)
>
> greg k-h

Just one quick patch for my idea: emitting a uevent in sysfs_create_file().

--
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c
index 00012e3..04da869 100644
--- a/fs/sysfs/file.c
+++ b/fs/sysfs/file.c
@@ -570,10 +570,14 @@ int sysfs_add_file(struct sysfs_dirent *dir_sd,
const struct attribute *attr,

int sysfs_create_file(struct kobject * kobj, const struct attribute * attr)
{
+ int err = 0;
+
BUG_ON(!kobj || !kobj->sd || !attr);

- return sysfs_add_file(kobj->sd, attr, SYSFS_KOBJ_ATTR);
+ err = sysfs_add_file(kobj->sd, attr, SYSFS_KOBJ_ATTR);
+ kobject_uevent(kobj, KOBJ_CHANGE);

+ return err;
}

int sysfs_create_files(struct kobject *kobj, const struct attribute **ptr)
--


--
Bryan Wu <bryan.wu@xxxxxxxxxxxxx>
Kernel Developer +86.186-168-78255 Mobile
Canonical Ltd. www.canonical.com
Ubuntu - Linux for human beings | www.ubuntu.com
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/