From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.0 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27D32C2BC0E for ; Thu, 3 Sep 2020 20:04:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0459F20709 for ; Thu, 3 Sep 2020 20:04:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728525AbgICUE0 (ORCPT ); Thu, 3 Sep 2020 16:04:26 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:57742 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727065AbgICUEZ (ORCPT ); Thu, 3 Sep 2020 16:04:25 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: krisman) with ESMTPSA id CD07B29B092 From: Gabriel Krisman Bertazi To: viro@zeniv.linux.org.uk Cc: linux-fsdevel@vger.kernel.org, jack@suse.cz, khazhy@google.com, Gabriel Krisman Bertazi , kernel@collabora.com Subject: [PATCH v2 1/3] direct-io: clean up error paths of do_blockdev_direct_IO Date: Thu, 3 Sep 2020 16:04:12 -0400 Message-Id: <20200903200414.673105-2-krisman@collabora.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200903200414.673105-1-krisman@collabora.com> References: <20200903200414.673105-1-krisman@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org In preparation to resort DIO checks, reduce code duplication of error handling in do_blockdev_direct_IO. Signed-off-by: Gabriel Krisman Bertazi --- fs/direct-io.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/fs/direct-io.c b/fs/direct-io.c index 183299892465..04aae41323d7 100644 --- a/fs/direct-io.c +++ b/fs/direct-io.c @@ -1170,7 +1170,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, blkbits = blksize_bits(bdev_logical_block_size(bdev)); blocksize_mask = (1 << blkbits) - 1; if (align & blocksize_mask) - goto out; + return -EINVAL; } /* watch out for a 0 len io from a tricksy fs */ @@ -1178,9 +1178,8 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, return 0; dio = kmem_cache_alloc(dio_cache, GFP_KERNEL); - retval = -ENOMEM; if (!dio) - goto out; + return -ENOMEM; /* * Believe it or not, zeroing out the page array caused a .5% * performance regression in a database benchmark. So, we take @@ -1199,22 +1198,16 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, retval = filemap_write_and_wait_range(mapping, offset, end - 1); - if (retval) { - inode_unlock(inode); - kmem_cache_free(dio_cache, dio); - goto out; - } + if (retval) + goto fail_dio; } } /* Once we sampled i_size check for reads beyond EOF */ dio->i_size = i_size_read(inode); if (iov_iter_rw(iter) == READ && offset >= dio->i_size) { - if (dio->flags & DIO_LOCKING) - inode_unlock(inode); - kmem_cache_free(dio_cache, dio); retval = 0; - goto out; + goto fail_dio; } /* @@ -1263,8 +1256,7 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, * We grab i_mutex only for reads so we don't have * to release it here */ - kmem_cache_free(dio_cache, dio); - goto out; + goto fail_dio_unlocked; } } @@ -1368,7 +1360,15 @@ do_blockdev_direct_IO(struct kiocb *iocb, struct inode *inode, } else BUG_ON(retval != -EIOCBQUEUED); -out: + return retval; + +fail_dio: + if (dio->flags & DIO_LOCKING) { + inode_unlock(inode); + } +fail_dio_unlocked: + kmem_cache_free(dio_cache, dio); + return retval; } -- 2.28.0