public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] proc: make proc entry's len "unsigned int"
@ 2010-11-26 21:10 Alexey Dobriyan
  2010-11-26 23:58 ` Joe Perches
  2011-01-05  0:51 ` Andrew Morton
  0 siblings, 2 replies; 4+ messages in thread
From: Alexey Dobriyan @ 2010-11-26 21:10 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

Space is not really conserved, because of natural alignment for the next field.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---

 fs/proc/generic.c       |    8 ++++----
 include/linux/proc_fs.h |    2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -28,7 +28,7 @@
 
 DEFINE_SPINLOCK(proc_subdir_lock);
 
-static int proc_match(int len, const char *name, struct proc_dir_entry *de)
+static int proc_match(unsigned int len, const char *name, struct proc_dir_entry *de)
 {
 	if (de->namelen != len)
 		return 0;
@@ -303,7 +303,7 @@ static int __xlate_proc_name(const char *name, struct proc_dir_entry **ret,
 {
 	const char     		*cp = name, *next;
 	struct proc_dir_entry	*de;
-	int			len;
+	unsigned int		len;
 
 	de = *ret;
 	if (!de)
@@ -605,7 +605,7 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
 {
 	struct proc_dir_entry *ent = NULL;
 	const char *fn = name;
-	int len;
+	unsigned int len;
 
 	/* make sure name is valid */
 	if (!name || !strlen(name)) goto out;
@@ -794,7 +794,7 @@ void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
 	struct proc_dir_entry **p;
 	struct proc_dir_entry *de = NULL;
 	const char *fn = name;
-	int len;
+	unsigned int len;
 
 	spin_lock(&proc_subdir_lock);
 	if (__xlate_proc_name(name, &parent, &fn) != 0) {
--- a/include/linux/proc_fs.h
+++ b/include/linux/proc_fs.h
@@ -50,7 +50,7 @@ typedef	int (write_proc_t)(struct file *file, const char __user *buffer,
 
 struct proc_dir_entry {
 	unsigned int low_ino;
-	unsigned short namelen;
+	unsigned int namelen;
 	const char *name;
 	mode_t mode;
 	nlink_t nlink;

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] proc: make proc entry's len "unsigned int"
  2010-11-26 21:10 [PATCH] proc: make proc entry's len "unsigned int" Alexey Dobriyan
@ 2010-11-26 23:58 ` Joe Perches
  2011-01-05  0:51 ` Andrew Morton
  1 sibling, 0 replies; 4+ messages in thread
From: Joe Perches @ 2010-11-26 23:58 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: akpm, linux-kernel

On Fri, 2010-11-26 at 23:10 +0200, Alexey Dobriyan wrote:
> Space is not really conserved, because of natural alignment for the next field.

It can be.  Depends on the arch.

> Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
[]
> --- a/include/linux/proc_fs.h
> +++ b/include/linux/proc_fs.h
> @@ -50,7 +50,7 @@ typedef	int (write_proc_t)(struct file *file, const char __user *buffer,
>  
>  struct proc_dir_entry {
>  	unsigned int low_ino;
> -	unsigned short namelen;
> +	unsigned int namelen;
>  	const char *name;
>  	mode_t mode;
>  	nlink_t nlink;

mode_t is unsigned short on many platforms.

Layout order in this struct should probably be:

	const char *name;
	unsigned short namelen;
	mode_t mode;



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] proc: make proc entry's len "unsigned int"
  2010-11-26 21:10 [PATCH] proc: make proc entry's len "unsigned int" Alexey Dobriyan
  2010-11-26 23:58 ` Joe Perches
@ 2011-01-05  0:51 ` Andrew Morton
  2011-01-05  8:45   ` Alexey Dobriyan
  1 sibling, 1 reply; 4+ messages in thread
From: Andrew Morton @ 2011-01-05  0:51 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: linux-kernel

On Fri, 26 Nov 2010 23:10:33 +0200
Alexey Dobriyan <adobriyan@gmail.com> wrote:

> Space is not really conserved, because of natural alignment for the next field.
> 
> ...
> 
> --- a/fs/proc/generic.c
> +++ b/fs/proc/generic.c
> @@ -28,7 +28,7 @@
>  
>  DEFINE_SPINLOCK(proc_subdir_lock);
>  
> -static int proc_match(int len, const char *name, struct proc_dir_entry *de)
> +static int proc_match(unsigned int len, const char *name, struct proc_dir_entry *de)
>  {
>  	if (de->namelen != len)
>  		return 0;
> @@ -303,7 +303,7 @@ static int __xlate_proc_name(const char *name, struct proc_dir_entry **ret,
>  {
>  	const char     		*cp = name, *next;
>  	struct proc_dir_entry	*de;
> -	int			len;
> +	unsigned int		len;
>  
>  	de = *ret;
>  	if (!de)
> @@ -605,7 +605,7 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
>  {
>  	struct proc_dir_entry *ent = NULL;
>  	const char *fn = name;
> -	int len;
> +	unsigned int len;
>  
>  	/* make sure name is valid */
>  	if (!name || !strlen(name)) goto out;
> @@ -794,7 +794,7 @@ void remove_proc_entry(const char *name, struct proc_dir_entry *parent)
>  	struct proc_dir_entry **p;
>  	struct proc_dir_entry *de = NULL;
>  	const char *fn = name;
> -	int len;
> +	unsigned int len;
>  
>  	spin_lock(&proc_subdir_lock);
>  	if (__xlate_proc_name(name, &parent, &fn) != 0) {
> --- a/include/linux/proc_fs.h
> +++ b/include/linux/proc_fs.h
> @@ -50,7 +50,7 @@ typedef	int (write_proc_t)(struct file *file, const char __user *buffer,
>  
>  struct proc_dir_entry {
>  	unsigned int low_ino;
> -	unsigned short namelen;
> +	unsigned int namelen;
>  	const char *name;
>  	mode_t mode;
>  	nlink_t nlink;

Well, if we _can_ save some space here then the returns would be
appreciable.

akpm:/home/akpm# find /proc | wc -l
95543

(wtf?)

akpm:/home/akpm# find /proc/[0-9]* | wc -l
94212

(oh.)

Do all of those things have a proc_dir_entry?  IIRC we changed things
so they're somewhat allocate-on-demand.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] proc: make proc entry's len "unsigned int"
  2011-01-05  0:51 ` Andrew Morton
@ 2011-01-05  8:45   ` Alexey Dobriyan
  0 siblings, 0 replies; 4+ messages in thread
From: Alexey Dobriyan @ 2011-01-05  8:45 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

On Tue, Jan 04, 2011 at 04:51:59PM -0800, Andrew Morton wrote:
> On Fri, 26 Nov 2010 23:10:33 +0200
> Alexey Dobriyan <adobriyan@gmail.com> wrote:

> >  struct proc_dir_entry {
> >  	unsigned int low_ino;
> > -	unsigned short namelen;
> > +	unsigned int namelen;
> >  	const char *name;
> >  	mode_t mode;
> >  	nlink_t nlink;
> 
> Well, if we _can_ save some space here then the returns would be
> appreciable.
> 
> akpm:/home/akpm# find /proc | wc -l
> 95543
> 
> (wtf?)
> 
> akpm:/home/akpm# find /proc/[0-9]* | wc -l
> 94212
> 
> (oh.)

Different number of processes?

> Do all of those things have a proc_dir_entry?

No!

> IIRC we changed things so they're somewhat allocate-on-demand.

Only /proc/$PID and /proc/sys/* are on-demand allocated.
The rest has struct proc_dir_entry associated.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2011-01-05  8:45 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-11-26 21:10 [PATCH] proc: make proc entry's len "unsigned int" Alexey Dobriyan
2010-11-26 23:58 ` Joe Perches
2011-01-05  0:51 ` Andrew Morton
2011-01-05  8:45   ` Alexey Dobriyan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox