Re: [PATCH] drivers: Conversions from kmalloc+memset to k(z|c)alloc.

Daniel K.
2006-07-21T10:25:19Z

Rolf Eike Beer wrote:
> Am Donnerstag, 20. Juli 2006 21:05 schrieb Panagiotis Issaris:
>> @@ -443,12 +442,11 @@ int con_clear_unimap(struct vc_data *vc,
>> p = (struct uni_pagedir *)*vc->vc_uni_pagedir_loc;
>> if (p && p->readonly) return -EIO;
>> if (!p || --p->refcount) {
>> - q = (struct uni_pagedir *)kmalloc(sizeof(*p), GFP_KERNEL);
>> + q = kzalloc(sizeof(*p), GFP_KERNEL);
>> if (!q) {
>> if (p) p->refcount++;
>> return -ENOMEM;
>> }
>> - memset(q, 0, sizeof(*q));
>> q->refcount=1;
>> *vc->vc_uni_pagedir_loc = (unsigned long)q;
>> } else {
>
> This one still changes the way the code works. Before your patch *p will be
> always zeroed out. Now if p is there before it will keep it's contents.

No, it doesn't, the data at *p is/was not zeroed inside the if { .. } block.
Read carefully, the multiple statements on one line obfuscations might
have thrown you off.

However, it is slightly confusing that the value assigned to `q' is
kzalloced using sizeof(*p). It is an improvement though, as the old version
kmalloced using sizeof(*p), and memset using sizeof(*q).
That was really strange.

Daniel K.