On 09/04/2012 05:22 PM, yan yan wrote:
2012/9/4 Cong Wang <xiyou.wangc...@gmail.com>:
On 09/03/2012 10:14 PM, yan wrote:

Signed-off-by: yan <clouds....@gmail.com>


Please provide a changelog to explain why we need this patch.

I think the title is self explained.


---
   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;


Why the !memcmp() case is related with ENOMEM ??

We are presetting 'error' here. The following proc_get_inode() will try
to get an inode, either from inode cache or allocate a new one (and fill it).

If we get a NULL inode, that means allocation failed. That's how
ENOMEM involved.

Then the following patch is probably better than yours:


diff --git a/fs/proc/generic.c b/fs/proc/generic.c
index b3647fe..6b22913 100644
--- a/fs/proc/generic.c
+++ b/fs/proc/generic.c
@@ -427,12 +427,16 @@ 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;
                        inode = proc_get_inode(dir->i_sb, de);
+                       if (!inode) {
+                               error = -ENOMEM;
+                               goto out_put;
+                       }
                        goto out_unlock;
                }
        }
        spin_unlock(&proc_subdir_lock);
+
 out_unlock:

        if (inode) {
@@ -440,6 +444,8 @@ out_unlock:
                d_add(dentry, inode);
                return NULL;
        }
+out_put:
+
        if (de)
                pde_put(de);
        return ERR_PTR(error);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to