From: Ian Pilcher <arequipeno@gmail.com>
To: linux-block@vger.kernel.org, linux-leds@vger.kernel.org
Cc: axboe@kernel.dk, pavel@ucw.cz, kabel@kernel.org,
linux-kernel@vger.kernel.org, kernelnewbies@kernelnewbies.org
Subject: [RFC PATCH v3 00/18] Add block device LED trigger
Date: Wed, 18 Aug 2021 21:50:35 -0500 [thread overview]
Message-ID: <20210819025053.222710-1-arequipeno@gmail.com> (raw)
Ridiculous or not, here is version 3 of the block device trigger for
"freaking blinkenlights". It addresses basically all of the points
raised in response to the v2 patchset.
* The main body of the code is moved from the block directory into
the LED triggers directory (drivers/leds/trigger/ledtrig-blkdev.c)
The downside of this is that it requires adding an API to the
block subsystem - get_disk_by_name() - which allows the trigger
code to resolve a gendisk when asked to monitor it. I know of
no good way to do this today, and I don't know of a good way to
implement the sysfs API requested by Pavel and Marek without
something like this API.
Other than that, changes to the block subsystem are as minimal as
I can make them - a single pointer added to struct gendisk and
init/cleanup calls when a gendisk is added or deleted.
* This also implements Marek's suggestion of periodically checking
devices for activity, rather than directly blinking LEDs in the
I/O path. This change has the unanticipated benefit of making the
trigger work on pretty much all types of virtual block devices
(device mapper, MD RAID, zRAM, etc.), as well as NVMe SSDs.
* Relationships between devices and LEDs are now many-to-many. An
LED can monitor multiple devices, and multiple LEDs can monitor
any one device. The current "associations" are reflected in two
sysfs directories.
- /sys/class/leds/<led>/block_devices contains links to all devices
associated with an LED, and
- /sys/block/<disk>/blkdev_leds contains links to all LEDs with
which the device is associated.
(The latter directory only exists when the device is associated
with at least one LED.)
* Each LED can be set to show read activity, write activity, or both.
Discards and cache flushes are considered to be writes, as they
affect the state of the device's non-volatile storage.
Ian Pilcher (18):
docs: Add block device (blkdev) LED trigger documentation
block: Add get_disk_by_name() for use by blkdev LED trigger
ledtrig-blkdev: Add file (ledtrig-blkdev.c) for block device LED
trigger
ledtrig-blkdev: Add misc. helper functions to blkdev LED trigger
ledtrig-blkdev: Periodically check devices for activity & blink LEDs
block: Add LED trigger pointer to struct gendisk
ledtrig-blkdev: Add function to initialize gendisk ledtrig member
ledtrig-blkdev: Add function to remove LED/device association
ledtrig-blkdev: Add function to disassociate a device from all LEDs
block: Call LED trigger init/cleanup functions
ledtrig-blkdev: Add function to associate a device with an LED
ledtrig-blkdev: Add sysfs attributes to [dis]associate LEDs & devices
ledtrig-blkdev: Add blink_time & interval sysfs attributes
ledtrig-blkdev: Add mode (read/write/rw) sysfs attributue
ledtrig-blkdev: Add function to associate blkdev trigger with LED
ledtrig-blkdev: Add function to disassociate an LED from the trigger
ledtrig-blkdev: Add initialization function
ledtrig-blkdev: Add config option to enable the trigger
Documentation/ABI/testing/sysfs-block | 9 +
.../testing/sysfs-class-led-trigger-blkdev | 48 ++
Documentation/leds/index.rst | 1 +
Documentation/leds/ledtrig-blkdev.rst | 132 +++
block/genhd.c | 28 +
drivers/leds/trigger/Kconfig | 9 +
drivers/leds/trigger/Makefile | 1 +
drivers/leds/trigger/ledtrig-blkdev.c | 770 ++++++++++++++++++
include/linux/genhd.h | 13 +
include/linux/leds.h | 20 +
10 files changed, 1031 insertions(+)
create mode 100644 Documentation/ABI/testing/sysfs-class-led-trigger-blkdev
create mode 100644 Documentation/leds/ledtrig-blkdev.rst
create mode 100644 drivers/leds/trigger/ledtrig-blkdev.c
--
2.31.1
next reply other threads:[~2021-08-19 2:51 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-19 2:50 Ian Pilcher [this message]
2021-08-19 2:50 ` [RFC PATCH v3 01/18] docs: Add block device (blkdev) LED trigger documentation Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 02/18] block: Add get_disk_by_name() for use by blkdev LED trigger Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 03/18] ledtrig-blkdev: Add file (ledtrig-blkdev.c) for block device " Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 04/18] ledtrig-blkdev: Add misc. helper functions to blkdev " Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 05/18] ledtrig-blkdev: Periodically check devices for activity & blink LEDs Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 06/18] block: Add LED trigger pointer to struct gendisk Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 07/18] ledtrig-blkdev: Add function to initialize gendisk ledtrig member Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 08/18] ledtrig-blkdev: Add function to remove LED/device association Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 09/18] ledtrig-blkdev: Add function to disassociate a device from all LEDs Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 10/18] block: Call LED trigger init/cleanup functions Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 11/18] ledtrig-blkdev: Add function to associate a device with an LED Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 12/18] ledtrig-blkdev: Add sysfs attributes to [dis]associate LEDs & devices Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 13/18] ledtrig-blkdev: Add blink_time & interval sysfs attributes Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 14/18] ledtrig-blkdev: Add mode (read/write/rw) sysfs attributue Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 15/18] ledtrig-blkdev: Add function to associate blkdev trigger with LED Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 16/18] ledtrig-blkdev: Add function to disassociate an LED from the trigger Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 17/18] ledtrig-blkdev: Add initialization function Ian Pilcher
2021-08-19 2:50 ` [RFC PATCH v3 18/18] ledtrig-blkdev: Add config option to enable the trigger Ian Pilcher
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210819025053.222710-1-arequipeno@gmail.com \
--to=arequipeno@gmail.com \
--cc=axboe@kernel.dk \
--cc=kabel@kernel.org \
--cc=kernelnewbies@kernelnewbies.org \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=pavel@ucw.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).