From patchwork Sat Aug 10 17:55:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akinobu Mita X-Patchwork-Id: 11088641 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 1310F14F7 for ; Sat, 10 Aug 2019 17:55:51 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F272B201BD for ; Sat, 10 Aug 2019 17:55:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E6CB522638; Sat, 10 Aug 2019 17:55:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8655622A65 for ; Sat, 10 Aug 2019 17:55:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726253AbfHJRzt (ORCPT ); Sat, 10 Aug 2019 13:55:49 -0400 Received: from mail-pf1-f194.google.com ([209.85.210.194]:42148 "EHLO mail-pf1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726014AbfHJRzt (ORCPT ); Sat, 10 Aug 2019 13:55:49 -0400 Received: by mail-pf1-f194.google.com with SMTP id q10so47671899pff.9; Sat, 10 Aug 2019 10:55:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=AVfMX6QMV6PyqWsJPtDzTdoOO2jzzS21Op+O5L+8L7o=; b=N7lbfhIpqmHugedPRlThgo1zTW075TGIwh7ISCztXOsmWo2iYU1OgHE+ofsd7qa1/I 6fvlqI2D+7kXkVNioAIo943hXTyRoAsOliSAWjjFQsNtyHYd32IOMv7ej+G6NkpCa8XE oSknfnlzP2WfM+jlXlv3AFdgHkQHas4YQ4Eprj8aWgu/gNc4EY7/mu9B1UMh2rikEfig WQGQ23hr9gYBNuyfm22FG/iFONSI8YseuZi+xVAA1KrdshYt4qTMr44wenru9uqRsXBS O/ki7++iCiLqOAteQutNBugglv031kPnL023+5Oc/nkdLTKInqQXjguHTGaUzgEwu/Zx zChw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=AVfMX6QMV6PyqWsJPtDzTdoOO2jzzS21Op+O5L+8L7o=; b=JtDdGTwDup0TrRwHn+l+7bD8E2QkG5QO1D5WL4DUpCB+eLe6DegGa5mcf9wttVdkdQ eIOW/7ZTXq4r17HuDQg3XRYEI831fis6OjP+JOahDeGcO3WtpDV/0X3I+dSbp6JxnKdD ZDQzSC2f4KXrTDJ01EfHzctkyw186js0cj/povpt0bOPISJzm0e42vJoZGCtxfMX3fp2 urb6FfeNhJ8MO1Sm7zRgT+4+924ZPJRxJRwcsPiSf+AH9BF8FppB+qJN7D6W56A1tFpf KlpIPFE7mX2VqW7ooMw8xpJV2hKjPK+xmAdPCILQQWw7G2HTNbG9hhl82xsHlJF7SroZ W6XA== X-Gm-Message-State: APjAAAWIZ4gZqbl6Vqp+Adv3EQh2YQywDvvG9R9T8nQFwRZzCI3e1MZo Sx/7Ddv9TAL5vNQhFeWBVHqhcaezxU0= X-Google-Smtp-Source: APXvYqwjSdrkeXQ+uvDURUhSgaO64jF+/9IW/MzfGhAlKHO7CZudOuJ9DFi/SFDlARo2GpOcC9Z2lw== X-Received: by 2002:a17:90a:cd03:: with SMTP id d3mr152787pju.117.1565459748683; Sat, 10 Aug 2019 10:55:48 -0700 (PDT) Received: from mita-MS-7A45.lan ([240f:34:212d:1:a137:2bda:e96e:808]) by smtp.gmail.com with ESMTPSA id 185sm102146544pfd.125.2019.08.10.10.55.45 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 10 Aug 2019 10:55:47 -0700 (PDT) From: Akinobu Mita To: linux-block@vger.kernel.org, linux-leds@vger.kernel.org, linux-nvme@lists.infradead.org, linux-scsi@vger.kernel.org Cc: Akinobu Mita , Frank Steiner , Jacek Anaszewski , Pavel Machek , Dan Murphy , Jens Axboe , "James E.J. Bottomley" , "Martin K. Petersen" , Hannes Reinecke Subject: [PATCH v3 5/6] ledtrig-blk: add interface to stop and restart polling disk stats Date: Sun, 11 Aug 2019 02:55:02 +0900 Message-Id: <1565459703-30513-6-git-send-email-akinobu.mita@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1565459703-30513-1-git-send-email-akinobu.mita@gmail.com> References: <1565459703-30513-1-git-send-email-akinobu.mita@gmail.com> Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP The LED block device activity trigger periodically polls the disk stats to collect the activity. However, it is pointless to poll while the block device is in quiescent state. This provides an optional interface to stop and restart polling disk stats for the lower-level block drivers. Cc: Frank Steiner Cc: Jacek Anaszewski Cc: Pavel Machek Cc: Dan Murphy Cc: Jens Axboe Cc: "James E.J. Bottomley" Cc: "Martin K. Petersen" Cc: Hannes Reinecke Signed-off-by: Akinobu Mita --- drivers/leds/trigger/ledtrig-blk.c | 37 +++++++++++++++++++++++++++++++++++-- include/linux/leds.h | 11 +++++++++++ 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/drivers/leds/trigger/ledtrig-blk.c b/drivers/leds/trigger/ledtrig-blk.c index d5808c9..6b826ed 100644 --- a/drivers/leds/trigger/ledtrig-blk.c +++ b/drivers/leds/trigger/ledtrig-blk.c @@ -153,8 +153,9 @@ static void ledtrig_blk_work(struct work_struct *work) trig_data->last_activity = activity; } - schedule_delayed_work(&trig_data->work, - atomic_read(&trig_data->interval) * 2); + if (atomic_read(&disk->led.enable_count)) + schedule_delayed_work(&trig_data->work, + atomic_read(&trig_data->interval) * 2); } static int ledtrig_blk_activate(struct led_classdev *led_cdev) @@ -190,6 +191,36 @@ static void ledtrig_blk_deactivate(struct led_classdev *led_cdev) kfree(trig_data); } +void ledtrig_blk_disable(struct gendisk *disk) +{ + if (disk) + atomic_dec(&disk->led.enable_count); +} +EXPORT_SYMBOL_GPL(ledtrig_blk_disable); + +void ledtrig_blk_enable(struct gendisk *disk) +{ + struct led_classdev *led_cdev; + + if (!disk) + return; + + atomic_inc(&disk->led.enable_count); + + read_lock(&disk->led.trig.leddev_list_lock); + + list_for_each_entry(led_cdev, &disk->led.trig.led_cdevs, trig_list) { + struct ledtrig_blk_data *trig_data = + led_get_trigger_data(led_cdev); + + schedule_delayed_work(&trig_data->work, + atomic_read(&trig_data->interval) * 2); + } + + read_unlock(&disk->led.trig.leddev_list_lock); +} +EXPORT_SYMBOL_GPL(ledtrig_blk_enable); + int ledtrig_blk_register(struct gendisk *disk) { int ret; @@ -203,6 +234,8 @@ int ledtrig_blk_register(struct gendisk *disk) disk->led.trig.deactivate = ledtrig_blk_deactivate; disk->led.trig.groups = ledtrig_blk_groups; + atomic_set(&disk->led.enable_count, 1); + ret = led_trigger_register(&disk->led.trig); if (ret) { kfree(disk->led.trig.name); diff --git a/include/linux/leds.h b/include/linux/leds.h index 395fa61..fd2eb7c 100644 --- a/include/linux/leds.h +++ b/include/linux/leds.h @@ -523,8 +523,11 @@ struct gendisk; struct ledtrig_blk { struct led_trigger trig; + atomic_t enable_count; }; +void ledtrig_blk_enable(struct gendisk *disk); +void ledtrig_blk_disable(struct gendisk *disk); int ledtrig_blk_register(struct gendisk *disk); void ledtrig_blk_unregister(struct gendisk *disk); @@ -533,6 +536,14 @@ void ledtrig_blk_unregister(struct gendisk *disk); struct ledtrig_blk { }; +static inline void ledtrig_blk_enable(struct gendisk *disk) +{ +} + +static inline void ledtrig_blk_disable(struct gendisk *disk) +{ +} + static inline int ledtrig_blk_register(struct gendisk *disk) { return 0;