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=-8.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 EB9A6C4338F for ; Fri, 13 Aug 2021 03:11:39 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D57D46109E for ; Fri, 13 Aug 2021 03:11:36 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org D57D46109E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=infradead.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 348856B006C; Thu, 12 Aug 2021 23:11:36 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 2F7CA6B0071; Thu, 12 Aug 2021 23:11:36 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1C1208D0001; Thu, 12 Aug 2021 23:11:36 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0026.hostedemail.com [216.40.44.26]) by kanga.kvack.org (Postfix) with ESMTP id F3C586B006C for ; Thu, 12 Aug 2021 23:11:35 -0400 (EDT) Received: from smtpin13.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay01.hostedemail.com (Postfix) with ESMTP id 9C87D180AE81D for ; Fri, 13 Aug 2021 03:11:35 +0000 (UTC) X-FDA: 78468582150.13.9BD3AE9 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf01.hostedemail.com (Postfix) with ESMTP id 590EE505191C for ; Fri, 13 Aug 2021 03:11:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=gZcz0sPokS3rjSwIc/zbOFKv7/ggHbMI5Tcke621bHQ=; b=sIsJf+EBhnIakLEGIBAOM6pre9 ljVp9tIHnCmKf/jmtoM2VFszcC9hOrgR0zproHC7teEkzt/ew4geDzo3odzyOe9gIKcsI7uHXYalt KNvBaef0y9twR1FFUfYkBWWjgAx0645SJx82dTj+1Odrx3AeFk7YSCQyNaJIyg4kaBBfJFGikS/lP n1DXpPU/1TaQgQpjFdCWAxw91Ny6FjTbYP8oFDMNreOCjU0o0pZqNAhWu8sBAndXKNEnwI85wofRQ 7fWSOWIQv7kDKvMz31aKVxt4QIVmtwkugkruKAxcMHfg7YCZOyR75AXcZRN42ooKeQQSVmHshpc7M I3jieDhQ==; Received: from willy by casper.infradead.org with local (Exim 4.94.2 #2 (Red Hat Linux)) id 1mENZj-00FG6Z-Rk; Fri, 13 Aug 2021 03:09:53 +0000 Date: Fri, 13 Aug 2021 04:09:39 +0100 From: Matthew Wilcox To: David Howells Cc: "Darrick J. Wong" , Christoph Hellwig , Trond Myklebust , linux-nfs@vger.kernel.org, viro@zeniv.linux.org.uk, jlayton@kernel.org, sfrench@samba.org, torvalds@linux-foundation.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH v2 1/5] nfs: Fix write to swapfile failure due to generic_write_checks() Message-ID: References: <162879971699.3306668.8977537647318498651.stgit@warthog.procyon.org.uk> <162879972678.3306668.10709543333474121000.stgit@warthog.procyon.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <162879972678.3306668.10709543333474121000.stgit@warthog.procyon.org.uk> X-Rspamd-Queue-Id: 590EE505191C Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=sIsJf+EB; dmarc=none; spf=none (imf01.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org X-Rspamd-Server: rspam04 X-Stat-Signature: emx99haee446g67wrcr5h1re61y3ay3g X-HE-Tag: 1628824295-307585 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 Thu, Aug 12, 2021 at 09:22:06PM +0100, David Howells wrote: > Trying to use a swapfile on NFS results in every DIO write failing with > ETXTBSY because generic_write_checks(), as called by nfs_direct_write() > from nfs_direct_IO(), forbids writes to swapfiles. Why does nfs_direct_write() call generic_write_checks()? ie call generic_write_checks() earlier, and only swap would bypass them. diff --git a/fs/nfs/direct.c b/fs/nfs/direct.c index 2e894fec036b..7e2ca6b5fc5f 100644 --- a/fs/nfs/direct.c +++ b/fs/nfs/direct.c @@ -905,9 +905,6 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter) dfprintk(FILE, "NFS: direct write(%pD2, %zd@%Ld)\n", file, iov_iter_count(iter), (long long) iocb->ki_pos); - result = generic_write_checks(iocb, iter); - if (result <= 0) - return result; count = result; nfs_add_stats(mapping->host, NFSIOS_DIRECTWRITTENBYTES, count); diff --git a/fs/nfs/file.c b/fs/nfs/file.c index 1fef107961bc..91b2e3214836 100644 --- a/fs/nfs/file.c +++ b/fs/nfs/file.c @@ -611,6 +611,10 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) errseq_t since; int error; + result = generic_write_checks(iocb, from); + if (result < 0) + return result; + result = nfs_key_timeout_notify(file, inode); if (result) return result; @@ -621,8 +625,6 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) dprintk("NFS: write(%pD2, %zu@%Ld)\n", file, iov_iter_count(from), (long long) iocb->ki_pos); - if (IS_SWAPFILE(inode)) - goto out_swapfile; /* * O_APPEND implies that we must revalidate the file length. */ @@ -636,7 +638,6 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) since = filemap_sample_wb_err(file->f_mapping); nfs_start_io_write(inode); - result = generic_write_checks(iocb, from); if (result > 0) { current->backing_dev_info = inode_to_bdi(inode); result = generic_perform_write(file, from, iocb->ki_pos); @@ -677,10 +678,6 @@ ssize_t nfs_file_write(struct kiocb *iocb, struct iov_iter *from) nfs_add_stats(inode, NFSIOS_NORMALWRITTENBYTES, written); out: return result; - -out_swapfile: - printk(KERN_INFO "NFS: attempt to write to active swap file!\n"); - return -ETXTBSY; } EXPORT_SYMBOL_GPL(nfs_file_write);