From patchwork Fri Apr 7 12:24:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephen Bates X-Patchwork-Id: 9669393 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 10818602A0 for ; Fri, 7 Apr 2017 12:24:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F0D9B2856A for ; Fri, 7 Apr 2017 12:24:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E4EE9285EE; Fri, 7 Apr 2017 12:24:11 +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=-6.4 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM 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 853A12856A for ; Fri, 7 Apr 2017 12:24:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933606AbdDGMYK (ORCPT ); Fri, 7 Apr 2017 08:24:10 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:35792 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932601AbdDGMYJ (ORCPT ); Fri, 7 Apr 2017 08:24:09 -0400 Received: by mail-wr0-f193.google.com with SMTP id t20so19625351wra.2 for ; Fri, 07 Apr 2017 05:24:09 -0700 (PDT) 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=duYqU2KVKJPgjrGfaNqDBsbjy+LVtRv+lsyMAuj91Hg=; b=uHbt1w2zxkHv/DrVjvxECzJ2EQChT8ekhk4me5vuPTu+IdwGGy3dAx1Zmcp9CV3c0b gebDNbvtHba8abNSOy78cciji2IKjYxus52k0kliJGA5SPmqxwUdQl1OLR5L9lKgUZIY 1+DgOMae4/D+2VTNjVMNyNJQG9J07QFNNXERKcy4mdhNVgenMSRuYLVRWWsnsk0FWhnW L0007OWbVFJ5hp2MhjCA1Aq8m8EYHVZsjtoDicwP4UNz2+S/idgcMjy4UOrn0ltOh15U ZaL7NpHJ0Ef+ZWoPRabatSs/BX6H6h1Gr3zY3y8cVNrSDkoorDqTd/D7kaXNdA4T1iOg RD9g== X-Gm-Message-State: AFeK/H2TsE22p9p+haxXhmVn8ikcvT/FumkXQgNan6k2B+WJ/0FARcc3pfAMl4bUJFTjWQ== X-Received: by 10.223.167.145 with SMTP id j17mr29501032wrc.178.1491567848220; Fri, 07 Apr 2017 05:24:08 -0700 (PDT) Received: from localhost.localdomain (51-171-151-230-dynamic.agg2.lky.bge-rtd.eircom.net. [51.171.151.230]) by smtp.gmail.com with ESMTPSA id v29sm5821502wrv.66.2017.04.07.05.24.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 07 Apr 2017 05:24:07 -0700 (PDT) From: sbates@raithlin.com To: axboe@kernel.dk Cc: linux-block@vger.kernel.org, linux-nvme@lists.infradead.org, Damien.LeMoal@wdc.com, osandov@osandov.com, sbates@raithlin.com, sagi@grimberg.me Subject: [PATCH v3 1/2] blk-stat: convert blk-stat bucket callback to signed Date: Fri, 7 Apr 2017 06:24:02 -0600 Message-Id: <1491567843-26190-2-git-send-email-sbates@raithlin.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1491567843-26190-1-git-send-email-sbates@raithlin.com> References: <1491567843-26190-1-git-send-email-sbates@raithlin.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 From: Stephen Bates In order to allow for filtering of IO based on some other properties of the request than direction we allow the bucket function to return an int. If the bucket callback returns a negative do no count it in the stats accumulation. Signed-off-by: Stephen Bates --- block/blk-stat.c | 6 ++++-- block/blk-stat.h | 9 +++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/block/blk-stat.c b/block/blk-stat.c index e77ec52..dde9d39 100644 --- a/block/blk-stat.c +++ b/block/blk-stat.c @@ -19,7 +19,7 @@ struct blk_queue_stats { bool enable_accounting; }; -unsigned int blk_stat_rq_ddir(const struct request *rq) +int blk_stat_rq_ddir(const struct request *rq) { return rq_data_dir(rq); } @@ -104,6 +104,8 @@ void blk_stat_add(struct request *rq) list_for_each_entry_rcu(cb, &q->stats->callbacks, list) { if (blk_stat_is_active(cb)) { bucket = cb->bucket_fn(rq); + if (bucket < 0) + continue; stat = &this_cpu_ptr(cb->cpu_stat)[bucket]; __blk_stat_add(stat, value); } @@ -135,7 +137,7 @@ static void blk_stat_timer_fn(unsigned long data) struct blk_stat_callback * blk_stat_alloc_callback(void (*timer_fn)(struct blk_stat_callback *), - unsigned int (*bucket_fn)(const struct request *), + int (*bucket_fn)(const struct request *), unsigned int buckets, void *data) { struct blk_stat_callback *cb; diff --git a/block/blk-stat.h b/block/blk-stat.h index 53f08a6..622a62c 100644 --- a/block/blk-stat.h +++ b/block/blk-stat.h @@ -48,9 +48,10 @@ struct blk_stat_callback { /** * @bucket_fn: Given a request, returns which statistics bucket it - * should be accounted under. + * should be accounted under. Return -1 for no bucket for this + * request. */ - unsigned int (*bucket_fn)(const struct request *); + int (*bucket_fn)(const struct request *); /** * @buckets: Number of statistics buckets. @@ -120,7 +121,7 @@ void blk_stat_enable_accounting(struct request_queue *q); * * Return: Data direction of the request, either READ or WRITE. */ -unsigned int blk_stat_rq_ddir(const struct request *rq); +int blk_stat_rq_ddir(const struct request *rq); /** * blk_stat_alloc_callback() - Allocate a block statistics callback. @@ -135,7 +136,7 @@ unsigned int blk_stat_rq_ddir(const struct request *rq); */ struct blk_stat_callback * blk_stat_alloc_callback(void (*timer_fn)(struct blk_stat_callback *), - unsigned int (*bucket_fn)(const struct request *), + int (*bucket_fn)(const struct request *), unsigned int buckets, void *data); /**