linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3 v2] Trivial code clean for procfs
@ 2012-09-05 12:17 yan
  2012-09-05 12:17 ` [PATCH 1/3 v2] proc: return -ENOMEM when inode allocation failed yan
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: yan @ 2012-09-05 12:17 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

Changed from v1 :
	Add detailed changelog (suggested by Andrew Morton)

yan (3):
  proc: return -ENOMEM when inode allocation failed
  proc: no need to initialize proc_inode->fd in proc_get_inode
  proc: use kzalloc instead of kmalloc and memset

 fs/proc/generic.c |    5 ++---
 fs/proc/inode.c   |    1 -
 2 files changed, 2 insertions(+), 4 deletions(-)

-- 
1.7.9.5


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

* [PATCH 1/3 v2] proc: return -ENOMEM when inode allocation failed
  2012-09-05 12:17 [PATCH 0/3 v2] Trivial code clean for procfs yan
@ 2012-09-05 12:17 ` yan
  2012-09-05 12:17 ` [PATCH 2/3 v2] proc : no need to initialize proc_inode->fd in proc_get_inode yan
  2012-09-05 12:17 ` [PATCH 3/3 v2] proc: use kzalloc instead of kmalloc and memset yan
  2 siblings, 0 replies; 5+ messages in thread
From: yan @ 2012-09-05 12:17 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

If proc_get_inode() returns NULL then presumably it encountered memory
exhaustion.  proc_lookup_de() should return -ENOMEM in this case, not 
-EINVAL.

