From: ebiederm@xmission.com (Eric W. Biederman)
To: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
netdev@vger.kernel.org,
Damien Millescamps <damien.millescamps@6wind.com>
Subject: Re: [PATCH 18/29] sysctl: Normalize the root_table data structure.
Date: Sun, 29 Jan 2012 16:22:49 -0800 [thread overview]
Message-ID: <m1pqe2jaxy.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <CAPLs8y9-nA7gZymMkFzOdB6zh0h2hS+dhWu42ciOaHzJ++Z+gg@mail.gmail.com> (Lucian Adrian Grijincu's message of "Sun, 29 Jan 2012 19:36:06 +0200")
Lucian thanks for the review.
Lucian Adrian Grijincu <lucian.grijincu@gmail.com> writes:
> On Fri, Jan 27, 2012 at 6:51 AM, Eric W. Biederman
> <ebiederm@xmission.com> wrote:
>> Every other directory has a .child member and we look at the .child
>> for our entries. Do the same for the root_table.
>>
>> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
>> ---
>> fs/proc/proc_sysctl.c | 15 +++++++++++----
>> 1 files changed, 11 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
>> index 7e96a26..88d1b06 100644
>> --- a/fs/proc/proc_sysctl.c
>> +++ b/fs/proc/proc_sysctl.c
>> @@ -25,7 +25,14 @@ void proc_sys_poll_notify(struct ctl_table_poll *poll)
>> wake_up_interruptible(&poll->wait);
>> }
>>
>> -static struct ctl_table root_table[1];
>> +static struct ctl_table root_table[] = {
>> + {
>> + .procname = "",
>> + .mode = S_IRUGO|S_IXUGO,
>
> Why not: .mode = S_IFDIR|S_IRUGO|S_IXUGO ?
>
> You change it later and add IFDIR in patch 22/29 because of this
> change (from 22/29):
> - if (!table->child) {
> + if (!S_ISDIR(table->mode)) {
>
> but if might as well be done here.
Actually doing not adding S_IFDIR here is important for keeping the
notion of changing one logical thing at a time.
I see normalizing this table early as deliberately emphasizing that we
started using S_IFDIR later.
>> + .child = &root_table[1],
>> + },
>> + { }
>> +};
>> static struct ctl_table_root sysctl_table_root;
>> static struct ctl_table_header root_table_header = {
>> {{.count = 1,
>> @@ -319,7 +326,7 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
>> goto out;
>> }
>
> Somewhere above we have
> struct ctl_table *table = PROC_I(inode)->sysctl_entry;
> and sysctl_entry can take two values:
> - NULL: fs/proc/inode.c:proc_alloc_inode()
> - a non-NULL table in: proc_sys_make_inode()
>
> The only inode that can be passed to proc_sys_lookup that can have
> table=NULL is the root inode.
> In that case head will be &root_table_header.
>
>
> So head->ctl_table[1] == root_table_header.ctl_table[1] == root_table[1].
Yes.
>> - table = table ? table->child : head->ctl_table;
>> + table = table ? table->child : &head->ctl_table[1];
>
> I think this could be improved to something like this:
> /* table == NULL only for the procfs root directory */
> table = table ? table->child : &root_table[1];
>
>
> It's not that important, as this code will go away in a few patches.
Good catch. I had to ask myself after I read this why the code wasn't
pointing at root_table already. The answer as it turns out was because
it was static in kernel/sysctl.c until my earlier patches and I simply
missed the opportunity.
>> p = find_in_table(table, name);
>> if (!p) {
>> @@ -510,7 +517,7 @@ static int proc_sys_readdir(struct file *filp, void *dirent, filldir_t filldir)
>> goto out;
>> }
>>
>> - table = table ? table->child : head->ctl_table;
>> + table = table ? table->child : &head->ctl_table[1];
>
> Similar.
Agreed. At this point in the game since this code does go away I don't
think it is worth making the change now. But I will keep it in mind
and I you have definitely spotted an opportunity missed in this
patchset.
Eric
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman)
To: Lucian Adrian Grijincu <lucian.grijincu@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org,
netdev@vger.kernel.org,
Damien Millescamps <damien.millescamps@6wind.com>
Subject: Re: [PATCH 18/29] sysctl: Normalize the root_table data structure.
Date: Sun, 29 Jan 2012 16:22:49 -0800 [thread overview]
Message-ID: <m1pqe2jaxy.fsf@fess.ebiederm.org> (raw)
In-Reply-To: <CAPLs8y9-nA7gZymMkFzOdB6zh0h2hS+dhWu42ciOaHzJ++Z+gg@mail.gmail.com> (Lucian Adrian Grijincu's message of "Sun, 29 Jan 2012 19:36:06 +0200")
Lucian thanks for the review.
Lucian Adrian Grijincu <lucian.grijincu@gmail.com> writes:
> On Fri, Jan 27, 2012 at 6:51 AM, Eric W. Biederman
> <ebiederm@xmission.com> wrote:
>> Every other directory has a .child member and we look at the .child
>> for our entries. Do the same for the root_table.
>>
>> Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
>> ---
>> fs/proc/proc_sysctl.c | 15 +++++++++++----
>> 1 files changed, 11 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/proc/proc_sysctl.c b/fs/proc/proc_sysctl.c
>> index 7e96a26..88d1b06 100644
>> --- a/fs/proc/proc_sysctl.c
>> +++ b/fs/proc/proc_sysctl.c
>> @@ -25,7 +25,14 @@ void proc_sys_poll_notify(struct ctl_table_poll *poll)
>> wake_up_interruptible(&poll->wait);
>> }
>>
>> -static struct ctl_table root_table[1];
>> +static struct ctl_table root_table[] = {
>> + {
>> + .procname = "",
>> + .mode = S_IRUGO|S_IXUGO,
>
> Why not: .mode = S_IFDIR|S_IRUGO|S_IXUGO ?
>
> You change it later and add IFDIR in patch 22/29 because of this
> change (from 22/29):
> - if (!table->child) {
> + if (!S_ISDIR(table->mode)) {
>
> but if might as well be done here.
Actually doing not adding S_IFDIR here is important for keeping the
notion of changing one logical thing at a time.
I see normalizing this table early as deliberately emphasizing that we
started using S_IFDIR later.
>> + .child = &root_table[1],
>> + },
>> + { }
>> +};
>> static struct ctl_table_root sysctl_table_root;
>> static struct ctl_table_header root_table_header = {
>> {{.count = 1,
>> @@ -319,7 +326,7 @@ static struct dentry *proc_sys_lookup(struct inode *dir, struct dentry *dentry,
>> goto out;
>> }
>
> Somewhere above we have
> struct ctl_table *table = PROC_I(inode)->sysctl_entry;
> and sysctl_entry can take two values:
> - NULL: fs/proc/inode.c:proc_alloc_inode()
> - a non-NULL table in: proc_sys_make_inode()
>
> The only inode that can be passed to proc_sys_lookup that can have
> table=NULL is the root inode.
> In that case head will be &root_table_header.
>
>
> So head->ctl_table[1] == root_table_header.ctl_table[1] == root_table[1].
Yes.
>> - table = table ? table->child : head->ctl_table;
>> + table = table ? table->child : &head->ctl_table[1];
>
> I think this could be improved to something like this:
> /* table == NULL only for the procfs root directory */
> table = table ? table->child : &root_table[1];
>
>
> It's not that important, as this code will go away in a few patches.
Good catch. I had to ask myself after I read this why the code wasn't
pointing at root_table already. The answer as it turns out was because
it was static in kernel/sysctl.c until my earlier patches and I simply
missed the opportunity.
>> p = find_in_table(table, name);
>> if (!p) {
>> @@ -510,7 +517,7 @@ static int proc_sys_readdir(struct file *filp, void *dirent, filldir_t filldir)
>> goto out;
>> }
>>
>> - table = table ? table->child : head->ctl_table;
>> + table = table ? table->child : &head->ctl_table[1];
>
> Similar.
Agreed. At this point in the game since this code does go away I don't
think it is worth making the change now. But I will keep it in mind
and I you have definitely spotted an opportunity missed in this
patchset.
Eric
next prev parent reply other threads:[~2012-01-30 0:20 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-27 4:45 [Review][PATCH][0/29] sysctl rewrite for speed and clarity Eric W. Biederman
2012-01-27 4:49 ` [PATCH 01/29] sysctl: remove impossible condition check Eric W. Biederman
2012-01-27 4:49 ` [PATCH 02/29] sysctl: Consolidate !CONFIG_SYSCTL handling Eric W. Biederman
2012-01-27 4:49 ` [PATCH 03/29] sysctl: Register the base sysctl table like any other sysctl table Eric W. Biederman
2012-01-27 4:49 ` [PATCH 04/29] sysctl: Move the implementation into fs/proc/proc_sysctl.c Eric W. Biederman
2012-01-27 4:49 ` [PATCH 05/29] sysctl: Make the directories have nlink == 1 Eric W. Biederman
2012-01-27 4:49 ` [PATCH 06/29] sysctl: Implement retire_sysctl_set Eric W. Biederman
2012-01-27 4:49 ` [PATCH 07/29] sysctl: Remove the unnecessary sysctl_set parent concept Eric W. Biederman
2012-01-27 4:49 ` [PATCH 08/29] sysctl: Create local copies of directory names used in paths Eric W. Biederman
2012-01-27 4:49 ` [PATCH 09/29] sysctl: Add support for register sysctl tables with a normal cstring path Eric W. Biederman
2012-01-27 4:49 ` [PATCH 10/29] sysctl: Add ctl_table chains into cstring paths Eric W. Biederman
2012-01-27 4:49 ` [PATCH 11/29] sysctl: register only tables of sysctl files Eric W. Biederman
2012-01-27 4:49 ` [PATCH 12/29] sysctl: Improve the sysctl sanity checks Eric W. Biederman
2012-01-27 4:49 ` [PATCH 13/29] sysctl: Remove the now unused ctl_table parent field Eric W. Biederman
2012-01-27 4:49 ` [PATCH 14/29] sysctl: A more obvious version of grab_header Eric W. Biederman
2012-01-27 4:49 ` [PATCH 15/29] sysctl: Initial support for auto-unregistering sysctl tables Eric W. Biederman
2012-01-27 4:49 ` [PATCH 16/29] sysctl: Factor out init_header from __register_sysctl_paths Eric W. Biederman
2012-01-27 4:49 ` [PATCH 17/29] sysctl: Factor out insert_header and erase_header Eric W. Biederman
2012-01-27 4:49 ` [PATCH 18/29] sysctl: Normalize the root_table data structure Eric W. Biederman
2012-01-27 4:50 ` [PATCH 19/29] sysctl: Rewrite proc_sys_lookup introducing find_entry and lookup_entry Eric W. Biederman
2012-01-27 4:50 ` [PATCH 20/29] sysctl: Rewrite proc_sys_readdir in terms of first_entry and next_entry Eric W. Biederman
2012-01-27 4:50 ` [PATCH 21/29] sysctl: Add a root pointer to ctl_table_set Eric W. Biederman
2012-01-27 4:50 ` [PATCH 22/29] sysctl: Stop requiring explicit management of sysctl directories Eric W. Biederman
2012-01-27 4:50 ` [PATCH 23/29] sysctl: Add sysctl_print_dir and use it in get_subdir Eric W. Biederman
2012-01-27 4:50 ` [PATCH 24/29] sysctl: Replace root_list with links between sysctl_table_sets Eric W. Biederman
2012-01-27 4:50 ` [PATCH 25/29] sysctl: Modify __register_sysctl_paths to take a set instead of a root and an nsproxy Eric W. Biederman
2012-01-27 4:50 ` [PATCH 26/29] sysctl: Move sysctl_check_dups into insert_header Eric W. Biederman
2012-01-27 4:50 ` [PATCH 27/29] sysctl: Make the header lists per directory Eric W. Biederman
2012-01-27 4:50 ` [PATCH 28/29] sysctl: Index sysctl directories with rbtrees Eric W. Biederman
2012-01-27 4:50 ` [PATCH 29/29] sysctl: Add register_sysctl for normal sysctl users Eric W. Biederman
2012-01-27 4:51 ` [PATCH 01/29] sysctl: remove impossible condition check Eric W. Biederman
2012-01-27 4:51 ` [PATCH 02/29] sysctl: Consolidate !CONFIG_SYSCTL handling Eric W. Biederman
2012-01-27 4:51 ` [PATCH 03/29] sysctl: Register the base sysctl table like any other sysctl table Eric W. Biederman
2012-01-27 4:51 ` [PATCH 04/29] sysctl: Move the implementation into fs/proc/proc_sysctl.c Eric W. Biederman
2012-01-27 4:51 ` [PATCH 05/29] sysctl: Make the directories have nlink == 1 Eric W. Biederman
2012-01-27 4:51 ` [PATCH 06/29] sysctl: Implement retire_sysctl_set Eric W. Biederman
2012-01-27 4:51 ` [PATCH 07/29] sysctl: Remove the unnecessary sysctl_set parent concept Eric W. Biederman
2012-01-27 4:51 ` [PATCH 08/29] sysctl: Create local copies of directory names used in paths Eric W. Biederman
2012-01-27 4:51 ` [PATCH 09/29] sysctl: Add support for register sysctl tables with a normal cstring path Eric W. Biederman
2012-01-27 4:51 ` [PATCH 10/29] sysctl: Add ctl_table chains into cstring paths Eric W. Biederman
2012-01-27 4:51 ` [PATCH 11/29] sysctl: register only tables of sysctl files Eric W. Biederman
2012-01-27 4:51 ` [PATCH 12/29] sysctl: Improve the sysctl sanity checks Eric W. Biederman
2012-01-27 4:51 ` [PATCH 13/29] sysctl: Remove the now unused ctl_table parent field Eric W. Biederman
2012-01-27 4:51 ` [PATCH 14/29] sysctl: A more obvious version of grab_header Eric W. Biederman
2012-01-27 4:51 ` [PATCH 15/29] sysctl: Initial support for auto-unregistering sysctl tables Eric W. Biederman
2012-01-27 4:51 ` [PATCH 16/29] sysctl: Factor out init_header from __register_sysctl_paths Eric W. Biederman
2012-01-27 4:51 ` [PATCH 17/29] sysctl: Factor out insert_header and erase_header Eric W. Biederman
2012-01-27 4:51 ` [PATCH 18/29] sysctl: Normalize the root_table data structure Eric W. Biederman
2012-01-29 17:36 ` Lucian Adrian Grijincu
2012-01-29 17:36 ` Lucian Adrian Grijincu
2012-01-30 0:22 ` Eric W. Biederman [this message]
2012-01-30 0:22 ` Eric W. Biederman
2012-01-27 4:51 ` [PATCH 19/29] sysctl: Rewrite proc_sys_lookup introducing find_entry and lookup_entry Eric W. Biederman
2012-01-29 15:49 ` Lucian Adrian Grijincu
2012-01-29 15:49 ` Lucian Adrian Grijincu
2012-01-27 4:51 ` [PATCH 20/29] sysctl: Rewrite proc_sys_readdir in terms of first_entry and next_entry Eric W. Biederman
2012-01-27 4:51 ` [PATCH 21/29] sysctl: Add a root pointer to ctl_table_set Eric W. Biederman
2012-01-29 17:19 ` Lucian Adrian Grijincu
2012-01-29 17:19 ` Lucian Adrian Grijincu
2012-01-27 4:51 ` [PATCH 22/29] sysctl: Stop requiring explicit management of sysctl directories Eric W. Biederman
2012-01-29 19:31 ` Lucian Adrian Grijincu
2012-01-29 19:31 ` Lucian Adrian Grijincu
2012-01-31 4:45 ` Eric W. Biederman
2012-01-27 4:51 ` [PATCH 23/29] sysctl: Add sysctl_print_dir and use it in get_subdir Eric W. Biederman
2012-01-27 4:52 ` [PATCH 24/29] sysctl: Replace root_list with links between sysctl_table_sets Eric W. Biederman
2012-01-30 0:01 ` Lucian Adrian Grijincu
2012-01-31 3:10 ` Eric W. Biederman
2012-01-31 3:10 ` Eric W. Biederman
2012-01-30 17:51 ` Dave Jones
2012-01-31 2:11 ` Eric W. Biederman
2012-01-31 2:13 ` Joe Perches
2012-01-27 4:52 ` [PATCH 25/29] sysctl: Modify __register_sysctl_paths to take a set instead of a root and an nsproxy Eric W. Biederman
2012-01-27 4:52 ` [PATCH 26/29] sysctl: Move sysctl_check_dups into insert_header Eric W. Biederman
2012-01-27 4:52 ` [PATCH 27/29] sysctl: Make the header lists per directory Eric W. Biederman
2012-01-27 4:52 ` [PATCH 28/29] sysctl: Index sysctl directories with rbtrees Eric W. Biederman
2012-01-27 4:52 ` [PATCH 29/29] sysctl: Add register_sysctl for normal sysctl users Eric W. Biederman
2012-02-02 3:27 ` [Review][PATCH][0/4] sysctl bitty fixes Eric W. Biederman
2012-02-02 3:28 ` [PATCH 1/4] sysctl: An easier to read version of find_subdir Eric W. Biederman
2012-02-02 3:29 ` [PATCH 2/4] sysctl: Correct error return from get_subdir Eric W. Biederman
2012-02-02 3:29 ` [PATCH 3/4] sysctl: Comments to make the code clearer Eric W. Biederman
2012-02-02 16:28 ` Ben Hutchings
2012-02-02 3:30 ` [PATCH 4/4] sysctl: Don't call sysctl_follow_link unless we are a link Eric W. Biederman
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=m1pqe2jaxy.fsf@fess.ebiederm.org \
--to=ebiederm@xmission.com \
--cc=damien.millescamps@6wind.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lucian.grijincu@gmail.com \
--cc=netdev@vger.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.