From patchwork Tue Jun 5 18:01:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tejun Heo X-Patchwork-Id: 10449015 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5122C60375 for ; Tue, 5 Jun 2018 18:01:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3E7A729AF3 for ; Tue, 5 Jun 2018 18:01:36 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 32C6A29B04; Tue, 5 Jun 2018 18:01:36 +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=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham 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 BA70329AF3 for ; Tue, 5 Jun 2018 18:01:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752734AbeFESBd (ORCPT ); Tue, 5 Jun 2018 14:01:33 -0400 Received: from mail-yw0-f196.google.com ([209.85.161.196]:36022 "EHLO mail-yw0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751917AbeFESBa (ORCPT ); Tue, 5 Jun 2018 14:01:30 -0400 Received: by mail-yw0-f196.google.com with SMTP id v68-v6so1025425ywd.3; Tue, 05 Jun 2018 11:01:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=g5FgnG6+NWNQdTyCrOVd7D9WO4/XTOTnUeIWhUVZXFo=; b=jXk174j95G4yfzDIMbAQC39rPzvNZjtuLYoQeJ4/aNO8zCe2HOxRndylXxhAqms6zt NCRrZoy+jxgnZYFce685CKSLwKEIWHaHVS494Fs+YLYxYlvMdZugMM3xcs+dIUcKjrWs ZKMoPpH/9RY2Kd9Z5cJrvzM56nqD9NumvASaN/yf2biXn1MMlJ8poPypgAu1dW6c+50S dF3gIiJCZ//7PSvr57d5VJR9xymzwyyo4+rvmWlo2uxuy86OnRw/V5NymKHK7TYJFr8p lpBQTJtP+VD/Oc7tstmL3WecudvQ2Pt9tJOFdvGPbQca/8swNMkVkH8uURdM9nxp7IFd MwZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=g5FgnG6+NWNQdTyCrOVd7D9WO4/XTOTnUeIWhUVZXFo=; b=PXL0czH+j/IQeefsfKEOh+zYimXyUCG2wNKsFBLIEXyotLeB8LwPhUItazFW46qIY3 qkyrf1KzwQD/orHHZFJ1EfECCwjJw/Po3Yn5J7CKG+GQERAQ5sUB+MWo6znaI4EiIy3W ITAauzNOQCUM50T9082XlMNBtxI/EPCKkrPrzfzkA8Y8HRZEBaN8EcPi0qWGIv0pqpCV hBEjKV3hOt7J1W4C1MEOIek1vsSfHrC5v4+Bfvd1uvJ8Q0OTOff8e9OR/qBXV6kWlYyM R7VR5uuzpedB4t5xg3ARlcUK/CgKWvNCu3x1ccfs9uZtsMGdn6NXZBRH5lgyMMk8mm+b TNpg== X-Gm-Message-State: ALKqPweROS94C5/aHO9nhbTyA5cSeAFoKpJHKjZdkWg4QWWDWaZTme8V k/g3pWqHcGNC1aBCazaX34T9IxDO X-Google-Smtp-Source: ADUXVKIU91QsywrhUkCkb/dfCg/truBOvxq3g8ZBtc1aZWKWt/hGg+3uswmh/apSUwBiO1JdTe7TPw== X-Received: by 2002:a81:8a85:: with SMTP id a127-v6mr13653211ywg.465.1528221690030; Tue, 05 Jun 2018 11:01:30 -0700 (PDT) Received: from localhost ([2620:10d:c091:200::1:f697]) by smtp.gmail.com with ESMTPSA id w4-v6sm6670470ywf.63.2018.06.05.11.01.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jun 2018 11:01:29 -0700 (PDT) From: Tejun Heo To: axboe@kernel.dk Cc: michaelcallahan@fb.com, newella@fb.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com, Tejun Heo Subject: [PATCH 2/6] block: Add part_stat_read_accum to read across field entries. Date: Tue, 5 Jun 2018 11:01:16 -0700 Message-Id: <20180605180120.2726113-3-tj@kernel.org> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20180605180120.2726113-1-tj@kernel.org> References: <20180605180120.2726113-1-tj@kernel.org> 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 From: Michael Callahan Add a part_stat_read_accum macro to genhd.h to read and sum across field entries. For example to sum up the number read and write sectors completed. In addition to being ar reasonable cleanup by itself this will make it easier to add new stat fields in the future. tj: Refreshed on top of v4.17. Signed-off-by: Michael Callahan Signed-off-by: Tejun Heo --- drivers/block/drbd/drbd_receiver.c | 3 +-- drivers/block/drbd/drbd_worker.c | 4 +--- drivers/md/md.c | 3 +-- include/linux/genhd.h | 4 ++++ 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index be9450f..d7e6973 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c @@ -2674,8 +2674,7 @@ bool drbd_rs_c_min_rate_throttle(struct drbd_device *device) if (c_min_rate == 0) return false; - curr_events = (int)part_stat_read(&disk->part0, sectors[0]) + - (int)part_stat_read(&disk->part0, sectors[1]) - + curr_events = (int)part_stat_read_accum(&disk->part0, sectors) - atomic_read(&device->rs_sect_ev); if (atomic_read(&device->ap_actlog_cnt) diff --git a/drivers/block/drbd/drbd_worker.c b/drivers/block/drbd/drbd_worker.c index 1476cb3..2063804 100644 --- a/drivers/block/drbd/drbd_worker.c +++ b/drivers/block/drbd/drbd_worker.c @@ -1690,9 +1690,7 @@ void drbd_rs_controller_reset(struct drbd_device *device) atomic_set(&device->rs_sect_in, 0); atomic_set(&device->rs_sect_ev, 0); device->rs_in_flight = 0; - device->rs_last_events = - (int)part_stat_read(&disk->part0, sectors[0]) + - (int)part_stat_read(&disk->part0, sectors[1]); + device->rs_last_events = (int)part_stat_read_accum(&disk->part0, sectors); /* Updating the RCU protected object in place is necessary since this function gets called from atomic context. diff --git a/drivers/md/md.c b/drivers/md/md.c index fc692b7..817dd97 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -8001,8 +8001,7 @@ static int is_mddev_idle(struct mddev *mddev, int init) rcu_read_lock(); rdev_for_each_rcu(rdev, mddev) { struct gendisk *disk = rdev->bdev->bd_contains->bd_disk; - curr_events = (int)part_stat_read(&disk->part0, sectors[0]) + - (int)part_stat_read(&disk->part0, sectors[1]) - + curr_events = (int)part_stat_read_accum(&disk->part0, sectors) - atomic_read(&disk->sync_io); /* sync IO will cause sync_io to increase before the disk_stats * as sync_io is counted when a request starts, and diff --git a/include/linux/genhd.h b/include/linux/genhd.h index 6cb8a57..19f36fa 100644 --- a/include/linux/genhd.h +++ b/include/linux/genhd.h @@ -353,6 +353,10 @@ static inline void free_part_stats(struct hd_struct *part) #endif /* CONFIG_SMP */ +#define part_stat_read_accum(part, field) \ + (part_stat_read(part, field[0]) + \ + part_stat_read(part, field[1])) + #define part_stat_add(cpu, part, field, addnd) do { \ __part_stat_add((cpu), (part), field, addnd); \ if ((part)->partno) \