From: Tycho Andersen <tycho@tycho.pizza>
To: cgroups@vger.kernel.org, linux-fsdevel@vger.kernel.org
Cc: Christian Brauner <brauner@kernel.org>, Tejun Heo <tj@kernel.org>,
Zefan Li <lizefan.x@bytedance.com>,
Johannes Weiner <hannes@cmpxchg.org>,
Haitao Huang <haitao.huang@linux.intel.com>,
Kamalesh Babulal <kamalesh.babulal@oracle.com>,
Tycho Andersen <tycho@tycho.pizza>,
Tycho Andersen <tandersen@netflix.com>
Subject: [RFC 3/6] misc: introduce misc_cg_charge()
Date: Tue, 7 Nov 2023 17:26:44 -0700 [thread overview]
Message-ID: <20231108002647.73784-4-tycho@tycho.pizza> (raw)
In-Reply-To: <20231108002647.73784-1-tycho@tycho.pizza>
From: Tycho Andersen <tandersen@netflix.com>
Similar to cases in e.g. the pids cgroup with pids_charge(), if a migration
fails we will need to force-unwind it, which may put misc cgroups over
their limits. We need to charge them anyway, which is what this helper is
for.
Signed-off-by: Tycho Andersen <tandersen@netflix.com>
---
include/linux/misc_cgroup.h | 1 +
kernel/cgroup/misc.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/include/linux/misc_cgroup.h b/include/linux/misc_cgroup.h
index e799b1f8d05b..6ddffeeb6f97 100644
--- a/include/linux/misc_cgroup.h
+++ b/include/linux/misc_cgroup.h
@@ -57,6 +57,7 @@ struct misc_cg {
u64 misc_cg_res_total_usage(enum misc_res_type type);
int misc_cg_set_capacity(enum misc_res_type type, u64 capacity);
int misc_cg_try_charge(enum misc_res_type type, struct misc_cg *cg, u64 amount);
+void misc_cg_charge(enum misc_res_type type, struct misc_cg *cg, u64 amount);
void misc_cg_uncharge(enum misc_res_type type, struct misc_cg *cg, u64 amount);
/**
diff --git a/kernel/cgroup/misc.c b/kernel/cgroup/misc.c
index 79a3717a5803..bbce097270cf 100644
--- a/kernel/cgroup/misc.c
+++ b/kernel/cgroup/misc.c
@@ -121,6 +121,38 @@ static void misc_cg_cancel_charge(enum misc_res_type type, struct misc_cg *cg,
misc_res_name[type]);
}
+/**
+ * misc_cg_charge() - Charge the cgroup, ignoring limits/capacity.
+ * @type: Misc res type to charge.
+ * @cg: Misc cgroup which will be charged.
+ * @amount: Amount to charge.
+ *
+ * Charge @amount to the misc cgroup. Caller must use the same cgroup during
+ * the uncharge call.
+ *
+ * Context: Any context.
+ */
+void misc_cg_charge(enum misc_res_type type, struct misc_cg *cg, u64 amount)
+{
+ struct misc_res *res;
+ struct misc_cg *i;
+
+ if (!(valid_type(type) && cg && READ_ONCE(misc_res_capacity[type]))) {
+ WARN_ON_ONCE(!valid_type(type));
+ return;
+ }
+
+ if (!amount)
+ return;
+
+ for (i = cg; i; i = parent_misc(i)) {
+ res = &i->res[type];
+
+ atomic_long_add(amount, &res->usage);
+ }
+}
+EXPORT_SYMBOL_GPL(misc_cg_charge);
+
/**
* misc_cg_try_charge() - Try charging the misc cgroup.
* @type: Misc res type to charge.
--
2.34.1
next prev parent reply other threads:[~2023-11-08 0:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-08 0:26 [RFC 0/6] tracking fd counts per cgroup Tycho Andersen
2023-11-08 0:26 ` [RFC 1/6] fs: count_open_files() -> count_possible_open_files() Tycho Andersen
2023-11-08 0:26 ` [RFC 2/6] fs: introduce count_open_files() Tycho Andersen
2023-11-08 0:26 ` Tycho Andersen [this message]
2023-11-08 0:26 ` [RFC 4/6] misc cgroup: introduce an fd counter Tycho Andersen
2023-11-08 16:57 ` Al Viro
2023-11-08 21:01 ` Tycho Andersen
2023-11-09 9:53 ` Christian Brauner
2023-11-09 14:58 ` Tycho Andersen
2023-11-08 0:26 ` [RFC 5/6] selftests/cgroup: add a flags arg to clone_into_cgroup() Tycho Andersen
2023-11-08 0:26 ` [RFC 6/6] selftests/cgroup: add a test for misc cgroup Tycho Andersen
2023-11-09 18:44 ` [RFC 0/6] tracking fd counts per cgroup Tejun Heo
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=20231108002647.73784-4-tycho@tycho.pizza \
--to=tycho@tycho.pizza \
--cc=brauner@kernel.org \
--cc=cgroups@vger.kernel.org \
--cc=haitao.huang@linux.intel.com \
--cc=hannes@cmpxchg.org \
--cc=kamalesh.babulal@oracle.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=lizefan.x@bytedance.com \
--cc=tandersen@netflix.com \
--cc=tj@kernel.org \
/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).