From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753984AbbKWIry (ORCPT ); Mon, 23 Nov 2015 03:47:54 -0500 Received: from mail-wm0-f44.google.com ([74.125.82.44]:34478 "EHLO mail-wm0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753861AbbKWIrP (ORCPT ); Mon, 23 Nov 2015 03:47:15 -0500 Message-ID: <5652D290.8090705@lightnvm.io> Date: Mon, 23 Nov 2015 09:47:12 +0100 From: =?windows-1252?Q?Matias_Bj=F8rling?= User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Wenwei Tao CC: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org Subject: Re: [PATCH] lightnvm: free allocated memory when gennvm register fails References: <1448267375-19009-1-git-send-email-ww.tao0320@gmail.com> In-Reply-To: <1448267375-19009-1-git-send-email-ww.tao0320@gmail.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/23/2015 09:29 AM, Wenwei Tao wrote: > free allocated nvm block and gennvm lun structures when > gennvm register fails, otherwise it will cause memory leak. > > Signed-off-by: Wenwei Tao > --- > drivers/lightnvm/gennvm.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/lightnvm/gennvm.c b/drivers/lightnvm/gennvm.c > index ae1fb2b..03fc7a5 100644 > --- a/drivers/lightnvm/gennvm.c > +++ b/drivers/lightnvm/gennvm.c > @@ -211,12 +211,15 @@ static int gennvm_register(struct nvm_dev *dev) > ret = gennvm_blocks_init(dev, gn); > if (ret) { > pr_err("gennvm: could not initialize blocks\n"); > + gennvm_blocks_free(dev); > + gennvm_luns_free(dev); > goto err; > } > > return 1; > err: > kfree(gn); > + dev->mp = NULL; > return ret; > } > > Thanks Tao, would it be okay with you if I apply the patch like this: diff --git i/drivers/lightnvm/gennvm.c w/drivers/lightnvm/gennvm.c index e20e74e..3969a98 100644 --- i/drivers/lightnvm/gennvm.c +++ w/drivers/lightnvm/gennvm.c @@ -207,6 +207,14 @@ static int gennvm_blocks_init(struct nvm_dev *dev, struct gen_nvm *gn) return 0; } +static void gennvm_free(struct nvm_dev *dev) +{ + gennvm_blocks_free(dev); + gennvm_luns_free(dev); + kfree(dev->mp); + dev->mp = NULL; +} + static int gennvm_register(struct nvm_dev *dev) { struct gen_nvm *gn; @@ -234,16 +242,13 @@ static int gennvm_register(struct nvm_dev *dev) return 1; err: - kfree(gn); + gennvm_free(dev); return ret; } static void gennvm_unregister(struct nvm_dev *dev) { - gennvm_blocks_free(dev); - gennvm_luns_free(dev); - kfree(dev->mp); - dev->mp = NULL; + gennvm_free(dev); }