From patchwork Fri May 19 09:35:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13248027 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id A1780C7EE26 for ; Fri, 19 May 2023 09:36:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 25943280009; Fri, 19 May 2023 05:36:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1BB6B280001; Fri, 19 May 2023 05:36:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 00CB5280009; Fri, 19 May 2023 05:36:11 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id DD341280001 for ; Fri, 19 May 2023 05:36:11 -0400 (EDT) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id AEB0F1A0A01 for ; Fri, 19 May 2023 09:36:11 +0000 (UTC) X-FDA: 80806498542.13.8FD0C08 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf20.hostedemail.com (Postfix) with ESMTP id 0DE601C0017 for ; Fri, 19 May 2023 09:36:09 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b="pQ7KSa/8"; dmarc=none; spf=none (imf20.hostedemail.com: domain of BATV+aecf67361b95543ec79f+7208+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+aecf67361b95543ec79f+7208+infradead.org+hch@bombadil.srs.infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684488970; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=g0XZ1SdajcGpQ1AF9r9lkRdRsXz7pcMVrMTOSW6r8Eo=; b=7Q3hlma6+6eSFASAl9ZoO7+zsxwkJ0cNXbpfeDs2cvhe/gmXHifsfeUWEbeTkQ/IqlE01W 115O288ORXKGKC9TMWNBSxMEi6qVkLoHlFSioLITSCpXO1q8QV2feTsRoVmROhCJZXlwHA PucZNim3mUtDjA+//yBwtI/psoDSGzw= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b="pQ7KSa/8"; dmarc=none; spf=none (imf20.hostedemail.com: domain of BATV+aecf67361b95543ec79f+7208+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+aecf67361b95543ec79f+7208+infradead.org+hch@bombadil.srs.infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684488970; a=rsa-sha256; cv=none; b=L7USJvA+1pIVRzlfFNBnhQNVch7Bb0fJLl/DyRGKqpCUxZTQuADfGCsMiKQ/jb23igxKSY 2tNWCe5SR+gceGg49yvuobcPWDzowaWx7X3p+zWnQ/epFA4B4XoBmQHEBEsUS/j6verHBe yxs8vukfpKkKiOxiYyYHkVANdZAPPkk= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender :Reply-To:Content-Type:Content-ID:Content-Description; bh=g0XZ1SdajcGpQ1AF9r9lkRdRsXz7pcMVrMTOSW6r8Eo=; b=pQ7KSa/86Q7HW7fROWUx7jCR6O 5XFMJ9iXKvcRSF09WDb7T2Oe4gvkeIhaNzzaxy6czyIFHufAKCGsQQXKPj6V3g2+Yh3xCdmhw8Yem xgj5RovMsJ5sb9CwXmpuBgGG47h6W14hgsw8meXVfD8srvupuYd1wrBTP29pKyg4C/aN3aYMDx30V 3F+s9l05Pu0Nj8l8G8vVeSaGYZTNPRkhzs8LqCoRz22GQLqjxNh8lLcb8lcq9x99NvHbkhc0/jELZ O9XVqtERlrKY6QQYh73k45QPJOqZSIliql+BFfuGqGfwEgWEqLQweYUs7+GB+p22ORdFXz0Af4uz4 UCA5bGHA==; Received: from [2001:4bb8:188:3dd5:e8d0:68bb:e5be:210a] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pzwWc-00Fjh6-1P; Fri, 19 May 2023 09:35:50 +0000 From: Christoph Hellwig To: Matthew Wilcox Cc: Jens Axboe , Xiubo Li , Ilya Dryomov , Alexander Viro , Christian Brauner , "Theodore Ts'o" , Jaegeuk Kim , Chao Yu , Miklos Szeredi , Andreas Gruenbacher , "Darrick J. Wong" , Trond Myklebust , Anna Schumaker , Damien Le Moal , Andrew Morton , linux-block@vger.kernel.org, ceph-devel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-ext4@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net (open list:F2FS FILE SYSTEM), cluster-devel@redhat.com, linux-xfs@vger.kernel.org, linux-nfs@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH 09/13] iomap: use kiocb_write_and_wait and kiocb_invalidate_pages Date: Fri, 19 May 2023 11:35:17 +0200 Message-Id: <20230519093521.133226-10-hch@lst.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230519093521.133226-1-hch@lst.de> References: <20230519093521.133226-1-hch@lst.de> MIME-Version: 1.0 X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 0DE601C0017 X-Stat-Signature: q5r5186ttctmwgd1es3jmedsx6dpgotn X-Rspam-User: X-HE-Tag: 1684488969-815320 X-HE-Meta: U2FsdGVkX19QTatAvA4e1z5Nm3cZncK1V5GMV+hEMhJpwqx9idBqYse1Vn3jdGfcmxNAB+m8iBomwmgSnNfTM/eGSrn54HR3vtaADM8mPowlxgrpEPlKRpoEMYzgANZWYhm8Eb/40vAVzmZyvXd7NonNIXKxMt2y6OwRjg8RslfjB1d7PP6YmatCoVk0vXAXUauX/3grg5q3dfFkyw7kHtBokRj9KB9dYlw0G5qS226725jf3IE/7rOMgHYYKpizgk7meyYBAd7l1t1GymbfjjUMAdiJRqztNHmMlnMO7eO44qhZn1Bh7RG9Z0jmm+x/WCcCXtvA1TMNU775urDnUjlTLjILCkvjhqqDXJlx1nL5GpqZasyxomQqDR9JSwAPDwGHPfU5htCDoKC+IQ8TTXp32SYhv5/TWttUq1/nfrsPFrnqKmm5P5X9qQ/akRruFtUfyK52iDVT903n65yn3KeD7B4WN4qyDHyzHZjHXOZmomyukWpbhTEiWD0Ml0WMuy9ZmG9M+DPgBdTGuZSu7XLbOfSMcEAFbG5EaG04NM4edfwVtfK/N7O+D5ugOvSnXo+gRtsaF3l21Hl4LSPtyAA3a1LQb+g1UVyyBL98wsaNE3CmS1xYP5qoD/2UyrJMFRozWeEahfe3FrGyjKOZ4PHmLhqnFuSR66Jyfsd1/BbSh3icUvwhjv7siQzAIthE/JB7PanjdMSwTV9P9oNtW16IBAsMRPjxjyEN7ESgF8mDpbXrg0+3Z+gHP8O6O2QwNHfiSAZRHpuZV67ML8UXPa9yNTbEVyhudcahV/xLpUQvM0p3xZf/D5furEtef9hLy7r1eopVC5i1WuISE6ECUZPCzdmfNewzqaNT9XAOAxoa5HIsWMzkuQXwjconCKvUJ6a4K0t40haLIJ7QQx7lYQevfC0wYhBqtGEREI8YXziEYInLBM35mN+6yzV9YpAuB5K4gPqB/2H5pclVfSe vCAiAScB zpy/K+/CrnWAIQn04N9pZPaW5lD2TE72QDzQ4JeXkTT9td56eQO1vPLILUJhT+grQOW4eZ5CVoDOxIe7g5h+Z4VGZCYDAoE6ErZy7X3ufA4fnDFNaF9EchM+buj/5DPiAaU0Emo4tkGnwtU3PS/YlMvLuufs0zDh6d9xk9wAfTrVEbfGbgT+SYbTOHwKxyNx9nbV9azea1x2dldQpZ8ISLrQfrY7TvAOd5jmvE+Frz1azQtgy6we746x6wVAl6LOMtbJhPIMfll+mOea4m03ZmSf7QEguLELEWReyUhCulH2g8jsXpZTLR5sYdC4jdpOOMMydqSpRooJ4JCW5dV/g7L1+rgb5eERRMIgDynz13exl5EZKhdmjCBnbDI+b7euRmSvX3HuiXv1Dmpa9YqwYjoMlTjYUpbQwwsB9ykmR+Vows3wF8uqTQ5fIHBSKCjno4ZKaDNjIvX2beTRk976A24+FXw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Use the common helpers for direct I/O page invalidation instead of open coding the logic. This leads to a slight reordering of checks in __iomap_dio_rw to keep the logic straight. Signed-off-by: Christoph Hellwig Reviewed-by: Damien Le Moal --- fs/iomap/direct-io.c | 55 ++++++++++++++++---------------------------- 1 file changed, 20 insertions(+), 35 deletions(-) diff --git a/fs/iomap/direct-io.c b/fs/iomap/direct-io.c index 45accd98344e79..ccf51d57619721 100644 --- a/fs/iomap/direct-io.c +++ b/fs/iomap/direct-io.c @@ -472,7 +472,6 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, const struct iomap_ops *ops, const struct iomap_dio_ops *dops, unsigned int dio_flags, void *private, size_t done_before) { - struct address_space *mapping = iocb->ki_filp->f_mapping; struct inode *inode = file_inode(iocb->ki_filp); struct iomap_iter iomi = { .inode = inode, @@ -481,11 +480,11 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, .flags = IOMAP_DIRECT, .private = private, }; - loff_t end = iomi.pos + iomi.len - 1, ret = 0; bool wait_for_completion = is_sync_kiocb(iocb) || (dio_flags & IOMAP_DIO_FORCE_WAIT); struct blk_plug plug; struct iomap_dio *dio; + loff_t ret = 0; trace_iomap_dio_rw_begin(iocb, iter, dio_flags, done_before); @@ -509,31 +508,29 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, dio->submit.waiter = current; dio->submit.poll_bio = NULL; + if (iocb->ki_flags & IOCB_NOWAIT) + iomi.flags |= IOMAP_NOWAIT; + if (iov_iter_rw(iter) == READ) { if (iomi.pos >= dio->i_size) goto out_free_dio; - if (iocb->ki_flags & IOCB_NOWAIT) { - if (filemap_range_needs_writeback(mapping, iomi.pos, - end)) { - ret = -EAGAIN; - goto out_free_dio; - } - iomi.flags |= IOMAP_NOWAIT; - } - if (user_backed_iter(iter)) dio->flags |= IOMAP_DIO_DIRTY; + + ret = kiocb_write_and_wait(iocb, iomi.len); + if (ret) + goto out_free_dio; } else { iomi.flags |= IOMAP_WRITE; dio->flags |= IOMAP_DIO_WRITE; - if (iocb->ki_flags & IOCB_NOWAIT) { - if (filemap_range_has_page(mapping, iomi.pos, end)) { - ret = -EAGAIN; + if (dio_flags & IOMAP_DIO_OVERWRITE_ONLY) { + ret = -EAGAIN; + if (iomi.pos >= dio->i_size || + iomi.pos + iomi.len > dio->i_size) goto out_free_dio; - } - iomi.flags |= IOMAP_NOWAIT; + iomi.flags |= IOMAP_OVERWRITE_ONLY; } /* for data sync or sync, we need sync completion processing */ @@ -549,31 +546,19 @@ __iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter, if (!(iocb->ki_flags & IOCB_SYNC)) dio->flags |= IOMAP_DIO_WRITE_FUA; } - } - - if (dio_flags & IOMAP_DIO_OVERWRITE_ONLY) { - ret = -EAGAIN; - if (iomi.pos >= dio->i_size || - iomi.pos + iomi.len > dio->i_size) - goto out_free_dio; - iomi.flags |= IOMAP_OVERWRITE_ONLY; - } - ret = filemap_write_and_wait_range(mapping, iomi.pos, end); - if (ret) - goto out_free_dio; - - if (iov_iter_rw(iter) == WRITE) { /* * Try to invalidate cache pages for the range we are writing. * If this invalidation fails, let the caller fall back to * buffered I/O. */ - if (invalidate_inode_pages2_range(mapping, - iomi.pos >> PAGE_SHIFT, end >> PAGE_SHIFT)) { - trace_iomap_dio_invalidate_fail(inode, iomi.pos, - iomi.len); - ret = -ENOTBLK; + ret = kiocb_invalidate_pages(iocb, iomi.len); + if (ret) { + if (ret != -EAGAIN) { + trace_iomap_dio_invalidate_fail(inode, iomi.pos, + iomi.len); + ret = -ENOTBLK; + } goto out_free_dio; }