Received: by 10.192.165.148 with SMTP id m20csp1380811imm; Thu, 10 May 2018 09:48:16 -0700 (PDT) X-Google-Smtp-Source: AB8JxZquamQk8t+7tJXtQRCrhzr4T20ObJINBOaWWs1ufNmFNPU06OSJHdGavxkpBJLko/aavSo0 X-Received: by 2002:a17:902:4203:: with SMTP id g3-v6mr2092914pld.315.1525970896912; Thu, 10 May 2018 09:48:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1525970896; cv=none; d=google.com; s=arc-20160816; b=NqdSAqUojf69akhOg8vv0Ck6DfJ0DpUbEP3Jz9OacAJgabXJMbPQRPXTcXJtzWqwkC EzQzPwPfggonvnWLfXkQYEEo1Hx44djo48VxwcdZ3HByT8qWgWsm+q6zdh1xu5BzOtuC t2r8jZZCC+38JHv8/0fT3Zfszk22uwRFVeODZglhUSOnV1SKOYua3CUCLZq5gsL48RXp DcIt593vshsX9R8zbXOcwoEFAYQlJCa7/cAKYjIeBaip5h4H7mLag0gnlBpEK9N02SnV VOUbXPBfOVkNeVjubbcCYA7dQSKZTIO8N59d1yk+0nnBgFfne8VnbK0GzKpJO5mqpLz1 Ngpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=G7OlkII+Ek5Bvummo9FVxm/tzxqgLYxO2yJzIprKmQE=; b=vbBid37DN9vqBQkWM9e0zJLiBaHKsJyl8rHBOuNhqv97f4SL7Cfk1VBtBwgxuGHcOx jwQBTcrj4kXw+RbyOdZ7bI5A1lIxinU1Zw7Z54NQNuHGbzQh/RCxurScY4rPS71oetsZ 1tUCCCxEv7+ohzKaf7a46NwmCjwyl21X5qXaZKOE2y+WejpK2CVYtGKCsPgf3l/V6WdE Rzqnd2zQHBwy1TOGt+WruESnBB6MjTzLqVH4vn2oAIzhI7LNvwvkFtp8TQ8tHQbdJJxs h1EjYOlhbQAsviU7GpJ662PC6N/AOVcNSW2IZ1HPoK2u3i6g51pCEWKZQO8bBRG3DDAM mlXw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=X//tFyTg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v24-v6si1196561pfj.292.2018.05.10.09.48.01; Thu, 10 May 2018 09:48:16 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=X//tFyTg; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966542AbeEJQrF (ORCPT + 99 others); Thu, 10 May 2018 12:47:05 -0400 Received: from mail-it0-f66.google.com ([209.85.214.66]:40057 "EHLO mail-it0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966305AbeEJQrE (ORCPT ); Thu, 10 May 2018 12:47:04 -0400 Received: by mail-it0-f66.google.com with SMTP id j186-v6so3910839ita.5 for ; Thu, 10 May 2018 09:47:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=G7OlkII+Ek5Bvummo9FVxm/tzxqgLYxO2yJzIprKmQE=; b=X//tFyTgqi85bb+hCcQa7BaAEPw7y/QVdqK/uKms7BemzyBShqIdiFgNUxUyAbVIbV /kT11DkwHFS+o04fW4HSdAKp8zCJkBPCahp5LDdsfa7k/UxxqjH9uVamugFhkiAyPyDl OHcXUvo+qn0jymzX1tlXNIlKnY2G8tbCwP72kr2Dn8s8+rLyxbJRAh1pGeSDhzItd8PE wv6ssfPk/AT722vCrC+T5cq5BnlSh9KbHHn23UnhypA4DhPlCnhQ2KYl5PRYdsJx//Xo l8yTGUTiyCI2pww+GMyUx7vcnaTS1ksp+aNTnuPyHRh6147OIImu1ZzMj4mVmp+ADM+2 BYMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=G7OlkII+Ek5Bvummo9FVxm/tzxqgLYxO2yJzIprKmQE=; b=XN5ZJd87GkWNjD1UlPfQzETmIzeJWp06X1ltr0NF64FILmJER9TqfgQoTPaXFif+0o gei42h/W8PPpiIjuEVJiypXEwssb9Esx5Yh9+QtDAak1B8OJSnh8NsXvHoumjwTti/sy LqiibRakDk4UETk72N6YacCSqoN+bmUpHSR2yLIViXFbkTA0OsF3vuYQj+EwH+07Etf5 zdReBjW0EMhbWFZgxlmYkhzeq961EJhoTXnQhC736MMzMRRL0OiSaN7K22cuTO7iftE1 gde55qjLX3VDXe8Q5OFzvWKEE9jyE/AcYX36fkgWqHnpLdE+Okak6WnJsd8SOYNndpZA qVrg== X-Gm-Message-State: ALKqPwcVWLW7kB0EaOf0T4DiFvCDrPaCb3Oyz6Uz18C4Iygr3+lgt1Vb 17gdxyRs2dkvWgtW/T0Ai2M= X-Received: by 2002:a24:11d1:: with SMTP id 200-v6mr2458368itf.92.1525970823702; Thu, 10 May 2018 09:47:03 -0700 (PDT) Received: from nuclearis2_1.lan (c-98-201-114-184.hsd1.tx.comcast.net. [98.201.114.184]) by smtp.gmail.com with ESMTPSA id g200-v6sm668608itb.26.2018.05.10.09.47.02 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 10 May 2018 09:47:03 -0700 (PDT) From: Alexandru Gagniuc To: linux-nvme@lists.infradead.org Cc: alex_gagniuc@dellteam.com, Austin.Bolen@dell.com, Shyam.Iyer@dell.com, Alexandru Gagniuc , Keith Busch , Jens Axboe , Christoph Hellwig , Sagi Grimberg , linux-kernel@vger.kernel.org Subject: [PATCH] nvme-pci: Avoid use of goto in nvme_reset_work() Date: Thu, 10 May 2018 11:46:33 -0500 Message-Id: <20180510164645.19559-1-mr.nuke.me@gmail.com> X-Mailer: git-send-email 2.14.3 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch started as a challenge from Keith relating to code structuring with goto vs return. I think the final result improves readability on two counts: First, it clarifies the separation between work struct and nvme_dev. Second, it makes it clearer what error is being passed on: 'return -ENODEV' vs 'goto out', where 'result' happens to be -ENODEV CC: Keith Busch Signed-off-by: Alexandru Gagniuc --- drivers/nvme/host/pci.c | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c index fbc71fac6f1e..bac7d30a10a7 100644 --- a/drivers/nvme/host/pci.c +++ b/drivers/nvme/host/pci.c @@ -2286,16 +2286,14 @@ static void nvme_remove_dead_ctrl(struct nvme_dev *dev, int status) nvme_put_ctrl(&dev->ctrl); } -static void nvme_reset_work(struct work_struct *work) +static int do_nvme_reset_work(struct nvme_dev *dev) { - struct nvme_dev *dev = - container_of(work, struct nvme_dev, ctrl.reset_work); bool was_suspend = !!(dev->ctrl.ctrl_config & NVME_CC_SHN_NORMAL); int result = -ENODEV; enum nvme_ctrl_state new_state = NVME_CTRL_LIVE; if (WARN_ON(dev->ctrl.state != NVME_CTRL_RESETTING)) - goto out; + return -ENODEV; /* * If we're called to reset a live controller first shut it down before @@ -2310,30 +2308,30 @@ static void nvme_reset_work(struct work_struct *work) */ if (!nvme_change_ctrl_state(&dev->ctrl, NVME_CTRL_CONNECTING)) { dev_warn(dev->ctrl.device, - "failed to mark controller CONNECTING\n"); - goto out; + "failed to mark controller CONNECTING\n"); + return -ENODEV; } result = nvme_pci_enable(dev); if (result) - goto out; + return result; result = nvme_pci_configure_admin_queue(dev); if (result) - goto out; + return result; result = nvme_alloc_admin_tags(dev); if (result) - goto out; + return result; result = nvme_init_identify(&dev->ctrl); if (result) - goto out; + return result; if (dev->ctrl.oacs & NVME_CTRL_OACS_SEC_SUPP) { if (!dev->ctrl.opal_dev) dev->ctrl.opal_dev = - init_opal_dev(&dev->ctrl, &nvme_sec_submit); + init_opal_dev(&dev->ctrl, &nvme_sec_submit); else if (was_suspend) opal_unlock_from_suspend(dev->ctrl.opal_dev); } else { @@ -2351,12 +2349,12 @@ static void nvme_reset_work(struct work_struct *work) if (dev->ctrl.hmpre) { result = nvme_setup_host_mem(dev); if (result < 0) - goto out; + return result; } result = nvme_setup_io_queues(dev); if (result) - goto out; + return result; /* * Keep the controller around but remove all namespaces if we don't have @@ -2382,15 +2380,23 @@ static void nvme_reset_work(struct work_struct *work) */ if (!nvme_change_ctrl_state(&dev->ctrl, new_state)) { dev_warn(dev->ctrl.device, - "failed to mark controller state %d\n", new_state); - goto out; + "failed to mark controller state %d\n", new_state); + return 0; } nvme_start_ctrl(&dev->ctrl); - return; + return 0; + +} +static void nvme_reset_work(struct work_struct *work) +{ + struct nvme_dev *dev = + container_of(work, struct nvme_dev, ctrl.reset_work); + int result; - out: - nvme_remove_dead_ctrl(dev, result); + result = do_nvme_reset_work(dev); + if (result < 0) + nvme_remove_dead_ctrl(dev, result); } static void nvme_remove_dead_ctrl_work(struct work_struct *work) -- 2.14.3