Messages in this thread | | | Subject | Re: [PATCH] drivers: Conversions from kmalloc+memset to k(z|c)alloc. | From | Panagiotis Issaris <> | Date | Fri, 21 Jul 2006 12:30:39 +0200 |
| |
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
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |