From patchwork Tue May 28 20:00:20 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Balandin X-Patchwork-Id: 247141 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id C97492C0345 for ; Wed, 29 May 2013 17:38:22 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964829Ab3E2Hh7 (ORCPT ); Wed, 29 May 2013 03:37:59 -0400 Received: from mail-lb0-f175.google.com ([209.85.217.175]:61219 "EHLO mail-lb0-f175.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S935097Ab3E2Hh6 (ORCPT ); Wed, 29 May 2013 03:37:58 -0400 Received: by mail-lb0-f175.google.com with SMTP id v10so8508222lbd.6 for ; Wed, 29 May 2013 00:37:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer; bh=1U9+0AsXFer5zPahv1ST9yx7QW/msZLd5SXc4n2oMLU=; b=nQrqGH79wwseqCd262KvebzuFwNH/vlXg6CZfVALVVth/4DyUGzZIDM7iifSs6StsU 9PyFBNZrxegldpiE+QVJBtW1b9lBkeOc4XmcR0UCPKwvlX7kUvUA7AY3TJJrlMXPRiRt GiN/q1xtQWbvXviUdmWwS2gER9mjSpLesIdX5cJY3HjduqKpY5y5Wx1zPi7sTuFnFIOg JzuRqnDL2+yvRo1FyNB7C6OzTXJ2y9TuTHR0mZUeyj5qMtAdld5Pa5WeVlNzQRsWJ1nU /4t8CPfNI++nhWR45RCZdnx4hDsFwpM1M3XGbRGadfzqFxPcbkb3kQJfKVUlp/aoDbVv FitA== X-Received: by 10.152.27.8 with SMTP id p8mr714220lag.19.1369813076158; Wed, 29 May 2013 00:37:56 -0700 (PDT) Received: from localhost.localdomain (ppp91-76-144-117.pppoe.mtu-net.ru. [91.76.144.117]) by mx.google.com with ESMTPSA id 9sm14532317lbz.16.2013.05.29.00.37.54 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Wed, 29 May 2013 00:37:55 -0700 (PDT) From: Nikolay Balandin To: Wolfram Sang , Greg Kroah-Hartman , Bill Pemberton , Jingoo Han , Alexandre Pereira da Silva , Andy Shevchenko Cc: Nikolay Balandin , linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/2] drivers/misc: at24: convert to use devm_kzalloc Date: Tue, 28 May 2013 13:00:20 -0700 Message-Id: <1369771220-5492-1-git-send-email-n.a.balandin@gmail.com> X-Mailer: git-send-email 1.7.9.5 Sender: linux-i2c-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-i2c@vger.kernel.org From: Nikolay Balandin Use devm_kzalloc to make cleanup paths simpler Signed-off-by: Nikolay Balandin Reviewed-by: Jingoo Han Reviewed-by: Andy Shevchenko --- drivers/misc/eeprom/at24.c | 44 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 29 deletions(-) diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c index 2baeec5..5d4fd69 100644 --- a/drivers/misc/eeprom/at24.c +++ b/drivers/misc/eeprom/at24.c @@ -492,10 +492,9 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) if (client->dev.platform_data) { chip = *(struct at24_platform_data *)client->dev.platform_data; } else { - if (!id->driver_data) { - err = -ENODEV; - goto err_out; - } + if (!id->driver_data) + return -ENODEV; + magic = id->driver_data; chip.byte_len = BIT(magic & AT24_BITMASK(AT24_SIZE_BYTELEN)); magic >>= AT24_SIZE_BYTELEN; @@ -519,8 +518,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) "byte_len looks suspicious (no power of 2)!\n"); if (!chip.page_size) { dev_err(&client->dev, "page_size must not be 0!\n"); - err = -EINVAL; - goto err_out; + return -EINVAL; } if (!is_power_of_2(chip.page_size)) dev_warn(&client->dev, @@ -528,10 +526,9 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) /* Use I2C operations unless we're stuck with SMBus extensions. */ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { - if (chip.flags & AT24_FLAG_ADDR16) { - err = -EPFNOSUPPORT; - goto err_out; - } + if (chip.flags & AT24_FLAG_ADDR16) + return -EPFNOSUPPORT; + if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_READ_I2C_BLOCK)) { use_smbus = I2C_SMBUS_I2C_BLOCK_DATA; @@ -542,8 +539,7 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) I2C_FUNC_SMBUS_READ_BYTE_DATA)) { use_smbus = I2C_SMBUS_BYTE_DATA; } else { - err = -EPFNOSUPPORT; - goto err_out; + return -EPFNOSUPPORT; } } @@ -553,12 +549,10 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) num_addresses = DIV_ROUND_UP(chip.byte_len, (chip.flags & AT24_FLAG_ADDR16) ? 65536 : 256); - at24 = kzalloc(sizeof(struct at24_data) + + at24 = devm_kzalloc(&client->dev, sizeof(struct at24_data) + num_addresses * sizeof(struct i2c_client *), GFP_KERNEL); - if (!at24) { - err = -ENOMEM; - goto err_out; - } + if (!at24) + return -ENOMEM; mutex_init(&at24->lock); at24->use_smbus = use_smbus; @@ -596,11 +590,10 @@ static int at24_probe(struct i2c_client *client, const struct i2c_device_id *id) at24->write_max = write_max; /* buffer (data + address at the beginning) */ - at24->writebuf = kmalloc(write_max + 2, GFP_KERNEL); - if (!at24->writebuf) { - err = -ENOMEM; - goto err_struct; - } + at24->writebuf = devm_kzalloc(&client->dev, + write_max + 2, GFP_KERNEL); + if (!at24->writebuf) + return -ENOMEM; } else { dev_warn(&client->dev, "cannot write due to controller restrictions."); @@ -648,11 +641,6 @@ err_clients: if (at24->client[i]) i2c_unregister_device(at24->client[i]); - kfree(at24->writebuf); -err_struct: - kfree(at24); -err_out: - dev_dbg(&client->dev, "probe error %d\n", err); return err; } @@ -667,8 +655,6 @@ static int at24_remove(struct i2c_client *client) for (i = 1; i < at24->num_addresses; i++) i2c_unregister_device(at24->client[i]); - kfree(at24->writebuf); - kfree(at24); return 0; }