From: SF Markus Elfring <elfring@users.sourceforge.net> To: linux-nfs@vger.kernel.org, Anna Schumaker <anna.schumaker@netapp.com>, Trond Myklebust <trond.myklebust@primarydata.com> Cc: LKML <linux-kernel@vger.kernel.org>, kernel-janitors@vger.kernel.org Subject: [PATCH RFC v1] nfs/write: Use common error handling code in nfs_lock_and_join_requests() Date: Tue, 7 Nov 2017 17:53:10 +0100 [thread overview] Message-ID: <7f072f78-eef4-6d87-d233-cee71dac5a32@users.sourceforge.net> (raw) From: Markus Elfring <elfring@users.sourceforge.net> 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 <elfring@users.sourceforge.net> --- v1 - Request for comments: I can offer another bit of information for a software development discussion. 💭 The affected source file can be compiled for the processor architecture “x86_64” by a tool like “GCC 6.4.1+r251631-1.3” from the software distribution “openSUSE Tumbleweed” with the following command example. my_cc=/usr/bin/gcc-6 \ && my_module=fs/nfs/write.o \ && for XYZ in 0 s 3; do echo " _____ $XYZ _____" \ && my_extra="-O$XYZ" \ && git checkout next-20171102 \ && make -j4 CC="${my_cc}" HOSTCC="${my_cc}" EXTRA_CFLAGS="${my_extra}" allmodconfig "${my_module}" \ && size "${my_module}" \ && git checkout ':/^nfs/write: Use common error handling code in nfs_lock_and_join_requests' \ && make -j4 CC="${my_cc}" HOSTCC="${my_cc}" EXTRA_CFLAGS="${my_extra}" allmodconfig "${my_module}" \ && size "${my_module}"; done 🔮 Do you find the following differences worth for further clarification? ╔═════════╤══════╗ ║ setting │ text ║ ╠═════════╪══════╣ ║ O0 │ ??? ║ Compilation failure? ║ Os │ -17 ║ ║ O3 │ -16 ║ ╚═════════╧══════╝ fs/nfs/write.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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) -- 2.15.0
WARNING: multiple messages have this Message-ID (diff)
From: SF Markus Elfring <elfring@users.sourceforge.net> To: linux-nfs@vger.kernel.org, Anna Schumaker <anna.schumaker@netapp.com>, Trond Myklebust <trond.myklebust@primarydata.com> Cc: LKML <linux-kernel@vger.kernel.org>, kernel-janitors@vger.kernel.org Subject: [PATCH RFC v1] nfs/write: Use common error handling code in nfs_lock_and_join_requests() Date: Tue, 07 Nov 2017 16:53:10 +0000 [thread overview] Message-ID: <7f072f78-eef4-6d87-d233-cee71dac5a32@users.sourceforge.net> (raw) From: Markus Elfring <elfring@users.sourceforge.net> 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 <elfring@users.sourceforge.net> --- v1 - Request for comments: I can offer another bit of information for a software development discussion. 💭 The affected source file can be compiled for the processor architecture “x86_64” by a tool like “GCC 6.4.1+r251631-1.3” from the software distribution “openSUSE Tumbleweed” with the following command example. my_cc=/usr/bin/gcc-6 \ && my_module=fs/nfs/write.o \ && for XYZ in 0 s 3; do echo " _____ $XYZ _____" \ && my_extra="-O$XYZ" \ && git checkout next-20171102 \ && make -j4 CC="${my_cc}" HOSTCC="${my_cc}" EXTRA_CFLAGS="${my_extra}" allmodconfig "${my_module}" \ && size "${my_module}" \ && git checkout ':/^nfs/write: Use common error handling code in nfs_lock_and_join_requests' \ && make -j4 CC="${my_cc}" HOSTCC="${my_cc}" EXTRA_CFLAGS="${my_extra}" allmodconfig "${my_module}" \ && size "${my_module}"; done 🔮 Do you find the following differences worth for further clarification? ╔═════════╤══════╗ ║ setting │ text ║ ╠═════════╪══════╣ ║ O0 │ ??? ║ Compilation failure? ║ Os │ -17 ║ ║ O3 │ -16 ║ ╚═════════╧══════╝ fs/nfs/write.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) 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) -- 2.15.0 -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
next reply other threads:[~2017-11-07 16:53 UTC|newest] Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-11-07 16:53 SF Markus Elfring [this message] 2017-11-07 16:53 ` [PATCH RFC v1] nfs/write: Use common error handling code in nfs_lock_and_join_requests() SF Markus Elfring 2017-12-03 14:15 ` Difficulties for compilation without extra optimisation SF Markus Elfring 2017-12-03 14:15 ` [Linux-kselftest-mirror] " SF Markus Elfring 2017-12-03 14:15 ` elfring 2017-12-03 14:15 ` SF Markus Elfring 2017-12-03 15:17 ` Trond Myklebust 2017-12-03 15:17 ` [Linux-kselftest-mirror] " Trond Myklebust 2017-12-03 15:17 ` trondmy 2017-12-03 15:17 ` Trond Myklebust 2017-12-03 15:17 ` Trond Myklebust 2017-12-03 21:22 ` Steven Rostedt 2017-12-03 21:22 ` [Linux-kselftest-mirror] " Steven Rostedt 2017-12-03 21:22 ` rostedt 2017-12-03 21:22 ` Steven Rostedt 2017-12-03 21:56 ` SF Markus Elfring 2017-12-03 21:56 ` [Linux-kselftest-mirror] " SF Markus Elfring 2017-12-03 21:56 ` elfring 2017-12-03 21:56 ` SF Markus Elfring 2017-12-04 2:40 ` Steven Rostedt 2017-12-04 2:40 ` [Linux-kselftest-mirror] " Steven Rostedt 2017-12-04 2:40 ` rostedt 2017-12-04 2:40 ` Steven Rostedt 2017-12-04 9:55 ` SF Markus Elfring 2017-12-04 9:55 ` [Linux-kselftest-mirror] " SF Markus Elfring 2017-12-04 9:55 ` elfring 2017-12-04 9:55 ` SF Markus Elfring 2017-12-04 9:00 ` SF Markus Elfring 2017-12-04 9:00 ` [Linux-kselftest-mirror] " SF Markus Elfring 2017-12-04 9:00 ` elfring 2017-12-04 9:00 ` SF Markus Elfring 2017-12-04 9:48 ` Steven Rostedt 2017-12-04 9:48 ` [Linux-kselftest-mirror] " Steven Rostedt 2017-12-04 9:48 ` rostedt 2017-12-04 9:48 ` Steven Rostedt 2017-12-04 10:18 ` SF Markus Elfring 2017-12-04 10:18 ` [Linux-kselftest-mirror] " SF Markus Elfring 2017-12-04 10:18 ` elfring 2017-12-04 10:18 ` SF Markus Elfring
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=7f072f78-eef4-6d87-d233-cee71dac5a32@users.sourceforge.net \ --to=elfring@users.sourceforge.net \ --cc=anna.schumaker@netapp.com \ --cc=kernel-janitors@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nfs@vger.kernel.org \ --cc=trond.myklebust@primarydata.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.