All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Joel Granados <j.granados@samsung.com>
Cc: mcgrof@kernel.org, bpf@vger.kernel.org
Subject: Re: [PATCH 00/11] Remove the end element in sysctl table arrays.
Date: Wed, 21 Jun 2023 15:10:57 +0200	[thread overview]
Message-ID: <2023062102-letdown-roving-921d@gregkh> (raw)
In-Reply-To: <20230621123816.ufqbob6qthz4hujx@localhost>

On Wed, Jun 21, 2023 at 02:38:16PM +0200, Joel Granados wrote:
> On Wed, Jun 21, 2023 at 12:46:47PM +0200, Greg KH wrote:
> > On Wed, Jun 21, 2023 at 11:09:49AM +0200, Joel Granados wrote:
> > > This is part of the effort to remove the empty element from the ctl_table
> > > structures (used to calculate size) and replace it with the ARRAY_SIZE macro.
> > > The "sysctl: Remove the end element in sysctl table arrays" commit is the one that
> > > actually removes the empty element. With a "yesall" configuration the bloat-o-meter
> > > says that 9158 bytes where saved (report at the end of the cover letter).
> > 
> > 9k in ram or read-only memory?
> AFAIK its ro as I'm removing all the "empty" end elements from ctl_table
> array that are hardcoded all over the place.
> > 
> > > Main changes:
> > > 1. Add the ctl_table size into the ctl_table_header
> > > 2. Remove the empty element at the end of all ctl_table arrays
> > > 
> > > Commit Overview:
> > > 1. There are preparation commits that make sure that we have the
> > >    ctl_table_header in all the places that we need to have the array size.
> > >       sysctl: Prefer ctl_table_header in proc_sysct
> > >       sysctl: Use the ctl header in list ctl_table macro
> > >       sysctl: Add ctl_table_size to ctl_table_header
> > > 
> > > 2. Add size to relevant register calls. Calculate the ctl_table array size
> > >    where register_sysctl is called. Add a table_size argument to the relevant
> > >    sysctl register functions (init_header, __register_sysctl_table,
> > >    register_net_sysctl, register_sysctl and register_sysctl_init). Important to
> > >    note that these commits do NOT change the way we calculate size; they plumb
> > >    things in preparation for the empty element removal commit. Care is taken to
> > >    leave the tree in a state where it can be compiled which is the reason to
> > >    not separate the "big" commits (like "sysctl: Add size to the
> > >    register_net_sysctl function"). If you have an alternative way of dealing
> > >    with such a big commit while leaving it in a compilable state, please let me
> > >    know.
> > >       sysctl: Add size argument to init_header
> > >       sysctl: Add a size arg to __register_sysctl_table
> > >       sysctl: Add size to the register_net_sysctl function
> > >       sysctl: Add size to register_sysctl
> > >       sysctl: Add size to register_sysctl_init
> > 
> > Why not make these calls automatically calculate the size based on the
> > structure passed into them by using a #define instead of having to touch
> > the code everywhere?  That would make this much simpler AND make it
> > impossible for future people to get this wrong.
> I considered this at the outset, but it will not work with callers that
> use a pointer instead of the actual array.

Then make 2 functions, one a "normal" one where you can't get it wrong
as you pass in the structure that you can compute ARRAY_SIZE() and one
that you have to do it manually.

Don't force developers to think about stuff like this as now you are
going to have to constantly audit the code to verify that the array size
is correct.  Right now it always "just works" due to the null
termination, and now you are going to add complexity to the author in
order to save a trivial amount of memory that no one is asking for :)

> Additionally, we would not avoid big commits as we would have to go
> looking in all the files where register is called directly or indirectly
> and make sure the logic is sound.

Then you need to think about how this could be done better, having "flag
days" like this just doesn't work, sorry.  There are ways to evolve
common apis, and it's not like this patch set :)

I'm all for saving space, but do NOT do it at the expense of making apis
harder to use and easier to get incorrect.  That will just cause more
long-term problems and bugs, which is NOT a good trade off you ever want
to make.

thanks,

greg k-h

  reply	other threads:[~2023-06-21 13:11 UTC|newest]

Thread overview: 113+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20230621091002eucas1p28cbe3260b7d4c2a086f0b5ac79a7f038@eucas1p2.samsung.com>
2023-06-21  9:09 ` [PATCH 00/11] Remove the end element in sysctl table arrays Joel Granados
     [not found]   ` <CGME20230621091004eucas1p2e53ad3001cdaef7b3c44555653bbec37@eucas1p2.samsung.com>
