[PATCH] jffs2: fix memory leak if the sector was successfully erased

niam niam.niam at gmail.com
Mon Feb 22 12:40:43 EST 2010


Yes, indeed, you are right!

Thank you Michael!

Thank you to everybody and I'm sorry for doing that much noise here.

Next time I will try to send more correct patches.

However freeing memory in the callback is not obvious. Isn't better to
do this out of it?

-- Dima

On Mon, Feb 22, 2010 at 7:28 PM, Michael Trimarchi
<trimarchi at gandalf.sssup.it> wrote:
> Hi,
>
> Daniel Mack wrote:
>>
>> On Mon, Feb 22, 2010 at 06:26:22PM +0200, Ni at m wrote:
>>
>>>
>>> Memory allocated for erase instruction is not freed if the sector was
>>> successfully erased.
>>>
>>> Signed-off-by: Dmytro Milinevskyy <niam.niam at gmail.com>
>>>
>>
>> Can you forward that to the right people please? Call
>> scripts/get_maintainer.pl to get a list of maintainers.
>>
>> Daniel
>>
>>
>>
>>
>>>
>>> ---
>>>  fs/jffs2/erase.c |    4 +++-
>>>  1 files changed, 3 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/fs/jffs2/erase.c b/fs/jffs2/erase.c
>>> index b47679b..c0a5604 100644
>>> --- a/fs/jffs2/erase.c
>>> +++ b/fs/jffs2/erase.c
>>> @@ -74,8 +74,10 @@ static void jffs2_erase_block(struct jffs2_sb_info *c,
>>>        ((struct erase_priv_struct *)instr->priv)->c = c;
>>>
>>>        ret = c->mtd->erase(c->mtd, instr);
>>> -       if (!ret)
>>> +       if (!ret) {
>>> +        kfree(instr);
>>>                return;
>>> +    }
>>>
>>>        bad_offset = instr->fail_addr;
>>>        kfree(instr);
>>>
>>> _______________________________________________
>>> linux-arm-kernel mailing list
>>> linux-arm-kernel at lists.infradead.org
>>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>>
>>
>>
>
> static void jffs2_erase_callback(struct erase_info *instr)
> {
>       struct erase_priv_struct *priv = (void *)instr->priv;
>
>       if(instr->state != MTD_ERASE_DONE) {
> printk(KERN_WARNING "Erase at 0x%08x finished, but state != MTD_ERASE_DONE.
> State is 0x%x instead.\n", instr->addr, instr->state);
>               jffs2_erase_failed(priv->c, priv->jeb, instr->fail_addr);
>       } else {
>               jffs2_erase_succeeded(priv->c, priv->jeb);
>       }
>       kfree(instr);
> }
>
> instr->callback = jffs2_erase_callback;
>
> Maybe the free is here  :)
>
> Michael
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel at lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>>
>>
>
>



More information about the linux-arm-kernel mailing list