Signed-off-by: yan <clouds.yan@gmail.com>
---
 fs/proc/generic.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index b3647fe..9e8f631 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -427,7 +427,7 @@ struct dentry *proc_lookup_de(struct proc_dir_entry *de, struct inode *dir,
 		if (!memcmp(dentry->d_name.name, de->name, de->namelen)) {
 			pde_get(de);
 			spin_unlock(&proc_subdir_lock);
-			error = -EINVAL;
+			error = -ENOMEM;
 			inode = proc_get_inode(dir->i_sb, de);
 			goto out_unlock;
 		}
-- 
1.7.9.5


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

* [PATCH 2/3 v2] proc : no need to initialize proc_inode->fd in proc_get_inode
  2012-09-05 12:17 [PATCH 0/3 v2] Trivial code clean for procfs yan
  2012-09-05 12:17 ` [PATCH 1/3 v2] proc: return -ENOMEM when inode allocation failed yan
@ 2012-09-05 12:17 ` yan
  2012-09-05 12:17 ` [PATCH 3/3 v2] proc: use kzalloc instead of kmalloc and memset yan
  2 siblings, 0 replies; 5+ messages in thread
From: yan @ 2012-09-05 12:17 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

proc_get_inode() obtains the inode via a call to iget_locked().
iget_locked() calls alloc_inode() which will call proc_alloc_inode() which
clears proc_inode.fd, so there is no need to clear this field in
proc_get_inode().

If iget_locked() instead found the inode via find_inode_fast(), that inode
will not have I_NEW set so this change has no effect.

Signed-off-by: yan <clouds.yan@gmail.com>
---
 fs/proc/inode.c |    1 -
 1 file changed, 1 deletion(-)

diff --git a/fs/proc/inode.c b/fs/proc/inode.c
index 7ac817b..3b22bbd 100644
--- a/fs/proc/inode.c
+++ b/fs/proc/inode.c
@@ -450,7 +450,6 @@ struct inode *proc_get_inode(struct super_block *sb, struct proc_dir_entry *de)
 		return NULL;
 	if (inode->i_state & I_NEW) {
 		inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME;
-		PROC_I(inode)->fd = 0;
 		PROC_I(inode)->pde = de;
 
 		if (de->mode) {
-- 
1.7.9.5


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

* [PATCH 3/3 v2] proc: use kzalloc instead of kmalloc and memset
  2012-09-05 12:17 [PATCH 0/3 v2] Trivial code clean for procfs yan
  2012-09-05 12:17 ` [PATCH 1/3 v2] proc: return -ENOMEM when inode allocation failed yan
  2012-09-05 12:17 ` [PATCH 2/3 v2] proc : no need to initialize proc_inode->fd in proc_get_inode yan
@ 2012-09-05 12:17 ` yan
  2012-09-05 21:37   ` Andrew Morton
  2 siblings, 1 reply; 5+ messages in thread
From: yan @ 2012-09-05 12:17 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

Part of the memory will be written twice after this change, but that 
should be negligible.

Signed-off-by: yan <clouds.yan@gmail.com>
---
 fs/proc/generic.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index 9e8f631..38de015 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -616,10 +616,9 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
 
 	len = strlen(fn);
 
-	ent = kmalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);
+	ent = kzalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);
 	if (!ent) goto out;
 
-	memset(ent, 0, sizeof(struct proc_dir_entry));
 	memcpy(ent->name, fn, len + 1);
 	ent->namelen = len;
 	ent->mode = mode;
-- 
1.7.9.5


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

* Re: [PATCH 3/3 v2] proc: use kzalloc instead of kmalloc and memset
  2012-09-05 12:17 ` [PATCH 3/3 v2] proc: use kzalloc instead of kmalloc and memset yan
@ 2012-09-05 21:37   ` Andrew Morton
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2012-09-05 21:37 UTC (permalink / raw)
  To: yan; +Cc: linux-kernel

On Wed,  5 Sep 2012 20:17:17 +0800
yan <clouds.yan@gmail.com> wrote:

> Part of the memory will be written twice after this change, but that 
> should be negligible.
> 
> ...
>
> --- a/fs/proc/generic.c
> +++ b/fs/proc/generic.c
> @@ -616,10 +616,9 @@ static struct proc_dir_entry *__proc_create(struct proc_dir_entry **parent,
>  
>  	len = strlen(fn);
>  
> -	ent = kmalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);
> +	ent = kzalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);
>  	if (!ent) goto out;
>  
> -	memset(ent, 0, sizeof(struct proc_dir_entry));
>  	memcpy(ent->name, fn, len + 1);
>  	ent->namelen = len;
>  	ent->mode = mode;

I'm not sure that I really like the idea of adding this additional
overhead.  But sure, it won't matter to anyone at all.

While we're digging around in __proc_create(), how about we fix a few
other things?


From: Andrew Morton <akpm@linux-foundation.org>
Subject: proc-use-kzalloc-instead-of-kmalloc-and-memset-fix

fix __proc_create() coding-style issues, remove unneeded zero-initialisations

Cc: yan <clouds.yan@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---

 fs/proc/generic.c |   10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff -puN fs/proc/generic.c~proc-use-kzalloc-instead-of-kmalloc-and-memset-fix fs/proc/generic.c
--- a/fs/proc/generic.c~proc-use-kzalloc-instead-of-kmalloc-and-memset-fix
+++ a/fs/proc/generic.c
@@ -605,7 +605,8 @@ static struct proc_dir_entry *__proc_cre
 	unsigned int len;
 
 	/* make sure name is valid */
-	if (!name || !strlen(name)) goto out;
+	if (!name || !strlen(name))
+		goto out;
 
 	if (xlate_proc_name(name, parent, &fn) != 0)
 		goto out;
@@ -617,18 +618,17 @@ static struct proc_dir_entry *__proc_cre
 	len = strlen(fn);
 
 	ent = kzalloc(sizeof(struct proc_dir_entry) + len + 1, GFP_KERNEL);
-	if (!ent) goto out;
+	if (!ent)
+		goto out;
 
 	memcpy(ent->name, fn, len + 1);
 	ent->namelen = len;
 	ent->mode = mode;
 	ent->nlink = nlink;
 	atomic_set(&ent->count, 1);
-	ent->pde_users = 0;
 	spin_lock_init(&ent->pde_unload_lock);
-	ent->pde_unload_completion = NULL;
 	INIT_LIST_HEAD(&ent->pde_openers);
- out:
+out:
 	return ent;
 }
 
_


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

end of thread, other threads:[~2012-09-05 21:37 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-05 12:17 [PATCH 0/3 v2] Trivial code clean for procfs yan
2012-09-05 12:17 ` [PATCH 1/3 v2] proc: return -ENOMEM when inode allocation failed yan
2012-09-05 12:17 ` [PATCH 2/3 v2] proc : no need to initialize proc_inode->fd in proc_get_inode yan
2012-09-05 12:17 ` [PATCH 3/3 v2] proc: use kzalloc instead of kmalloc and memset yan
2012-09-05 21:37   ` Andrew Morton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).