Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967042AbcJFJLh (ORCPT ); Thu, 6 Oct 2016 05:11:37 -0400 Received: from mout.web.de ([212.227.15.3]:50308 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966584AbcJFJKj (ORCPT ); Thu, 6 Oct 2016 05:10:39 -0400 Subject: [PATCH 14/54] md/raid1: Move assignments for the variable "err" in setup_conf() To: linux-raid@vger.kernel.org, Christoph Hellwig , Guoqing Jiang , Jens Axboe , Mike Christie , Neil Brown , Shaohua Li , Tomasz Majchrzak References: <566ABCD9.1060404@users.sourceforge.net> <786843ef-4b6f-eb04-7326-2f6f5b408826@users.sourceforge.net> Cc: LKML , kernel-janitors@vger.kernel.org, Julia Lawall From: SF Markus Elfring Message-ID: <3af74de2-8347-4833-740e-2602f8f0f971@users.sourceforge.net> Date: Thu, 6 Oct 2016 11:10:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <786843ef-4b6f-eb04-7326-2f6f5b408826@users.sourceforge.net> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:LGgLWN9JZMKpcqsEcYT1+HWvbdyVRx/yS9Z5ZSmLikCi9jsxKwD lTQsbtyP1/+155DRdV+dI6g3Qfp82F+Z2O0Q/+C+gzhaSqso8zoSdSRqD+KAarXtdbSanRv KElZ28Q2zJuy9NuDnO90mnDDB9DdS4Uw/vDIWn5HHrfH6xAmlV4P/+kzrvt81W6CBc1xdQL enQAgNoJtgirijpj2BTsA== X-UI-Out-Filterresults: notjunk:1;V01:K0:5iuNBL4ZIlc=:mKUUizk5VAT0C2cz6k8rpY 6dJ5pXS5bwQGsbrjiODNlKXaUxAs65r/UOlHiA8SXLTqgy7TuHhuTEtCYuIwNucoWaAxea2DY uFeSW/u/vB5BqLYTmuVYUf97Rj8Vsv/MemOwfiquZvJLUjeLI5WES7BhXHzBPmd1X4ZsJuRRE MtuejCZ8Rny7NT6IhQu/osxCyC+ehr2Pt44/8mOnzQynopMMPgGocMFDquB4pD8QB2tONwWUD uedGeVkpHzdVBaMRyW0zZo3mKgaU5Dzguz7XOyqsUW6TxJecnZ6rwC2EzCY9o3OVZjF5djcMi 5IJmMdZ9rDKGt0Wt8V38lIR/5buDUi6tQGNEWlzIknTXFYfqFMvf2kxQ/XAkj3tAFshPL536X S03fb2EAQbewcD60Rkjs9iOnPhoiqCQks44RwxKwQ8MPoW7GYtldqSfXH1V/Zxv8Mc6aLIlV0 /VzzHjZPUlOzzM23lCnXvpSPvSbvQiMumZtPQ7THzjsEpC0gyJ/OCfZTYzDalogDUcWEy0h0H KOdOllliEYzCOQce1d5NLakN9B00p6cMRPl+HicB5b8zuKfaGa58zAVnGL2nEQ2nhc16C8NH5 Cj4rvQizy8SRIZVbM9+VIDpu6q9SWZJY1wN9MhKmNAtrQux7WOUc4y0ZJiu4TTB28TZfjtN/K Z3nnYkXB+SQj8NuQEUl1fW6vVAuanJ96X9JkrRYWa6UtzgA6MOpTtTGwTvSMdCLa23BDsdfG4 pSZYrPErfrlprkDWMwJ4D7gKKU3aMxKaY/ijWeX68oonZD5PjXrJieelf6cKFeHVJKXV9y6kT NHPSqYf Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3146 Lines: 120 From: Markus Elfring Date: Tue, 4 Oct 2016 17:34:10 +0200 One local variable was set to an error code in a few cases before a concrete error situation was detected. Thus move the corresponding assignments into if branches to indicate a software failure there. Signed-off-by: Markus Elfring --- drivers/md/raid1.c | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 74346f5..4d2fcbc 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -2775,7 +2775,7 @@ static struct r1conf *setup_conf(struct mddev *mddev) int i; struct raid1_info *disk; struct md_rdev *rdev; - int err = -ENOMEM; + int err; conf = kzalloc(sizeof(struct r1conf), GFP_KERNEL); if (!conf) @@ -2784,26 +2784,33 @@ static struct r1conf *setup_conf(struct mddev *mddev) conf->mirrors = kcalloc(mddev->raid_disks * 2, sizeof(*conf->mirrors), GFP_KERNEL); - if (!conf->mirrors) + if (!conf->mirrors) { + err = -ENOMEM; goto abort; + } conf->tmppage = alloc_page(GFP_KERNEL); - if (!conf->tmppage) + if (!conf->tmppage) { + err = -ENOMEM; goto abort; + } conf->poolinfo = kzalloc(sizeof(*conf->poolinfo), GFP_KERNEL); - if (!conf->poolinfo) + if (!conf->poolinfo) { + err = -ENOMEM; goto abort; + } + conf->poolinfo->raid_disks = mddev->raid_disks * 2; conf->r1bio_pool = mempool_create(NR_RAID1_BIOS, r1bio_pool_alloc, r1bio_pool_free, conf->poolinfo); - if (!conf->r1bio_pool) + if (!conf->r1bio_pool) { + err = -ENOMEM; goto abort; + } conf->poolinfo->mddev = mddev; - - err = -EINVAL; spin_lock_init(&conf->device_lock); rdev_for_each(rdev, mddev) { struct request_queue *q; @@ -2816,8 +2823,11 @@ static struct r1conf *setup_conf(struct mddev *mddev) else disk = conf->mirrors + disk_idx; - if (disk->rdev) + if (disk->rdev) { + err = -EINVAL; goto abort; + } + disk->rdev = rdev; q = bdev_get_queue(rdev->bdev); @@ -2838,8 +2848,6 @@ static struct r1conf *setup_conf(struct mddev *mddev) conf->start_next_window = MaxSector; conf->current_window_requests = conf->next_window_requests = 0; - - err = -EIO; for (i = 0; i < conf->raid_disks * 2; i++) { disk = conf->mirrors + i; @@ -2854,9 +2862,13 @@ static struct r1conf *setup_conf(struct mddev *mddev) disk->rdev = disk[conf->raid_disks].rdev; disk[conf->raid_disks].rdev = NULL; - } else if (!test_bit(In_sync, &disk->rdev->flags)) - /* Original is not in_sync - bad */ - goto abort; + } else { + if (!test_bit(In_sync, &disk->rdev->flags)) { + /* Original is not in_sync - bad */ + err = -EIO; + goto abort; + } + } } if (!disk->rdev || @@ -2868,12 +2880,12 @@ static struct r1conf *setup_conf(struct mddev *mddev) } } - err = -ENOMEM; conf->thread = md_register_thread(raid1d, mddev, "raid1"); if (!conf->thread) { printk(KERN_ERR "md/raid1:%s: couldn't allocate thread\n", mdname(mddev)); + err = -ENOMEM; goto abort; } -- 2.10.1