[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20200529074108.16928-13-mcgrof@kernel.org>
Date: Fri, 29 May 2020 07:41:07 +0000
From: Luis Chamberlain <mcgrof@...nel.org>
To: keescook@...omium.org, yzaikin@...gle.com, nixiaoming@...wei.com,
ebiederm@...ssion.com, axboe@...nel.dk, clemens@...isch.de,
arnd@...db.de, gregkh@...uxfoundation.org,
jani.nikula@...ux.intel.com, joonas.lahtinen@...ux.intel.com,
rodrigo.vivi@...el.com, airlied@...ux.ie, daniel@...ll.ch,
benh@...nel.crashing.org, rdna@...com, viro@...iv.linux.org.uk,
mark@...heh.com, jlbec@...lplan.org, joseph.qi@...ux.alibaba.com,
vbabka@...e.cz, sfr@...b.auug.org.au, jack@...e.cz,
amir73il@...il.com, rafael@...nel.org, tytso@....edu
Cc: julia.lawall@...6.fr, akpm@...ux-foundation.org,
intel-gfx@...ts.freedesktop.org, dri-devel@...ts.freedesktop.org,
linuxppc-dev@...ts.ozlabs.org, ocfs2-devel@....oracle.com,
linux-kernel@...r.kernel.org, Luis Chamberlain <mcgrof@...nel.org>
Subject: [PATCH 12/13] sysctl: add helper to register empty subdir
The way to create a subdirectory from the base set of directories
is a bit obscure, so provide a helper which makes this clear, and
also helps remove boiler plate code required to do this work.
Signed-off-by: Luis Chamberlain <mcgrof@...nel.org>
---
include/linux/sysctl.h | 7 +++++++
kernel/sysctl.c | 16 +++++++++++++---
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 33a471b56345..89c92390e6de 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -208,6 +208,8 @@ extern void register_sysctl_init(const char *path, struct ctl_table *table,
extern struct ctl_table_header *register_sysctl_subdir(const char *base,
const char *subdir,
struct ctl_table *table);
+extern void register_sysctl_empty_subdir(const char *base, const char *subdir);
+
void do_sysctl_args(void);
extern int pwrsw_enabled;
@@ -231,6 +233,11 @@ inline struct ctl_table_header *register_sysctl_subdir(const char *base,
return NULL;
}
+static inline void register_sysctl_empty_subdir(const char *base,
+ const char *subdir)
+{
+}
+
static inline struct ctl_table_header *register_sysctl_paths(
const struct ctl_path *path, struct ctl_table *table)
{
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index f9a35325d5d5..460532cd5ac8 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -3188,13 +3188,17 @@ struct ctl_table_header *register_sysctl_subdir(const char *base,
{ }
};
- if (!table->procname)
+ if (table != sysctl_mount_point && !table->procname)
goto out;
hdr = register_sysctl_table(base_table);
if (unlikely(!hdr)) {
- pr_err("failed when creating subdirectory sysctl %s/%s/%s\n",
- base, subdir, table->procname);
+ if (table != sysctl_mount_point)
+ pr_err("failed when creating subdirectory sysctl %s/%s/%s\n",
+ base, subdir, table->procname);
+ else
+ pr_err("failed when creating empty subddirectory %s/%s\n",
+ base, subdir);
goto out;
}
kmemleak_not_leak(hdr);
@@ -3202,6 +3206,12 @@ struct ctl_table_header *register_sysctl_subdir(const char *base,
return hdr;
}
EXPORT_SYMBOL_GPL(register_sysctl_subdir);
+
+void register_sysctl_empty_subdir(const char *base,
+ const char *subdir)
+{
+ register_sysctl_subdir(base, subdir, sysctl_mount_point);
+}
#endif /* CONFIG_SYSCTL */
/*
* No sense putting this after each symbol definition, twice,
--
2.26.2
Powered by blists - more mailing lists