[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <5046FC22.3050509@gmail.com>
Date: Wed, 05 Sep 2012 15:15:46 +0800
From: Cong Wang <xiyou.wangcong@...il.com>
To: yan yan <clouds.yan@...il.com>
CC: akpm@...ux-foundation.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH 1/3] proc: return -ENOMEM when inode allocation failed
On 09/04/2012 05:22 PM, yan yan wrote:
> 2012/9/4 Cong Wang <xiyou.wangcong@...il.com>:
>> On 09/03/2012 10:14 PM, yan wrote:
>>>
>>> Signed-off-by: yan <clouds.yan@...il.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 majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists