Re: [PATCH] leds: remove PAGE_SIZE limit of /sys/class/leds/<led>/trigger

From: Jacek Anaszewski
Date: Tue Sep 03 2019 - 14:18:44 EST


On 9/3/19 4:21 PM, Akinobu Mita wrote:
> 2019å9æ3æ(ç) 23:07 Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>:
>>
>> On Tue, Sep 03, 2019 at 10:55:40PM +0900, Akinobu Mita wrote:
>>> 2019å9æ3æ(ç) 4:08 Greg KH <gregkh@xxxxxxxxxxxxxxxxxxx>:
>>>>
>>>> On Mon, Sep 02, 2019 at 08:47:02PM +0200, Jacek Anaszewski wrote:
>>>>> On 9/2/19 8:12 PM, Greg KH wrote:
>>>>>> On Sun, Sep 01, 2019 at 06:53:34PM +0200, Jacek Anaszewski wrote:
>>>>>>> Hi Akinobu,
>>>>>>>
>>>>>>> Thank you for the patch.
>>>>>>>
>>>>>>> I have one nit below but in general it looks good to me.
>>>>>>> I've tested it with 2000 mtd triggers (~14kB file size)
>>>>>>> and it worked flawlessly.
>>>>>>>
>>>>>>> Still, I would like to have ack from Greg for it.
>>>>>>>
>>>>>>> Adding Greg on Cc.
>>>>>>>
>>>>>>> On 8/29/19 4:49 PM, Akinobu Mita wrote:
>>>>>>>> Reading /sys/class/leds/<led>/trigger returns all available LED triggers.
>>>>>>>> However, the size of this file is limited to PAGE_SIZE because of the
>>>>>>>> limitation for sysfs attribute.
>>>>>>>>
>>>>>>>> Enabling LED CPU trigger on systems with thousands of CPUs easily hits
>>>>>>>> PAGE_SIZE limit, and makes it impossible to see all available LED triggers
>>>>>>>> and which trigger is currently activated.
>>>>>>>>
>>>>>>>> This converts /sys/class/leds/<led>/trigger to bin attribute and removes
>>>>>>>> the PAGE_SIZE limitation.
>>>>>>
>>>>>> But this is NOT a binary file. A sysfs binary file is used for when the
>>>>>> kernel passes data to or from hardware without any parsing of the data
>>>>>> by the kernel.
>>>>>>
>>>>>> You are not doing that here, you are abusing the "one value per file"
>>>>>> rule of sysfs so much that you are forced to work around the limitation
>>>>>> it put in place on purpose to keep you from doing stuff like this.
>>>>>>
>>>>>> Please fix this "correctly" by creating a new api that works properly
>>>>>> and just live with the fact that this file will never work correctly and
>>>>>> move everyone to use the new api instead.
>>>>>>
>>>>>> Don't keep on abusing the interface by workarounds like this, it is not
>>>>>> ok.
>>>>>
>>>>> In the message [0] you pledged to give us exception for that, provided
>>>>> it will be properly documented in the code. I suppose you now object
>>>>> because the patch does not meet that condition.
>>>>
>>>> Well, I honestly don't remember writing that email, but it was 5 months
>>>> and many thousands of emails ago :)
>>>>
>>>> Also, you all didn't document the heck out of this. So no, I really do
>>>> not want to see this patch accepted as-is.
>>>>
>>>>> Provided that will be fixed, can we count on your ack for the
>>>>> implementation of the solution you proposed? :-)
>>>>
>>>> Let's see the patch that actually implements what I suggested first :)
>>>
>>> I'd propose introducing a new procfs file (/proc/led-triggers) and new
>>> /sys/class/leds/<led>/current-trigger api.
>>>
>>> Reading /proc/led-triggers file shows all available triggers.
>>> This violates "one value per file", but it's a procfs file.
>>
>> No, procfs files are ONLY for process-related things. Don't keep the
>> insanity of this file format by just moving it out of sysfs and into
>> procfs :)
>
> I see.
>
> How about creating one file or directory for each led-trigger in
> /sys/kernel/led-triggers directory?
>
> e.g.
>
> $ ls /sys/kernel/led-triggers
> audio-micmute ide-disk phy0assoc
> audio-mute kbd-altgrlock phy0radio
> ...
> hidpp_battery_3-full panic
I think that /sys/class/leds/triggers would better reflect the reality.
After all LED Trigger core belongs to LED subsystem.

--
Best regards,
Jacek Anaszewski