From patchwork Mon Apr 24 05:49:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christoph Hellwig X-Patchwork-Id: 13221665 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 1A115C7EE21 for ; Mon, 24 Apr 2023 05:50:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9C95F280001; Mon, 24 Apr 2023 01:50:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 979206B0085; Mon, 24 Apr 2023 01:50:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 7A4656B0087; Mon, 24 Apr 2023 01:50:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 67D936B0083 for ; Mon, 24 Apr 2023 01:50:22 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 4E45F1A0181 for ; Mon, 24 Apr 2023 05:50:22 +0000 (UTC) X-FDA: 80715209484.21.D7449F8 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) by imf24.hostedemail.com (Postfix) with ESMTP id A2462180010 for ; Mon, 24 Apr 2023 05:50:20 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=ZQNPwJKf; spf=none (imf24.hostedemail.com: domain of BATV+e16e2fc4419b117693a1+7183+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+e16e2fc4419b117693a1+7183+infradead.org+hch@bombadil.srs.infradead.org; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1682315420; 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=Y0+yvpTOTD7M6v1Yq6rfSkRSonNSi3NR5WwAu/cW1ss=; b=Q0wl1zc8J84MaCWRVVqAm/ZseFCYaK559GEHJzy563MkI+kjX+WL+T0Nen4yZvscAJOYGr VsUVcw3wJOTaV8/+/U0JJA74QY9sd0pu4PfsrrICnPZsUNuVvSsewRurmS7FX+LkreLgCh q0ADb2wRiiBxSvRzJM/7xvzDPt1hNRg= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=infradead.org header.s=bombadil.20210309 header.b=ZQNPwJKf; spf=none (imf24.hostedemail.com: domain of BATV+e16e2fc4419b117693a1+7183+infradead.org+hch@bombadil.srs.infradead.org has no SPF policy when checking 198.137.202.133) smtp.mailfrom=BATV+e16e2fc4419b117693a1+7183+infradead.org+hch@bombadil.srs.infradead.org; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1682315420; a=rsa-sha256; cv=none; b=VkUrRqa/QXl8po5OEkWGMVoDYwHJAIpLlq8qUqC2Y55X/OwzwpsjlIpT3QOi3xITl2MReC eUaF7s9tkRM7iRYgIHGJMVldbWGWB5teb23ZE6drrSy2NDBi+39HwXP/n/oBF/WWpP60H7 fRouPwnZMnqCuz1njB5t81VkTVcuDtg= 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=Y0+yvpTOTD7M6v1Yq6rfSkRSonNSi3NR5WwAu/cW1ss=; b=ZQNPwJKfnD/XoJEl/XtSriZEb/ qPTxNVzmqOnJMzTZ5iTdaf9XqBSw+BBu2uTCUsDMrzAjWPNC6D9SVDVDH6rgShfNoncH7mFyV3luD sxCPuCpJEwm0G0klK3ha3UCo2LmEucN7OYhH/wziwE8/fW14ToiwebLf+FpusKtDu6RpIeIvF8maX xPF4tsipjrrtTTnYVAfuLNG5qQXZUfgRHhaC4tq5yxrW3TuZiBF7KM9G8skbrq2iBZzLJMvdl05I+ 6PwoN1Mz5APQFRqOdoUiJWha+6Ca0DLyuFLok7PIf+C183kOeH+iqnbjhsdqjiAuEjiaZ4+/sXmAv QEucEtcw==; Received: from [2001:4bb8:189:a74f:e8a5:5f73:6d2:23b8] (helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.96 #2 (Red Hat Linux)) id 1pqp5R-00FP6k-2n; Mon, 24 Apr 2023 05:50:06 +0000 From: Christoph Hellwig To: Jens Axboe Cc: Miklos Szeredi , "Darrick J. Wong" , Andrew Morton , David Howells , Matthew Wilcox , linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, ceph-devel@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, linux-kernel@vger.kernel.org Subject: [PATCH 12/17] fuse: use direct_write_fallback Date: Mon, 24 Apr 2023 07:49:21 +0200 Message-Id: <20230424054926.26927-13-hch@lst.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230424054926.26927-1-hch@lst.de> References: <20230424054926.26927-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-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: s573wuhx545xfj6f1c5z4k4mkbshs4yn X-Rspamd-Queue-Id: A2462180010 X-HE-Tag: 1682315420-914077 X-HE-Meta: U2FsdGVkX1+kdNkmw9arZOaC2Re98VuAgJxaVRubmX30MCABBA2xKd+pXHoL2kMLefhyafTZy+JbOTYpVFe5mtdSEx8fmv4bAfwJePYYk8ttMeRLFknhKUDiSuDya9ElhIFBmva0nFskHbs3eTBG3KMgIfq+XOxAKALbtFJJCpKLCfAOGAw4K2X3pj1EizcMtr6ZQV0VwzmBj0FvdTFTVf2wa3pVSEFj1/wWwqSxq1xPMr7RB+3L6DpvmipnKII1i2nQVK53dGuWBcGjnpi0xBFgy/Gbpl0EDL6fq71AMyMT7VOzy+iM+lEO/tqu5Ltp3nJm0BeTXrOrHji7oqk6a9Du/J2432pPE8CMsv+qy4t28S3Fo1ZOYRVEOKcM/6MkiXUy9sCTwnCDXUoPpNPXD7UCLVgUfTHlzE97A3ePNg8Tn7zkORfWc015T6sgyXkXupsjGuHsTmg/i6fy0d2kgJLanW+6gkjIq/CY9BN0EHLDdCECzV/z83wgT5nQX0yJT2WapZGmrWYXxXbA7cpJqo8jtg7xMI1PAxKA6QQ02PXwDOMHSXXMxiGoenQZIRzz6SAsBfcrLwTXYIkhqNSJgt+z7WNUSqXC4cZs8iFPZtFq5sPFL9V4ULqHuCKcxJblSs3reem3OLCDLlxz74qbrzX748qQZe0Bqp/noVWRaxVIJ2jl4XCvaw5gpOaNdyscBEzoQSVI+SYwe/njCE5oUgiDJ6fIrHX9wT8Fvz8+EX21dIlpOTka0zWBkOIk7T3jCsya/HG/3bRO8ywXtAH0jRB0xGn5vu/xJfksjqftO0iZ5l12icN/ssNvh0E+8fLHsxQJT04nNbLEXeyo8vpDOlp77unFKvik5iDSNfNeBeBIHLeqga59GZAnqekS6OR9tBSFHdYnENlZM+w7nlOneUD4KNzL5716j185WOUlr3z0jUf5U304U/eO+o+SzwHKWV2ZoJHnHFeRN5IWSTn 1go5V+16 fKoKqjLUv7PkaqnOuCJ9XCh2bjVDXfZBZLipWshlQ3tvpTDo/y7U3oVhPi73X6XxyEOhDxw6Zj9LbAWRkzTq6xpHmlPIt8KF7vbl7hHqqRQTXIhjBvabiFePKzLVY6tRQOauhWKqpObiG729rCooaLBcJrepxy+RLSw3919ioDMgFGle5exj7sho6rb0RbbQKYGjOkNPR6VHTCdoZmYCQCqnhMP/zukDWQE0j5FR4EQokR38JZypj2zkmFmfin68FCLRrCgHQcxSRLLNxjaKcnZs17DSjIa+qyv9t9rJNe9DtvmXx/Wx1CMBARa28S5D/AWMMmFtwgpuBqourNovxkvTdBsS7L/UlDNfwTtYB+GCqDqQpspo7PiMDhNKMXkXHisJstKf0SJ6kOWJo5p4M2OcxfO+uRovjwK9TZk8B4yGfhiXJ+kJhNCc/z3NAOUFm+MCze+QCCVqUVdCYjF7U2UjPiQ== 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: Refator the fuse direct write code so that the fuse_perform_write callig convention is simplified to match generic_perform_write and it's updating ki_pos directly, and the generic direct_write_fallback helper is used to consolidate buffered I/O fallback code. Signed-off-by: Christoph Hellwig --- fs/fuse/file.c | 44 +++++++++++--------------------------------- 1 file changed, 11 insertions(+), 33 deletions(-) diff --git a/fs/fuse/file.c b/fs/fuse/file.c index de37a3a06a7169..55b64dac175d68 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -1280,13 +1280,13 @@ static inline unsigned int fuse_wr_pages(loff_t pos, size_t len, max_pages); } -static ssize_t fuse_perform_write(struct kiocb *iocb, - struct address_space *mapping, - struct iov_iter *ii, loff_t pos) +static ssize_t fuse_perform_write(struct kiocb *iocb, struct iov_iter *ii) { + struct address_space *mapping = iocb->ki_filp->f_mapping; struct inode *inode = mapping->host; struct fuse_conn *fc = get_fuse_conn(inode); struct fuse_inode *fi = get_fuse_inode(inode); + loff_t pos = iocb->ki_pos; int err = 0; ssize_t res = 0; @@ -1329,7 +1329,10 @@ static ssize_t fuse_perform_write(struct kiocb *iocb, fuse_write_update_attr(inode, pos, res); clear_bit(FUSE_I_SIZE_UNSTABLE, &fi->state); - return res > 0 ? res : err; + if (!res) + return err; + iocb->ki_pos += res; + return res; } static ssize_t fuse_cache_write_iter(struct kiocb *iocb, struct iov_iter *from) @@ -1337,11 +1340,9 @@ static ssize_t fuse_cache_write_iter(struct kiocb *iocb, struct iov_iter *from) struct file *file = iocb->ki_filp; struct address_space *mapping = file->f_mapping; ssize_t written = 0; - ssize_t written_buffered = 0; struct inode *inode = mapping->host; ssize_t err; struct fuse_conn *fc = get_fuse_conn(inode); - loff_t endbyte = 0; if (fc->writeback_cache) { /* Update size (EOF optimization) and mode (SUID clearing) */ @@ -1378,35 +1379,12 @@ static ssize_t fuse_cache_write_iter(struct kiocb *iocb, struct iov_iter *from) goto out; if (iocb->ki_flags & IOCB_DIRECT) { - loff_t pos = iocb->ki_pos; written = generic_file_direct_write(iocb, from); - if (written < 0 || !iov_iter_count(from)) - goto out; - - pos += written; - - written_buffered = fuse_perform_write(iocb, mapping, from, pos); - if (written_buffered < 0) { - err = written_buffered; - goto out; - } - endbyte = pos + written_buffered - 1; - - err = filemap_write_and_wait_range(file->f_mapping, pos, - endbyte); - if (err) - goto out; - - invalidate_mapping_pages(file->f_mapping, - pos >> PAGE_SHIFT, - endbyte >> PAGE_SHIFT); - - written += written_buffered; - iocb->ki_pos = pos + written_buffered; + if (written >= 0 && iov_iter_count(from)) + written = direct_write_fallback(iocb, from, written, + fuse_perform_write(iocb, from)); } else { - written = fuse_perform_write(iocb, mapping, from, iocb->ki_pos); - if (written >= 0) - iocb->ki_pos += written; + written = fuse_perform_write(iocb, from); } out: current->backing_dev_info = NULL;