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

Panagiotis Issaris takis at gna.org
Fri Jul 21 06:30:39 EDT 2006


Hi,

On vr, 2006-07-21 at 08:50 +0200, Rolf Eike Beer wrote:
>[...]
> Space after comma.
>[...]
> sizeof(*ltp)?
> 
> [more of this snipped]

> 
> > @@ -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.
Hmm. I do not really see the functional change here: If the memory
allocation failed, then in both cases, q will be zero and the function
will return. If the memory allocation succeeds, then in both cases a
memset will occur. Is it more subtle than that?

Before change:
if (!p || --p->refcount) {
    q = kmalloc(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;
}

After change:
if (!p || --p->refcount) {
    q = kzalloc(sizeof(*p), GFP_KERNEL);
    if (!q) {
        if (p) 
            p->refcount++;
        return -ENOMEM;
    }
    q->refcount=1;
    *vc->vc_uni_pagedir_loc = (unsigned long)q;
}

If !p then in both cases, q will be assigned some memory,
and if that succeeds, the block of memory will be cleared,
if it fails, it will not be cleared and the function will
exit.

If p then if --p->refcount<>0, a new block will be allocated
and if the allocation succeeds, it will be cleared in both cases.
If --p->refcount==0, nothing will be allocated nor cleared, in both
cases.

With friendly regards,
Takis




More information about the linux-pcmcia mailing list