2023-06-21  9:09     ` [PATCH 01/11] sysctl: Prefer ctl_table_header in proc_sysctl Joel Granados
     [not found]   ` <CGME20230621091007eucas1p2271595a5889075994e8dceb0c06ae7cc@eucas1p2.samsung.com>
2023-06-21  9:09     ` [PATCH 02/11] sysctl: Use the ctl header in list ctl_table macro Joel Granados
     [not found]   ` <CGME20230621091009eucas1p1e4fa56beb44e49e4d1160bfac6eb59ec@eucas1p1.samsung.com>
2023-06-21  9:09     ` [PATCH 03/11] sysctl: Add ctl_table_size to ctl_table_header Joel Granados
     [not found]   ` <CGME20230621091011eucas1p2116c1fb8f406bec7ca9a831f66955724@eucas1p2.samsung.com>
2023-06-21  9:09     ` [PATCH 04/11] sysctl: Add size argument to init_header Joel Granados
     [not found]   ` <CGME20230621091014eucas1p1a30430568d0f7fec5ccbed31cab73aa0@eucas1p1.samsung.com>
2023-06-21  9:09     ` [PATCH 05/11] sysctl: Add a size arg to __register_sysctl_table Joel Granados
2023-06-21 20:53       ` Jakub Kicinski
2023-06-22 14:09         ` Joel Granados
     [not found]   ` <CGME20230621091022eucas1p1c097da50842b23e902e1a674e117e1aa@eucas1p1.samsung.com>
2023-06-21  9:09     ` [PATCH 06/11] sysctl: Add size to register_net_sysctl function Joel Granados
2023-06-21  9:09       ` [Bridge] " Joel Granados
2023-06-21  9:09       ` Joel Granados
2023-06-21  9:09       ` Joel Granados
2023-06-21  9:47       ` Dan Carpenter
2023-06-21  9:47         ` [Bridge] " Dan Carpenter
2023-06-21  9:47         ` Dan Carpenter
2023-06-21  9:47         ` Dan Carpenter
2023-06-21 10:23         ` Dan Carpenter
2023-06-21 10:23           ` [Bridge] " Dan Carpenter
2023-06-21 10:23           ` Dan Carpenter
2023-06-21 10:23           ` Dan Carpenter
2023-06-21 12:03           ` Joel Granados
2023-06-21 12:03             ` [Bridge] " Joel Granados
2023-06-21 12:03             ` Joel Granados
2023-06-21 12:03             ` Joel Granados
2023-06-23 14:21           ` Joel Granados
2023-06-23 14:21             ` [Bridge] " Joel Granados
2023-06-23 14:21             ` Joel Granados
2023-06-23 14:21             ` Joel Granados
2023-06-21 10:49         ` Dan Carpenter
2023-06-21 10:49           ` [Bridge] " Dan Carpenter
2023-06-21 10:49           ` Dan Carpenter
2023-06-21 10:49           ` Dan Carpenter
2023-06-21 11:49           ` Joel Granados
2023-06-21 11:49             ` [Bridge] " Joel Granados
2023-06-21 11:49             ` Joel Granados
2023-06-21 11:49             ` Joel Granados
2023-06-21 11:36         ` Joel Granados
2023-06-21 11:36           ` [Bridge] " Joel Granados
2023-06-21 11:36           ` Joel Granados
2023-06-21 11:36           ` Joel Granados
     [not found]   ` <CGME20230621091029eucas1p2f9fd694dae3dfbdfffd25dccf4fcb568@eucas1p2.samsung.com>
2023-06-21  9:09     ` [PATCH 07/11] sysctl: Add size to register_sysctl Joel Granados
2023-06-21  9:09       ` [Intel-gfx] " Joel Granados
2023-06-21  9:09       ` Joel Granados
2023-06-21  9:09       ` Joel Granados
2023-06-21  9:09       ` [Ocfs2-devel] " Joel Granados via Ocfs2-devel
     [not found]   ` <CGME20230621091037eucas1p188e11d8064526a5a0549217d5a419647@eucas1p1.samsung.com>
2023-06-21  9:09     ` [PATCH 08/11] sysctl: Add size to register_sysctl_init Joel Granados
2023-06-21  9:09       ` Joel Granados
2023-06-21  9:56       ` Jiri Slaby
2023-06-21  9:56         ` Jiri Slaby
2023-06-21 13:11         ` Joel Granados
2023-06-21 13:11           ` Joel Granados
2023-06-22  4:25           ` Jiri Slaby
2023-06-22  4:25             ` Jiri Slaby
2023-06-22 13:59             ` Joel Granados
2023-06-22 13:59               ` Joel Granados
2023-06-21 10:47       ` Greg Kroah-Hartman
2023-06-21 10:47         ` Greg Kroah-Hartman
2023-06-21 13:15         ` Joel Granados
2023-06-21 13:15           ` Joel Granados
2023-06-22  4:21           ` Jiri Slaby
2023-06-22  4:21             ` Jiri Slaby
2023-06-22 14:00             ` Joel Granados
2023-06-22 14:00               ` Joel Granados
2023-06-23 15:20               ` Petr Mladek
2023-06-23 15:20                 ` Petr Mladek
2023-06-21 11:36       ` Petr Mladek
2023-06-21 11:36         ` Petr Mladek
2023-06-21 15:30         ` Joel Granados
2023-06-21 15:30           ` Joel Granados
     [not found]   ` <CGME20230621094824eucas1p154c97eead5f2de6bceca6359304b775c@eucas1p1.samsung.com>
