From patchwork Mon Nov 19 10:34:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paolo Valente X-Patchwork-Id: 151469 Delivered-To: patch@linaro.org Received: by 2002:a2e:299d:0:0:0:0:0 with SMTP id p29-v6csp2489842ljp; Mon, 19 Nov 2018 02:34:46 -0800 (PST) X-Google-Smtp-Source: AJdET5egOaPUSdNPTZ7eaC8CQL12zcBTVHlGR4FXAegnWb26a12fmyh4HhEjRUbc0L1zswlnoZh4 X-Received: by 2002:a17:902:108a:: with SMTP id c10-v6mr21330028pla.171.1542623686617; Mon, 19 Nov 2018 02:34:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542623686; cv=none; d=google.com; s=arc-20160816; b=y4kNr/9nlpJVsDUPDuQRNHeRowmz+y1PTPii83lbgZzuABaqcCCj147tDcKdqsT4Ur 6m6qBsw7YSSfCi8FJwSlTS+JfHfT0YUEarutKLAhNt7VwG7Ed82h3jlGPkRWOaRIBnd5 SmqEy7xoVUPlCRxV+9DzPfwJTy6uGmkT2ffIfWWCsXS7KHmcKHx/3J514Pp9lPyOGtso 7FVOCjFXx2kdslOtXmLgB8RnvlaN8l1WY7RC694toz0BfgXr5KU7NuGi73SX0P7gYkih f1W73l2IsaK0HYHFlf4H0omAiplGf9WvBUZarb2KMhILAJ0erIau6soyIgjNStJW9zj9 cKGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=xE31UGISHMijh6BWsEpclRZoNNImo7FAKtEIn5NIV0A=; b=fa1yLsSijRsNjtl2jik51SRtc4VZg+kdwYr3U4/jeXM9iogziuwnVo9IaVkIa4P+f/ mLlY7ZARXmgUhh+B0W530mmHlCpeFwUWELnrhe04i2B7+mYy7wopL+p9Fb0R6EStbGba MobAg6DN8/4y9GrYtD24hm1NpfJqtJqx5m5aVhCQ8JtrmJoGOJ+VV37OkzFAp4+zETG1 jDud3oobZucKJyZyKr2U3Vsd2v20CTxWNDpnPleWX5vPteXuk51BdX06mM0fHcz9x4ls iydbLYhPPxlvC6POCl8WypSuW5h1vYQnOsmzSON2lhfVT16dLPU0tmdEh1NKfWrFvdsN NdrQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SU4gX9Ur; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1-v6si42270968plj.53.2018.11.19.02.34.46; Mon, 19 Nov 2018 02:34:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=SU4gX9Ur; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728152AbeKSU54 (ORCPT + 32 others); Mon, 19 Nov 2018 15:57:56 -0500 Received: from mail-wm1-f65.google.com ([209.85.128.65]:55650 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728117AbeKSU5z (ORCPT ); Mon, 19 Nov 2018 15:57:55 -0500 Received: by mail-wm1-f65.google.com with SMTP id y139so4734858wmc.5 for ; Mon, 19 Nov 2018 02:34:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=xE31UGISHMijh6BWsEpclRZoNNImo7FAKtEIn5NIV0A=; b=SU4gX9UrHxz7m4v1tXtIXnFVKBC85SmHhU3WWiQYYH5YJWdQrx77/09MmnpPILr2Gv PCbKmtQgB2koGowWyZFjNRJlKJFv9udeNRVF/Tx2HHxFCDZQhXGe45I/uov9rCuAnB50 t7iYiiNqnQaObo/r0EtTj0WBdzrK0QxzCGtFc= 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=xE31UGISHMijh6BWsEpclRZoNNImo7FAKtEIn5NIV0A=; b=tsqfY9/xzb0lO/tGjl3PpcYNAzFL25nCPeaPhKJoTIgmABYsv1rinp7VfW+iE9cfR0 L6Nlo9l7VnEhPCz0N3Xhasx4Lq8lTitgrSfp4abcDLyJ6xTvR9zok2MMYPYTbrBjK27D /+rjr4YWocxu/uk8HVEcCaB78mCjAFWftraJMAgYcz37hTMuQVEjmTRtjZT4JzoaL4Oj 8/YfbI2qfXyjO/bQiWnag1c2uzRTJqEohSk1m6/bwNLbZwFueGi+slXzmyijjDAai8OS 2AoxknMzfWY4xY+RgRogjPBnM/VSI/o0echi9IE3zyQnlDXqRODIyTjG2k7l6VfbUPJy kPcg== X-Gm-Message-State: AA+aEWZhed7/StgoSJmG7O+2fqJVZXqm7Isca/dheISZmmxtr1z0HwWz yTPkJdO31hy34MSIOoBkWJeYgg== X-Received: by 2002:a1c:ce0e:: with SMTP id e14mr4785626wmg.53.1542623680540; Mon, 19 Nov 2018 02:34:40 -0800 (PST) Received: from localhost.localdomain ([37.162.18.180]) by smtp.gmail.com with ESMTPSA id e9sm14973298wro.16.2018.11.19.02.34.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 19 Nov 2018 02:34:40 -0800 (PST) From: Paolo Valente To: Jens Axboe , Greg Kroah-Hartman , Tejun Heo , Li Zefan , Angelo Ruocco , Dennis Zhou , Josef Bacik , Liu Bo , Bart Van Assche , Johannes Weiner Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, ulf.hansson@linaro.org, linus.walleij@linaro.org, broonie@kernel.org, bfq-iosched@googlegroups.com, oleksandr@natalenko.name, cgroups@vger.kernel.org, linux-doc@vger.kernel.org, Jonathan Corbet , Paolo Valente Subject: [PATCH V2 02/10] block, cgroup: pass cftype to functions that need to use it Date: Mon, 19 Nov 2018 11:34:16 +0100 Message-Id: <20181119103424.3853-3-paolo.valente@linaro.org> X-Mailer: git-send-email 2.16.1 In-Reply-To: <20181119103424.3853-1-paolo.valente@linaro.org> References: <20181119103424.3853-1-paolo.valente@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Some seq_show functions need to access the cftype they belong to, for retrieving the data to show. These functions get their cftype by using the seq_cft accessor for the seq_file. This solution is no longer viable in case a seq_file is shared among more than one cftype, because the accessor always returns (only) the first of the cftypes sharing the seq_file. This commit enables these seq_show functions to be passed their cftype, by replacing their prototype with that of the newly defined seq_show_cft hook, and by invoking these functions through this new hook. Signed-off-by: Angelo Ruocco Signed-off-by: Paolo Valente --- block/bfq-cgroup.c | 54 ++++++++++++++++++++++++---------------------- block/blk-cgroup.c | 22 ++++++++++++------- block/blk-throttle.c | 8 +++---- include/linux/blk-cgroup.h | 10 +++++---- 4 files changed, 52 insertions(+), 42 deletions(-) -- 2.16.1 diff --git a/block/bfq-cgroup.c b/block/bfq-cgroup.c index a7a1712632b0..038e418fa64f 100644 --- a/block/bfq-cgroup.c +++ b/block/bfq-cgroup.c @@ -918,17 +918,17 @@ static ssize_t bfq_io_set_weight(struct kernfs_open_file *of, } #ifdef CONFIG_DEBUG_BLK_CGROUP -static int bfqg_print_stat(struct seq_file *sf, void *v) +static int bfqg_print_stat(struct seq_file *sf, struct cftype *cft, void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_stat, - &blkcg_policy_bfq, seq_cft(sf)->private, false); + &blkcg_policy_bfq, cft->private, false); return 0; } -static int bfqg_print_rwstat(struct seq_file *sf, void *v) +static int bfqg_print_rwstat(struct seq_file *sf, struct cftype *cft, void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_rwstat, - &blkcg_policy_bfq, seq_cft(sf)->private, true); + &blkcg_policy_bfq, cft->private, true); return 0; } @@ -949,19 +949,21 @@ static u64 bfqg_prfill_rwstat_recursive(struct seq_file *sf, return __blkg_prfill_rwstat(sf, pd, &sum); } -static int bfqg_print_stat_recursive(struct seq_file *sf, void *v) +static int bfqg_print_stat_recursive(struct seq_file *sf, struct cftype *cft, + void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), bfqg_prfill_stat_recursive, &blkcg_policy_bfq, - seq_cft(sf)->private, false); + cft->private, false); return 0; } -static int bfqg_print_rwstat_recursive(struct seq_file *sf, void *v) +static int bfqg_print_rwstat_recursive(struct seq_file *sf, struct cftype *cft, + void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), bfqg_prfill_rwstat_recursive, &blkcg_policy_bfq, - seq_cft(sf)->private, true); + cft->private, true); return 0; } @@ -1063,18 +1065,18 @@ struct cftype bfq_blkcg_legacy_files[] = { { .name = "bfq.io_service_bytes", .private = (unsigned long)&blkcg_policy_bfq, - .seq_show = blkg_print_stat_bytes, + .seq_show_cft = blkg_print_stat_bytes, }, { .name = "bfq.io_serviced", .private = (unsigned long)&blkcg_policy_bfq, - .seq_show = blkg_print_stat_ios, + .seq_show_cft = blkg_print_stat_ios, }, #ifdef CONFIG_DEBUG_BLK_CGROUP { .name = "bfq.time", .private = offsetof(struct bfq_group, stats.time), - .seq_show = bfqg_print_stat, + .seq_show_cft = bfqg_print_stat, }, { .name = "bfq.sectors", @@ -1083,22 +1085,22 @@ struct cftype bfq_blkcg_legacy_files[] = { { .name = "bfq.io_service_time", .private = offsetof(struct bfq_group, stats.service_time), - .seq_show = bfqg_print_rwstat, + .seq_show_cft = bfqg_print_rwstat, }, { .name = "bfq.io_wait_time", .private = offsetof(struct bfq_group, stats.wait_time), - .seq_show = bfqg_print_rwstat, + .seq_show_cft = bfqg_print_rwstat, }, { .name = "bfq.io_merged", .private = offsetof(struct bfq_group, stats.merged), - .seq_show = bfqg_print_rwstat, + .seq_show_cft = bfqg_print_rwstat, }, { .name = "bfq.io_queued", .private = offsetof(struct bfq_group, stats.queued), - .seq_show = bfqg_print_rwstat, + .seq_show_cft = bfqg_print_rwstat, }, #endif /* CONFIG_DEBUG_BLK_CGROUP */ @@ -1106,18 +1108,18 @@ struct cftype bfq_blkcg_legacy_files[] = { { .name = "bfq.io_service_bytes_recursive", .private = (unsigned long)&blkcg_policy_bfq, - .seq_show = blkg_print_stat_bytes_recursive, + .seq_show_cft = blkg_print_stat_bytes_recursive, }, { .name = "bfq.io_serviced_recursive", .private = (unsigned long)&blkcg_policy_bfq, - .seq_show = blkg_print_stat_ios_recursive, + .seq_show_cft = blkg_print_stat_ios_recursive, }, #ifdef CONFIG_DEBUG_BLK_CGROUP { .name = "bfq.time_recursive", .private = offsetof(struct bfq_group, stats.time), - .seq_show = bfqg_print_stat_recursive, + .seq_show_cft = bfqg_print_stat_recursive, }, { .name = "bfq.sectors_recursive", @@ -1126,22 +1128,22 @@ struct cftype bfq_blkcg_legacy_files[] = { { .name = "bfq.io_service_time_recursive", .private = offsetof(struct bfq_group, stats.service_time), - .seq_show = bfqg_print_rwstat_recursive, + .seq_show_cft = bfqg_print_rwstat_recursive, }, { .name = "bfq.io_wait_time_recursive", .private = offsetof(struct bfq_group, stats.wait_time), - .seq_show = bfqg_print_rwstat_recursive, + .seq_show_cft = bfqg_print_rwstat_recursive, }, { .name = "bfq.io_merged_recursive", .private = offsetof(struct bfq_group, stats.merged), - .seq_show = bfqg_print_rwstat_recursive, + .seq_show_cft = bfqg_print_rwstat_recursive, }, { .name = "bfq.io_queued_recursive", .private = offsetof(struct bfq_group, stats.queued), - .seq_show = bfqg_print_rwstat_recursive, + .seq_show_cft = bfqg_print_rwstat_recursive, }, { .name = "bfq.avg_queue_size", @@ -1150,22 +1152,22 @@ struct cftype bfq_blkcg_legacy_files[] = { { .name = "bfq.group_wait_time", .private = offsetof(struct bfq_group, stats.group_wait_time), - .seq_show = bfqg_print_stat, + .seq_show_cft = bfqg_print_stat, }, { .name = "bfq.idle_time", .private = offsetof(struct bfq_group, stats.idle_time), - .seq_show = bfqg_print_stat, + .seq_show_cft = bfqg_print_stat, }, { .name = "bfq.empty_time", .private = offsetof(struct bfq_group, stats.empty_time), - .seq_show = bfqg_print_stat, + .seq_show_cft = bfqg_print_stat, }, { .name = "bfq.dequeue", .private = offsetof(struct bfq_group, stats.dequeue), - .seq_show = bfqg_print_stat, + .seq_show_cft = bfqg_print_stat, }, #endif /* CONFIG_DEBUG_BLK_CGROUP */ { } /* terminate */ diff --git a/block/blk-cgroup.c b/block/blk-cgroup.c index 63d226a084cd..772d32bbecae 100644 --- a/block/blk-cgroup.c +++ b/block/blk-cgroup.c @@ -565,15 +565,16 @@ static u64 blkg_prfill_rwstat_field(struct seq_file *sf, /** * blkg_print_stat_bytes - seq_show callback for blkg->stat_bytes * @sf: seq_file to print to + * @cft: cftype holding the data * @v: unused * * To be used as cftype->seq_show to print blkg->stat_bytes. * cftype->private must be set to the blkcg_policy. */ -int blkg_print_stat_bytes(struct seq_file *sf, void *v) +int blkg_print_stat_bytes(struct seq_file *sf, struct cftype *cft, void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), - blkg_prfill_rwstat_field, (void *)seq_cft(sf)->private, + blkg_prfill_rwstat_field, (void *)cft->private, offsetof(struct blkcg_gq, stat_bytes), true); return 0; } @@ -582,15 +583,16 @@ EXPORT_SYMBOL_GPL(blkg_print_stat_bytes); /** * blkg_print_stat_bytes - seq_show callback for blkg->stat_ios * @sf: seq_file to print to + * @cft: cftype holding the data * @v: unused * * To be used as cftype->seq_show to print blkg->stat_ios. cftype->private * must be set to the blkcg_policy. */ -int blkg_print_stat_ios(struct seq_file *sf, void *v) +int blkg_print_stat_ios(struct seq_file *sf, struct cftype *cft, void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), - blkg_prfill_rwstat_field, (void *)seq_cft(sf)->private, + blkg_prfill_rwstat_field, (void *)cft->private, offsetof(struct blkcg_gq, stat_ios), true); return 0; } @@ -608,13 +610,15 @@ static u64 blkg_prfill_rwstat_field_recursive(struct seq_file *sf, /** * blkg_print_stat_bytes_recursive - recursive version of blkg_print_stat_bytes * @sf: seq_file to print to + * @cft: cftype holding the data * @v: unused */ -int blkg_print_stat_bytes_recursive(struct seq_file *sf, void *v) +int blkg_print_stat_bytes_recursive(struct seq_file *sf, struct cftype *cft, + void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_rwstat_field_recursive, - (void *)seq_cft(sf)->private, + (void *)cft->private, offsetof(struct blkcg_gq, stat_bytes), true); return 0; } @@ -623,13 +627,15 @@ EXPORT_SYMBOL_GPL(blkg_print_stat_bytes_recursive); /** * blkg_print_stat_ios_recursive - recursive version of blkg_print_stat_ios * @sf: seq_file to print to + * @cft: cftype holding the data * @v: unused */ -int blkg_print_stat_ios_recursive(struct seq_file *sf, void *v) +int blkg_print_stat_ios_recursive(struct seq_file *sf, struct cftype *cft, + void *v) { blkcg_print_blkgs(sf, css_to_blkcg(seq_css(sf)), blkg_prfill_rwstat_field_recursive, - (void *)seq_cft(sf)->private, + (void *)cft->private, offsetof(struct blkcg_gq, stat_ios), true); return 0; } diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 8f0a104770ee..6bfdaac53b6f 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c @@ -1493,22 +1493,22 @@ static struct cftype throtl_legacy_files[] = { { .name = "throttle.io_service_bytes", .private = (unsigned long)&blkcg_policy_throtl, - .seq_show = blkg_print_stat_bytes, + .seq_show_cft = blkg_print_stat_bytes, }, { .name = "throttle.io_service_bytes_recursive", .private = (unsigned long)&blkcg_policy_throtl, - .seq_show = blkg_print_stat_bytes_recursive, + .seq_show_cft = blkg_print_stat_bytes_recursive, }, { .name = "throttle.io_serviced", .private = (unsigned long)&blkcg_policy_throtl, - .seq_show = blkg_print_stat_ios, + .seq_show_cft = blkg_print_stat_ios, }, { .name = "throttle.io_serviced_recursive", .private = (unsigned long)&blkcg_policy_throtl, - .seq_show = blkg_print_stat_ios_recursive, + .seq_show_cft = blkg_print_stat_ios_recursive, }, { } /* terminate */ }; diff --git a/include/linux/blk-cgroup.h b/include/linux/blk-cgroup.h index a9e2e2037129..770b59e0d35f 100644 --- a/include/linux/blk-cgroup.h +++ b/include/linux/blk-cgroup.h @@ -207,10 +207,12 @@ u64 __blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd, u64 blkg_prfill_stat(struct seq_file *sf, struct blkg_policy_data *pd, int off); u64 blkg_prfill_rwstat(struct seq_file *sf, struct blkg_policy_data *pd, int off); -int blkg_print_stat_bytes(struct seq_file *sf, void *v); -int blkg_print_stat_ios(struct seq_file *sf, void *v); -int blkg_print_stat_bytes_recursive(struct seq_file *sf, void *v); -int blkg_print_stat_ios_recursive(struct seq_file *sf, void *v); +int blkg_print_stat_bytes(struct seq_file *sf, struct cftype *cft, void *v); +int blkg_print_stat_ios(struct seq_file *sf, struct cftype *cft, void *v); +int blkg_print_stat_bytes_recursive(struct seq_file *sf, struct cftype *cft, + void *v); +int blkg_print_stat_ios_recursive(struct seq_file *sf, struct cftype *cft, + void *v); u64 blkg_stat_recursive_sum(struct blkcg_gq *blkg, struct blkcg_policy *pol, int off);