| From 1dc8689e4cc651e21566e10206a84c4006e81fb1 Mon Sep 17 00:00:00 2001 |
| From: Luis Chamberlain <mcgrof@kernel.org> |
| Date: Fri, 10 Mar 2023 13:00:16 -0800 |
| Subject: proc_sysctl: enhance documentation |
| |
| From: Luis Chamberlain <mcgrof@kernel.org> |
| |
| commit 1dc8689e4cc651e21566e10206a84c4006e81fb1 upstream. |
| |
| Expand documentation to clarify: |
| |
| o that paths don't need to exist for the new API callers |
| o clarify that we *require* callers to keep the memory of |
| the table around during the lifetime of the sysctls |
| o annotate routines we are trying to deprecate and later remove |
| |
| Cc: stable@vger.kernel.org # v5.17 |
| Cc: Christian Brauner <brauner@kernel.org> |
| Cc: Kefeng Wang <wangkefeng.wang@huawei.com> |
| Signed-off-by: Luis Chamberlain <mcgrof@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| fs/proc/proc_sysctl.c | 25 ++++++++++++++++++++----- |
| 1 file changed, 20 insertions(+), 5 deletions(-) |
| |
| --- a/fs/proc/proc_sysctl.c |
| +++ b/fs/proc/proc_sysctl.c |
| @@ -1287,7 +1287,10 @@ out: |
| * __register_sysctl_table - register a leaf sysctl table |
| * @set: Sysctl tree to register on |
| * @path: The path to the directory the sysctl table is in. |
| - * @table: the top-level table structure without any child |
| + * @table: the top-level table structure without any child. This table |
| + * should not be free'd after registration. So it should not be |
| + * used on stack. It can either be a global or dynamically allocated |
| + * by the caller and free'd later after sysctl unregistration. |
| * |
| * Register a sysctl table hierarchy. @table should be a filled in ctl_table |
| * array. A completely 0 filled entry terminates the table. |
| @@ -1402,8 +1405,15 @@ fail: |
| |
| /** |
| * register_sysctl - register a sysctl table |
| - * @path: The path to the directory the sysctl table is in. |
| - * @table: the table structure |
| + * @path: The path to the directory the sysctl table is in. If the path |
| + * doesn't exist we will create it for you. |
| + * @table: the table structure. The calller must ensure the life of the @table |
| + * will be kept during the lifetime use of the syctl. It must not be freed |
| + * until unregister_sysctl_table() is called with the given returned table |
| + * with this registration. If your code is non modular then you don't need |
| + * to call unregister_sysctl_table() and can instead use something like |
| + * register_sysctl_init() which does not care for the result of the syctl |
| + * registration. |
| * |
| * Register a sysctl table. @table should be a filled in ctl_table |
| * array. A completely 0 filled entry terminates the table. |
| @@ -1419,8 +1429,11 @@ EXPORT_SYMBOL(register_sysctl); |
| |
| /** |
| * __register_sysctl_init() - register sysctl table to path |
| - * @path: path name for sysctl base |
| - * @table: This is the sysctl table that needs to be registered to the path |
| + * @path: path name for sysctl base. If that path doesn't exist we will create |
| + * it for you. |
| + * @table: This is the sysctl table that needs to be registered to the path. |
| + * The caller must ensure the life of the @table will be kept during the |
| + * lifetime use of the sysctl. |
| * @table_name: The name of sysctl table, only used for log printing when |
| * registration fails |
| * |
| @@ -1565,6 +1578,7 @@ out: |
| * |
| * Register a sysctl table hierarchy. @table should be a filled in ctl_table |
| * array. A completely 0 filled entry terminates the table. |
| + * We are slowly deprecating this call so avoid its use. |
| * |
| * See __register_sysctl_table for more details. |
| */ |
| @@ -1636,6 +1650,7 @@ err_register_leaves: |
| * |
| * Register a sysctl table hierarchy. @table should be a filled in ctl_table |
| * array. A completely 0 filled entry terminates the table. |
| + * We are slowly deprecating this caller so avoid future uses of it. |
| * |
| * See __register_sysctl_paths for more details. |
| */ |