From patchwork Tue Aug 1 17:22:00 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 129430 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:918b:0:b0:3e4:2afc:c1 with SMTP id s11csp2873595vqg; Tue, 1 Aug 2023 12:05:03 -0700 (PDT) X-Google-Smtp-Source: APBJJlHgYxTvIMK+VMVZss5SEso+VPkmj6MP9hB469US2nhqYpL7XcxB7P/A37Rn86RnCjBChuuU X-Received: by 2002:a17:907:b0b:b0:98d:fc51:b3dd with SMTP id h11-20020a1709070b0b00b0098dfc51b3ddmr3058748ejl.41.1690916703421; Tue, 01 Aug 2023 12:05:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690916703; cv=none; d=google.com; s=arc-20160816; b=K3eTV+uHNym3ROee3U1ItKC2Sdka5YcLzl2G0WleXDuPR15KaAMT+lPylBCMSF/IpX tJ0FxoS/QqliC+j+leF902dG/fi4F9nWJlPTJDsw8dDsIXJZovVHpeeZdfe1Rr8ClEsi /2Tiy0xG9bJZslTyJu1iggRRayZiBjD/2WP52QG0d/I+YMfvVHo+lvHPbMtnOL0TpK+2 XZlkbxgRKUgRmYcI/85lodRMUkOf+WUsL4Up5LkIR6zSgFT6UUJtah1GgjVnq5uL/DjX qfYWztZam9+28mPzBTLHdseotDVxkIJL74dshv9s56H9WW/ZdTbSPycwXgA9UcljNuGP VN/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=JTr82y7UepXdHwELYFWesdOCibavx/BJhsA/0AIsVvc=; fh=Q+EU1nu9FtRrKohc6QgSx1qCAJR7EJmeZ0nKbP/vuYg=; b=oYI6FiNMI6IWUx8EypPOT1kP0KL4RBa71XkFM8Dc7uaVHMGr+8ibKYjmM2xHXPTzKG JvHJQBokzF6HzNtX1UM6v1xAbNmU7GeMzozhmHHXc5x+1rtoUD5rB2tUMsPHXg/An+xI 3KpnUdt1CFCSpplbZOejZXGsiGqdLxLo0uTvyXQflgAfRQwyKv3A91Q4AAQzg2EJ/gmQ JwPY8hYml3Z1hc4O/IZknpVaLMxOvMXjPxcDOhJO7Y0yGXhMk4yevZT5BolNwhmR5bV6 FaWdDmqPDkNNP28vYJI05eaEeWmq/zzs0kCcJ31XKrVMqFzynKesEHstayTvCcew+v8e XCOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=nRUkF8mf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id cf15-20020a170906b2cf00b0099bc9254c6asi9130103ejb.903.2023.08.01.12.04.32; Tue, 01 Aug 2023 12:05:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@infradead.org header.s=bombadil.20210309 header.b=nRUkF8mf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231592AbjHARWy (ORCPT + 99 others); Tue, 1 Aug 2023 13:22:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60758 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234659AbjHARWg (ORCPT ); Tue, 1 Aug 2023 13:22:36 -0400 Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:3::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD183213C; Tue, 1 Aug 2023 10:22:27 -0700 (PDT) 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=JTr82y7UepXdHwELYFWesdOCibavx/BJhsA/0AIsVvc=; b=nRUkF8mfVPyzwn/m0kchVzdKLm 5v0iKM5U7Yxj1ykRYnyMTzxlNAyhVEMt5WKJyKGDO1xPVHDPVm0cN6UL9wSrv+Nq6nS9baElkX9Og PkWAGXgjXgMe9lsPDINkwlLDwpbQ+zrLfZ/cYC8RARePfqE5vFG2AEdi6ssi8M/scyuey/S7j5IG6 Sqcd5IhmhBMS6LcLKhiDoEjlx9V0MJtU020zEAQxnJN/uwL44fU2n+BXqdzLPLHOdx2BU2nKgfEsd O/COL+ltBjb+S4DHd4cTMhmEesg1Iy80MbD8S5E26vTY8nvboIZiZk1RZNb7QCFgx/BCVWlriJflY ggon/cpw==; Received: from 2a02-8389-2341-5b80-39d3-4735-9a3c-88d8.cable.dynamic.v6.surfer.at ([2a02:8389:2341:5b80:39d3:4735:9a3c:88d8] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1qQt4h-002uYq-0B; Tue, 01 Aug 2023 17:22:23 +0000 From: Christoph Hellwig To: Jens Axboe Cc: "Darrick J. Wong" , Andrew Morton , Matthew Wilcox , Christian Brauner , linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Luis Chamberlain , Pankaj Raghav , Hannes Reinecke Subject: [PATCH 5/6] block: use iomap for writes to block devices Date: Tue, 1 Aug 2023 19:22:00 +0200 Message-Id: <20230801172201.1923299-6-hch@lst.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230801172201.1923299-1-hch@lst.de> References: <20230801172201.1923299-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-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE, URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773054673149858464 X-GMAIL-MSGID: 1773054673149858464 Use iomap in buffer_head compat mode to write to block devices. Signed-off-by: Christoph Hellwig Reviewed-by: Luis Chamberlain Reviewed-by: Pankaj Raghav Reviewed-by: Hannes Reinecke Reviewed-by: Christian Brauner Reviewed-by: Johannes Thumshirn --- block/Kconfig | 1 + block/fops.c | 31 +++++++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/block/Kconfig b/block/Kconfig index 86122e459fe046..1a13ef0b1ca10c 100644 --- a/block/Kconfig +++ b/block/Kconfig @@ -5,6 +5,7 @@ menuconfig BLOCK bool "Enable the block layer" if EXPERT default y + select FS_IOMAP select SBITMAP help Provide block layer support for the kernel. diff --git a/block/fops.c b/block/fops.c index f0b822c28ddfe2..063ece37d44e44 100644 --- a/block/fops.c +++ b/block/fops.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include "blk.h" @@ -386,6 +387,27 @@ static ssize_t blkdev_direct_IO(struct kiocb *iocb, struct iov_iter *iter) return __blkdev_direct_IO(iocb, iter, bio_max_segs(nr_pages)); } +static int blkdev_iomap_begin(struct inode *inode, loff_t offset, loff_t length, + unsigned int flags, struct iomap *iomap, struct iomap *srcmap) +{ + struct block_device *bdev = I_BDEV(inode); + loff_t isize = i_size_read(inode); + + iomap->bdev = bdev; + iomap->offset = ALIGN_DOWN(offset, bdev_logical_block_size(bdev)); + if (iomap->offset >= isize) + return -EIO; + iomap->type = IOMAP_MAPPED; + iomap->addr = iomap->offset; + iomap->length = isize - iomap->offset; + iomap->flags |= IOMAP_F_BUFFER_HEAD; + return 0; +} + +static const struct iomap_ops blkdev_iomap_ops = { + .iomap_begin = blkdev_iomap_begin, +}; + static int blkdev_writepage(struct page *page, struct writeback_control *wbc) { return block_write_full_page(page, blkdev_get_block, wbc); @@ -556,6 +578,11 @@ blkdev_direct_write(struct kiocb *iocb, struct iov_iter *from) return written; } +static ssize_t blkdev_buffered_write(struct kiocb *iocb, struct iov_iter *from) +{ + return iomap_file_buffered_write(iocb, from, &blkdev_iomap_ops); +} + /* * Write data to the block device. Only intended for the block device itself * and the raw driver which basically is a fake block device. @@ -605,9 +632,9 @@ static ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from) ret = blkdev_direct_write(iocb, from); if (ret >= 0 && iov_iter_count(from)) ret = direct_write_fallback(iocb, from, ret, - generic_perform_write(iocb, from)); + blkdev_buffered_write(iocb, from)); } else { - ret = generic_perform_write(iocb, from); + ret = blkdev_buffered_write(iocb, from); } if (ret > 0)