lkml.org 
[lkml]   [2020]   [May]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
From
Subject[PATCH 12/13] sysctl: add helper to register empty subdir
Date
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@kernel.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
\
 
 \ /
  Last update: 2020-05-29 09:44    [W:0.154 / U:0.124 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site