2023-06-21  9:48     ` [PATCH 09/11] sysctl: Remove the end element in sysctl table arrays Joel Granados
2023-06-21  9:48       ` [Bridge] " Joel Granados
2023-06-21  9:48       ` Joel Granados
2023-06-21  9:48       ` Joel Granados
2023-06-21  9:48       ` [Intel-gfx] " Joel Granados
2023-06-21  9:48       ` Joel Granados
2023-06-21  9:48       ` Joel Granados
2023-06-21  9:48       ` [Ocfs2-devel] " Joel Granados via Ocfs2-devel
2023-06-21  9:48       ` Joel Granados
     [not found]       ` <CGME20230621094825eucas1p2d37372e5bd2377bfe953e6e4f7ff0363@eucas1p2.samsung.com>
2023-06-21  9:48         ` [PATCH 10/11] sysctl: Remove nr_entries from new_links Joel Granados
     [not found]       ` <CGME20230621094828eucas1p22b0b45adc25f881fe00a20d96d495d95@eucas1p2.samsung.com>
2023-06-21  9:48         ` [PATCH 11/11] sysctl: rm "child" from __register_sysctl_table doc Joel Granados
2023-06-21 11:16       ` [PATCH 09/11] sysctl: Remove the end element in sysctl table arrays Jani Nikula
2023-06-21 11:16         ` [Bridge] " Jani Nikula
2023-06-21 11:16         ` Jani Nikula
2023-06-21 11:16         ` Jani Nikula
2023-06-21 11:16         ` [Intel-gfx] " Jani Nikula
2023-06-21 11:16         ` Jani Nikula
2023-06-21 11:16         ` Jani Nikula
2023-06-21 11:16         ` [Ocfs2-devel] " Jani Nikula via Ocfs2-devel
2023-06-21 13:06         ` Joel Granados
2023-06-21 13:06           ` [Bridge] " Joel Granados
2023-06-21 13:06           ` Joel Granados
2023-06-21 13:06           ` [Intel-gfx] " Joel Granados
2023-06-21 13:06           ` Joel Granados
2023-06-21 13:06           ` Joel Granados
2023-06-21 13:06           ` [Ocfs2-devel] " Joel Granados via Ocfs2-devel
2023-06-21 13:15           ` Jani Nikula
2023-06-21 13:15             ` [Bridge] " Jani Nikula
2023-06-21 13:15             ` Jani Nikula
2023-06-21 13:15             ` [Intel-gfx] " Jani Nikula
2023-06-21 13:15             ` Jani Nikula
2023-06-21 13:15             ` Jani Nikula
2023-06-21 13:15             ` [Ocfs2-devel] " Jani Nikula via Ocfs2-devel
2023-06-21 13:43             ` Joel Granados
2023-06-21 13:43               ` [Bridge] " Joel Granados
2023-06-21 13:43               ` Joel Granados
2023-06-21 13:43               ` [Intel-gfx] " Joel Granados
2023-06-21 13:43               ` Joel Granados
2023-06-21 13:43               ` Joel Granados
2023-06-21 13:43               ` [Ocfs2-devel] " Joel Granados via Ocfs2-devel
2023-06-21 10:46   ` [PATCH 00/11] " Greg KH
2023-06-21 12:38     ` Joel Granados
2023-06-21 13:10       ` Greg KH [this message]
2023-06-21 14:13         ` Joel Granados

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=2023062102-letdown-roving-921d@gregkh \
    --to=greg@kroah.com \
    --cc=bpf@vger.kernel.org \
    --cc=j.granados@samsung.com \
    --cc=mcgrof@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.