Commit 3bc269cf authored by Joel Granados's avatar Joel Granados Committed by Luis Chamberlain
Browse files

sysctl: Add size arg to __register_sysctl_init



This commit adds table_size to __register_sysctl_init in preparation for
the removal of the sentinel elements in the ctl_table arrays (last empty
markers). And though we do *not* remove any sentinels in this commit, we
set things up by calculating the ctl_table array size with ARRAY_SIZE.

We add a table_size argument to __register_sysctl_init and modify the
register_sysctl_init macro to calculate the array size with ARRAY_SIZE.
The original callers do not need to be updated as they will go through
the new macro.

Signed-off-by: default avatarJoel Granados <j.granados@samsung.com>
Suggested-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarLuis Chamberlain <mcgrof@kernel.org>
parent 9edbfe92
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -1433,6 +1433,7 @@ EXPORT_SYMBOL(register_sysctl_sz);
 * 	lifetime use of the sysctl.
 * @table_name: The name of sysctl table, only used for log printing when
 *              registration fails
 * @table_size: The number of elements in table
 *
 * The sysctl interface is used by userspace to query or modify at runtime
 * a predefined value set on a variable. These variables however have default
@@ -1445,16 +1446,9 @@ EXPORT_SYMBOL(register_sysctl_sz);
 * Context: if your base directory does not exist it will be created for you.
 */
void __init __register_sysctl_init(const char *path, struct ctl_table *table,
				 const char *table_name)
				 const char *table_name, size_t table_size)
{
	int count = 0;
	struct ctl_table *entry;
	struct ctl_table_header t_hdr, *hdr;

	t_hdr.ctl_table = table;
	list_for_each_table_entry(entry, (&t_hdr))
		count++;
	hdr = register_sysctl_sz(path, table, count);
	struct ctl_table_header *hdr = register_sysctl_sz(path, table, table_size);

	if (unlikely(!hdr)) {
		pr_err("failed when register_sysctl_sz %s to %s\n", table_name, path);
+3 −2
Original line number Diff line number Diff line
@@ -236,8 +236,9 @@ void unregister_sysctl_table(struct ctl_table_header * table);

extern int sysctl_init_bases(void);
extern void __register_sysctl_init(const char *path, struct ctl_table *table,
				 const char *table_name);
#define register_sysctl_init(path, table) __register_sysctl_init(path, table, #table)
				 const char *table_name, size_t table_size);
#define register_sysctl_init(path, table)	\
	__register_sysctl_init(path, table, #table, ARRAY_SIZE(table))
extern struct ctl_table_header *register_sysctl_mount_point(const char *path);

void do_sysctl_args(void);