From patchwork Tue Nov 7 16:53:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SF Markus Elfring X-Patchwork-Id: 10047011 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id D66C76032D for ; Tue, 7 Nov 2017 16:53:21 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C6194291F8 for ; Tue, 7 Nov 2017 16:53:21 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id BB20E2A30F; Tue, 7 Nov 2017 16:53:21 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5820F2A313 for ; Tue, 7 Nov 2017 16:53:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752621AbdKGQxT (ORCPT ); Tue, 7 Nov 2017 11:53:19 -0500 Received: from mout.web.de ([212.227.15.14]:54877 "EHLO mout.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751580AbdKGQxT (ORCPT ); Tue, 7 Nov 2017 11:53:19 -0500 Received: from [192.168.1.3] ([78.49.204.22]) by smtp.web.de (mrweb001 [213.165.67.108]) with ESMTPSA (Nemesis) id 0MGzFy-1ePqcf0H7y-00Dmw8; Tue, 07 Nov 2017 17:53:11 +0100 To: linux-nfs@vger.kernel.org, Anna Schumaker , Trond Myklebust Cc: LKML , kernel-janitors@vger.kernel.org From: SF Markus Elfring Subject: [PATCH RFC v1] nfs/write: Use common error handling code in nfs_lock_and_join_requests() Message-ID: <7f072f78-eef4-6d87-d233-cee71dac5a32@users.sourceforge.net> Date: Tue, 7 Nov 2017 17:53:10 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 Content-Language: en-GB X-Provags-ID: V03:K0:gE97NCIK8aS+SlKH/pa4UhbaIoeRYynbcdvH1EJjI9lWxAG0DU1 DclCaIv4VYlPF7w0pR+VmgSYfTIuFFs3mw2vpSSqN+8Hz/T7/dpu05FTHrMbO6xNJECqrGX jGzyDRqFmT5V9eVISo2sMD+MmKxPAo2Tlbv7RYPWghN58Zt3lGgccHuCwJY9xNLKj9Hhhsv t7lsbdSPfn0AKR9vKfImw== X-UI-Out-Filterresults: notjunk:1; V01:K0:U3nMqKfUYvo=:D0cRdYiAAGXOrKHdzdDF6J v5F5VzAdUXF9QXwbi7hWujvKXTLY5YKAtmwtjNCx5np4qw/IIZaNF9vRLcpOmWpDdyuYOUj4X 8h946csa96aAaNiwolGELjZXPaG3sXguipayQxYDIhzKfzp/vmG4thwF0bp2e+O2IgSaUmwTb U/cC6ploF9/kLbLqiTaFNfeXWscnvpjoiO6saSe+HTi0nV0fLPcsgR7H+G9wOVeAzuChQfxXL YSHgL1eIhO4bnhKA6heLJiVtTeWLeFG6pttvHH2QN/Se4QkKDXT6UiWZeNWocRrBk5OIw7l5f N2Ue0TV1DciHHwaC0qjuUEhEdDLLtjh18zhXUxyDhQIsSzS7qc+W1gEONgPEr2LHGTH0B6DZX F6qb+eZFgMJ1Mz2O3nP5XIPw1a+McQu2nY7eqEYUKFjfOHxgiKo6iacgnzSEor0uJtmgt8+l2 VYnBJGTLnhyFuOWO5Fq0FEVp/N8k9nzNI7sx2PRKo2tYBLkKX34QvQefiAN1g1v/pneKybwJA kV1uT58FH/4pemfKRMcaJBW/p5IGV4HIzVeenoBpSO4aICa7vwccGXqK9m4FFK/8178WkL2Wt FGn5lut/P7RLexRcf/ET3PZP7J6KBLHfwAhDZ5vGyUFHv51xJoT2KZKWlL4/ed8MAITJFjcyr KnkPkormYe5q3nUO6ahJHxw/+3ORl0sVZFruyY/68h+6VwRa8WNad7E3UQsJA+o3dCssMUK6D JS6c4LxJZyWOBAw+oArXQEhyfLDmGKCZc7hVNfk83xJGRUb/ZKRsGO+Oy2ZHVtN09+c5KTphn rLskKCn1PIM7h0PYvNbvmyeF0K+sL/pEMv13SZp1V+1/zcQwVU= Sender: linux-nfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-nfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Markus Elfring Date: Tue, 7 Nov 2017 08:51:00 +0100 Add a jump target so that a bit of exception handling can be better reused at the end of this function. This issue was detected by using the Coccinelle software. Signed-off-by: Markus Elfring --- v1 - Request for comments: I can offer another bit of information for a software development discussion. diff --git a/fs/nfs/write.c b/fs/nfs/write.c index babebbccae2a..5b5f464f6f2a 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -487,10 +487,8 @@ nfs_lock_and_join_requests(struct page *page) } ret = nfs_page_group_lock(head); - if (ret < 0) { - nfs_unlock_and_release_request(head); - return ERR_PTR(ret); - } + if (ret < 0) + goto release_request; /* lock each request in the page group */ total_bytes = head->wb_bytes; @@ -515,8 +513,7 @@ nfs_lock_and_join_requests(struct page *page) if (ret < 0) { nfs_unroll_locks(inode, head, subreq); nfs_release_request(subreq); - nfs_unlock_and_release_request(head); - return ERR_PTR(ret); + goto release_request; } } /* @@ -532,8 +529,8 @@ nfs_lock_and_join_requests(struct page *page) nfs_page_group_unlock(head); nfs_unroll_locks(inode, head, subreq); nfs_unlock_and_release_request(subreq); - nfs_unlock_and_release_request(head); - return ERR_PTR(-EIO); + ret = -EIO; + goto release_request; } } @@ -576,6 +573,10 @@ nfs_lock_and_join_requests(struct page *page) /* still holds ref on head from nfs_page_find_head_request * and still has lock on head from lock loop */ return head; + +release_request: + nfs_unlock_and_release_request(head); + return ERR_PTR(ret); } static void nfs_write_error_remove_page(struct nfs_page *req)