Messages in this thread Patch in this message | | | From | vimal singh <> | Date | Thu, 30 Jul 2009 20:43:51 +0530 | Subject | Re: [PATCH] [mtd] fixed faulty check |
| |
On Thu, Jul 30, 2009 at 8:23 PM, Sebastian Andrzej Siewior<bigeasy@linutronix.de> wrote: > Stoyan Gaydarov wrote: >>>> >>>> We have to and of_flash_remove() takes care of it. >>>> >>> >>> >> >> Does this mean that the original patch is fine or does it still need the >> kfree? From what i understand when going to err_out it will take care of >> info using of_flash_remove() so then it is not needed in the if check. > > The original patch was fine but it leaked info. of_flash_remove() does the > cleanup of info but only if it is part of driver's data (after the > of_flash_remove()). So you have to call dev_set_drvdata(&dev->dev, info) > earlier, after the kzalloc() to save the data or else there is no clean > up. >
Is this patch looks OK??
diff --git a/drivers/mtd/maps/physmap_of.c b/drivers/mtd/maps/physmap_of.c index 39d357b..d104cfc 100644 --- a/drivers/mtd/maps/physmap_of.c +++ b/drivers/mtd/maps/physmap_of.c @@ -204,7 +204,7 @@ static int __devinit of_flash_probe(struct of_device *dev, dev_err(&dev->dev, "Malformed reg property on %s\n", dev->node->full_name); err = -EINVAL; - goto err_out; + goto err_flash_remove; } count /= reg_tuple_size;
@@ -212,14 +212,14 @@ static int __devinit of_flash_probe(struct of_device *dev, info = kzalloc(sizeof(struct of_flash) + sizeof(struct of_flash_list) * count, GFP_KERNEL); if (!info) - goto err_out; - - mtd_list = kzalloc(sizeof(struct mtd_info) * count, GFP_KERNEL); - if (!info) - goto err_out; + goto err_flash_remove;
dev_set_drvdata(&dev->dev, info);
+ mtd_list = kzalloc(sizeof(struct mtd_info) * count, GFP_KERNEL); + if (!mtd_list) + goto err_flash_remove; + for (i = 0; i < count; i++) { err = -ENXIO; if (of_address_to_resource(dp, i, &res)) { @@ -338,6 +338,7 @@ static int __devinit of_flash_probe(struct of_device *dev,
err_out: kfree(mtd_list); +eerr_flash_remov: of_flash_remove(dev);
return err;
| |