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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E18E6C77B7C for ; Wed, 24 May 2023 07:00:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4FE2D6B007B; Wed, 24 May 2023 03:00:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4AD5B900003; Wed, 24 May 2023 03:00:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3C3B1900002; Wed, 24 May 2023 03:00:54 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 30E4B6B007B for ; Wed, 24 May 2023 03:00:54 -0400 (EDT) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id EE5661406CD for ; Wed, 24 May 2023 07:00:53 +0000 (UTC) X-FDA: 80824251186.29.0356711 Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) by imf19.hostedemail.com (Postfix) with ESMTP id 6A4E11A0024 for ; Wed, 24 May 2023 07:00:50 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=szeredi.hu header.s=google header.b=ELxBtF4o; spf=pass (imf19.hostedemail.com: domain of miklos@szeredi.hu designates 209.85.218.51 as permitted sender) smtp.mailfrom=miklos@szeredi.hu; dmarc=pass (policy=quarantine) header.from=szeredi.hu ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1684911651; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=fAJTLElGGZ3FPpd+hHW9swqi8LLYODpFepxDuukKj48=; b=EX7tW8Qm+gwW0Gel/BYnNrXBUAgEXuiWxMJNFxbHkLjw58TVmvJV8+/NETxrltv2AXyf10 1UGumfmUwsRMRyZRqcr+wN9zBwKdy1HRtndh2i9IzxWahvuh8C4bLtQKegAaYfD23WVAvv lPEMm2OyejfsyZ4qsoCzRZzUXHO3/RQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1684911651; a=rsa-sha256; cv=none; b=VDksyXLco9SGR8avTvuRcSukMpcoulEDAHz14OEUSBPvRKuOtJMB9ZaA97fI46xfE4Gmw2 XJL60/CpZBRA3VWaHw/C4Ms/5bjY8RX2cJSKjHjhqTdPPe/Q5SIc1DShcoJBjJPcPOxxqZ 08Lsm0lI0mTlyTGrzC+9/orwvfe2G/U= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=szeredi.hu header.s=google header.b=ELxBtF4o; spf=pass (imf19.hostedemail.com: domain of miklos@szeredi.hu designates 209.85.218.51 as permitted sender) smtp.mailfrom=miklos@szeredi.hu; dmarc=pass (policy=quarantine) header.from=szeredi.hu Received: by mail-ej1-f51.google.com with SMTP id a640c23a62f3a-96fbc74fbf1so85957366b.1 for ; Wed, 24 May 2023 00:00:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=szeredi.hu; s=google; t=1684911648; x=1687503648; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fAJTLElGGZ3FPpd+hHW9swqi8LLYODpFepxDuukKj48=; b=ELxBtF4o5IW55MyhAM6yTOMm6oDR+XkfJhvlX+7yzhV6yRAz+kRMFfkRCYja/6IwPZ FTcVNAUIhnZWWI9RB/TvnQRG99/ujJn+7EvSVb8go10F5ziPp4CLpuOynZN7aDG2iiKN FoJDD4skK5plrQNhXLERFN58xnfbYUu86ouco= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684911648; x=1687503648; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fAJTLElGGZ3FPpd+hHW9swqi8LLYODpFepxDuukKj48=; b=LxuNz0715ysr11ZOsirNXcnCuebhCspFe1f7hXyTS8NCRb3s/R1YN23R9lFZiCF5Ks u5fg84Exx6iFwajX6mIPXBTorDOlilLk4rBITiBCQXBkWpMZc5ZSMB7xKB+LPfUT95z4 SxeleCoONXP+TA3Z5H7Z0wtxnJOw91jdYyKsfYYH4XW3V7RJU4ASJanLWQuGUUHHoHaZ mo989kMOb1g4FgWePj3P+vCcHUqVJIHH4eFAR2L5+SDpS28KX+Dibr7XoBPHix0cBVkG YnZoEpxIe1eK1vInHxsjIsvA20e9FN9hccDcVHkQVCaql+Bau87aP9QGN67shubCWmyG OGrg== X-Gm-Message-State: AC+VfDz0UbSeMYqbSpaJ6/qHdp0J0HZ822KDeZ0JZN5z3jltZ4mi2pAY +itt7cEzbmNVHOYuIuCYG80Y2muEKf//xfkUFfyIxA== X-Google-Smtp-Source: ACHHUZ7SlvMG5x2vt/jfLi6LwhlfmuAYckVadaRzR4fxt1kxZ/GcPnJE1sq8JdB2Ei2izIpvJDmtMpewdQCFFqShZGk= X-Received: by 2002:a17:907:5ca:b0:94f:704d:a486 with SMTP id wg10-20020a17090705ca00b0094f704da486mr16846446ejb.32.1684911648375; Wed, 24 May 2023 00:00:48 -0700 (PDT) MIME-Version: 1.0 References: <20230524063810.1595778-1-hch@lst.de> <20230524063810.1595778-10-hch@lst.de> In-Reply-To: <20230524063810.1595778-10-hch@lst.de> From: Miklos Szeredi Date: Wed, 24 May 2023 09:00:36 +0200 Message-ID: Subject: Re: [PATCH 09/11] fs: factor out a direct_write_fallback helper To: Christoph Hellwig Cc: Matthew Wilcox , Jens Axboe , Xiubo Li , Ilya Dryomov , Alexander Viro , Christian Brauner , "Theodore Ts'o" , Jaegeuk Kim , Chao Yu , 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, cluster-devel@redhat.com, linux-xfs@vger.kernel.org, linux-nfs@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: c1equmhycxno3md5dgp4tgm36t5c538k X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 6A4E11A0024 X-Rspam-User: X-HE-Tag: 1684911650-509921 X-HE-Meta: U2FsdGVkX1/WW4hjwSb3uDbiTKGeDdClteBBcdL+9IMzEq3FePfScWiDjM9J2dYYc+Vy+V3q++fNtVPLelIpyd7C3gJrTKT5XNwQWE2A/O2bn8P6Z2GFf+9FgBOnSfpTqJZznqifBX8wkXK5UlLO39rnwTt2bbNWeujHxKqePQuTAIGVIixmK2MKBDHCoz/KLgYyADB7KiZnFkti1gt64+5TKXlGFT45E8eVjNd/JVXX+UJyt1zknnp9AcE2ffhi/EAeUpxsbjXQ1sRXfADjE3bSGzVWcJ6/ozezBjiLYj/q7M3Q+//MKpk8rlrcRhXyv1sSI78eXQLn27vjhv9de4h14No07cJe+VPGr5BEJtHdVhgHWiJbP7nUaOEv7ecsatFfjOgO3rwZOeRJxtXXiK0bUZxU3H06aBvjeqJ5DPx6HVT2/Z2ntDcnRqKRey2XrlvCNNe03eIG0DHP8WhriMH2ZpmukJGrneWu/vwZ5wcBkT/ll1jdTLkOZYCeTKRDf1/nvJF6Eq8vRa3YiXoXqVPIgwEzTyZgsS1FQ8e/a6X6CKr+x42JO59E8XfOvfeDVtDGGII4xEke4O3h/iR6xVZSu+hFeHxkVfL/Qho7+RyGPMaKHMQHAzssb+Wsn9c8ImK4bmngWDDWrwswyZuK/fZCmjmPIJOxXMHVHvTa+VpHr3JczRrdl7NiakGzvL+ThGOqlkvz9v4kZ9T4/CyE9hMNsa9sHGPOrsPfUxU2Pm9/ztP+2ePANEYdUjmlNTFwFJYLoleCZEz7F4zz+KV7muiYeb8YPYhL4Ua+xnzM7V8SwysNv6KKubcvBwO01jyT7ey8JtqLXe9mnXogod7y/2w7ASxKoOgt4K9kh3ize/KkFg2GzvEhSjqlhaWaT6z3E6+u8K7w9gRkS3g9Du9GP/6Od8ozGlJHLVBntJ6rUtb4lHz0Nph9rXLD/DHsh8RCJ72y8qeYqrk4mD+Ts9b 3rqwrRlG 84uPRR7EIWYbzT/3zoH0H3sfa0qrorbjH0zm9XvM1GS1xivqrOqH9zf+zYdNMTpVtKB+z23TC94ijBi4NEIBCs3ua+fwZ+2dwmP7KHp0hkuVLXDWa3Pvt2nyJriwNA3gFr6BHwpEaR+yNxFMV9puqL8FcRzgFZTa/2y8g2PWM2md853iukJhTLHiutFkRRiApItb58SlOvfCGc89b6aroWC8xgZJJd0xNVgdkvhREpiEmN3cAxI1iZ8zrn3CdUqX5m0CD/l42r+wmWMPrL32GXgqPqw== 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: On Wed, 24 May 2023 at 08:38, Christoph Hellwig wrote: > > Add a helper dealing with handling the syncing of a buffered write fallback > for direct I/O. > > Signed-off-by: Christoph Hellwig > --- > fs/libfs.c | 36 +++++++++++++++++++++++++ > include/linux/fs.h | 2 ++ > mm/filemap.c | 66 +++++++++++----------------------------------- > 3 files changed, 53 insertions(+), 51 deletions(-) > > diff --git a/fs/libfs.c b/fs/libfs.c > index 89cf614a327158..ad37a49e2ecfb7 100644 > --- a/fs/libfs.c > +++ b/fs/libfs.c > @@ -1613,3 +1613,39 @@ u64 inode_query_iversion(struct inode *inode) > return cur >> I_VERSION_QUERIED_SHIFT; > } > EXPORT_SYMBOL(inode_query_iversion); > + > +ssize_t direct_write_fallback(struct kiocb *iocb, struct iov_iter *iter, > + ssize_t direct_written, ssize_t buffered_written) > +{ > + struct address_space *mapping = iocb->ki_filp->f_mapping; > + loff_t pos = iocb->ki_pos - buffered_written; > + loff_t end = iocb->ki_pos - 1; > + int err; > + > + /* > + * If the buffered write fallback returned an error, we want to return > + * the number of bytes which were written by direct I/O, or the error > + * code if that was zero. > + * > + * Note that this differs from normal direct-io semantics, which will > + * return -EFOO even if some bytes were written. > + */ > + if (unlikely(buffered_written < 0)) > + return buffered_written; Comment/code mismatch. The comment says: if (buffered_written < 0) return direct_written ?: buffered_written; > + > + /* > + * We need to ensure that the page cache pages are written to disk and > + * invalidated to preserve the expected O_DIRECT semantics. > + */ > + err = filemap_write_and_wait_range(mapping, pos, end); > + if (err < 0) { > + /* > + * We don't know how much we wrote, so just return the number of > + * bytes which were direct-written > + */ > + return err; Again comment/code mismatch. Thanks, Miklos